fetch-event-within-sw.https.html (1990B)
1 <!DOCTYPE html> 2 <meta name="timeout" content="long"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="resources/test-helpers.sub.js"></script> 6 7 <script> 8 const worker = 'resources/fetch-event-within-sw-worker.js'; 9 10 async function registerSwAndOpenFrame(t) { 11 const registration = await navigator.serviceWorker.register( 12 worker, { scope: 'resources/' }); 13 t.add_cleanup(() => registration.unregister()); 14 await wait_for_state(t, registration.installing, 'activated'); 15 16 const frame = await with_iframe('resources/simple.html'); 17 t.add_cleanup(() => frame.remove()); 18 return frame; 19 } 20 21 async function deleteCaches() { 22 const cacheKeys = await caches.keys(); 23 await Promise.all(cacheKeys.map(c => caches.delete(c))); 24 } 25 26 promise_test(async t => { 27 t.add_cleanup(deleteCaches); 28 29 const iframe = await registerSwAndOpenFrame(t); 30 const fetchText = 31 await iframe.contentWindow.fetch('sample.txt').then(r => r.text()); 32 33 const cache = await iframe.contentWindow.caches.open('test'); 34 await cache.add('sample.txt'); 35 36 const response = await cache.match('sample.txt'); 37 const cacheText = await (response ? response.text() : 'cache match failed'); 38 assert_equals(fetchText, 'intercepted', 'fetch intercepted'); 39 assert_equals(cacheText, 'intercepted', 'cache.add intercepted'); 40 }, 'Service worker intercepts requests from window'); 41 42 promise_test(async t => { 43 const iframe = await registerSwAndOpenFrame(t); 44 const [fetchText, cacheText] = await Promise.all([ 45 iframe.contentWindow.fetch('sample.txt-inner-fetch').then(r => r.text()), 46 iframe.contentWindow.fetch('sample.txt-inner-cache').then(r => r.text()) 47 ]); 48 assert_equals(fetchText, 'Hello world\n', 'fetch within SW not intercepted'); 49 assert_equals(cacheText, 'Hello world\n', 50 'cache.add within SW not intercepted'); 51 }, 'Service worker does not intercept fetch/cache requests within service ' + 52 'worker'); 53 </script>