|
| 1 | +// META: title=Request signals & the cache API |
| 2 | +// META: global=window,worker |
| 3 | + |
| 4 | +promise_test(async () => { |
| 5 | + await caches.delete('test'); |
| 6 | + const controller = new AbortController(); |
| 7 | + const signal = controller.signal; |
| 8 | + const request = new Request('../resources/data.json', { signal }); |
| 9 | + |
| 10 | + const cache = await caches.open('test'); |
| 11 | + await cache.put(request, new Response('')); |
| 12 | + |
| 13 | + const requests = await cache.keys(); |
| 14 | + |
| 15 | + assert_equals(requests.length, 1, 'Ensuring cleanup worked'); |
| 16 | + |
| 17 | + const [cachedRequest] = requests; |
| 18 | + |
| 19 | + controller.abort(); |
| 20 | + |
| 21 | + assert_false(cachedRequest.signal.aborted, "Request from cache shouldn't be aborted"); |
| 22 | + |
| 23 | + const data = await fetch(cachedRequest).then(r => r.json()); |
| 24 | + assert_equals(data.key, 'value', 'Fetch fully completes'); |
| 25 | +}, "Signals are not stored in the cache API"); |
| 26 | + |
| 27 | +promise_test(async () => { |
| 28 | + await caches.delete('test'); |
| 29 | + const controller = new AbortController(); |
| 30 | + const signal = controller.signal; |
| 31 | + const request = new Request('../resources/data.json', { signal }); |
| 32 | + controller.abort(); |
| 33 | + |
| 34 | + const cache = await caches.open('test'); |
| 35 | + await cache.put(request, new Response('')); |
| 36 | + |
| 37 | + const requests = await cache.keys(); |
| 38 | + |
| 39 | + assert_equals(requests.length, 1, 'Ensuring cleanup worked'); |
| 40 | + |
| 41 | + const [cachedRequest] = requests; |
| 42 | + |
| 43 | + assert_false(cachedRequest.signal.aborted, "Request from cache shouldn't be aborted"); |
| 44 | + |
| 45 | + const data = await fetch(cachedRequest).then(r => r.json()); |
| 46 | + assert_equals(data.key, 'value', 'Fetch fully completes'); |
| 47 | +}, "Signals are not stored in the cache API, even if they're already aborted"); |
0 commit comments