fetch-intercepted-by-service-worker.https.html (1475B)
1 <!DOCTYPE html> 2 <title>Service worker intercepts a fetch request coming from a prerendered page</title> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/common/utils.js"></script> 7 <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> 8 <script src="../resources/utils.js"></script> 9 <script src="resources/utils.js"></script> 10 11 <body> 12 <script> 13 setup(() => assertSpeculationRulesIsSupported()); 14 15 promise_test(async t => { 16 const uid = token(); 17 18 const PAGE_URL = `resources/fetch-intercepted-by-service-worker.html?uid=${uid}`; 19 const WORKER_URL = 'resources/fetch-intercept-worker.js'; 20 21 const registration = 22 await service_worker_unregister_and_register(t, WORKER_URL, PAGE_URL); 23 t.add_cleanup(() => registration.unregister()); 24 await wait_for_state(t, registration.installing, 'activated'); 25 26 const bc = new PrerenderChannel('prerender-channel', uid); 27 t.add_cleanup(_ => bc.close()); 28 29 const gotMessage = new Promise(resolve => { 30 bc.addEventListener('message', e => { 31 resolve(e.data); 32 }, { 33 once: true 34 }); 35 }); 36 37 startPrerendering(PAGE_URL); 38 39 const result = await gotMessage; 40 assert_equals( 41 result, 'intercepted by service worker', 42 "fetch() should go through a service worker's fetch event handler"); 43 }, 'fetch() in a prerendering page should go through a service worker'); 44 </script>