fetch-sw.https.html (2220B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Stale Revalidation Requests don't get sent to service worker</title> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script> 9 <script src="/common/utils.js"></script> 10 </head> 11 <body> 12 <script> 13 14 // Duplicating this resource to make service worker scoping simpler. 15 async function setupRegistrationAndWaitToBeControlled(t, scope) { 16 const controlled = new Promise((resolve) => { 17 navigator.serviceWorker.oncontrollerchange = () => { resolve(); }; 18 }); 19 const reg = await navigator.serviceWorker.register('sw-intercept.js'); 20 await wait_for_state(t, reg.installing, 'activated'); 21 await controlled; 22 add_completion_callback(_ => reg.unregister()); 23 return reg; 24 } 25 26 // Using 250ms polling interval to provide enough 'network calmness' to give 27 // the background low priority revalidation request a chance to kick in. 28 function wait250ms(test) { 29 return new Promise(resolve => { 30 test.step_timeout(() => { 31 resolve(); 32 }, 250); 33 }); 34 } 35 36 promise_test(async (test) => { 37 var request_token = token(); 38 const uri = 'resources/stale-script.py?token=' + request_token; 39 40 await setupRegistrationAndWaitToBeControlled(test, 'resources/stale-script.py'); 41 42 var service_worker_count = 0; 43 navigator.serviceWorker.addEventListener('message', function once(event) { 44 if (event.data.endsWith(uri)) { 45 service_worker_count++; 46 } 47 }); 48 49 const response = await fetch(uri); 50 const response2 = await fetch(uri); 51 assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id')); 52 while(true) { 53 const revalidation_check = await fetch(`resources/stale-script.py?query&token=` + request_token); 54 if (revalidation_check.headers.get('Count') == '2') { 55 // The service worker should not see the revalidation request. 56 assert_equals(service_worker_count, 2); 57 break; 58 } 59 await wait250ms(test); 60 } 61 }, 'Second fetch returns same response'); 62 63 </script> 64 </body> 65 </html>