| <!DOCTYPE html> |
| <!--- |
| Tentative test against: |
| https://github.com/whatwg/fetch/pull/853 |
| --> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>Stale Revalidation Requests don't get sent to service worker</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script> |
| <script src="/common/utils.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| // Duplicating this resource to make service worker scoping simpler. |
| async function setupRegistration(t, scope) { |
| const reg = await navigator.serviceWorker.register('sw-intercept.js'); |
| await wait_for_state(t, reg.installing, 'activated'); |
| add_completion_callback(_ => reg.unregister()); |
| return reg; |
| } |
| |
| function wait25ms(test) { |
| return new Promise(resolve => { |
| test.step_timeout(() => { |
| resolve(); |
| }, 25); |
| }); |
| } |
| |
| promise_test(async (test) => { |
| var request_token = token(); |
| const uri = 'stale-script.py?token=' + request_token; |
| |
| await setupRegistration(test, 'stale-script.py'); |
| |
| var service_worker_count = 0; |
| navigator.serviceWorker.addEventListener('message', function once(event) { |
| if (event.data.endsWith(uri)) { |
| service_worker_count++; |
| } |
| }); |
| |
| const response = await fetch(uri); |
| const response2 = await fetch(uri); |
| assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id')); |
| while(true) { |
| const revalidation_check = await fetch(`stale-script.py?query&token=` + request_token); |
| if (revalidation_check.headers.get('Count') == '2') { |
| // The service worker should not see the revalidation request. |
| assert_equals(service_worker_count, 2); |
| break; |
| } |
| await wait25ms(test); |
| } |
| }, 'Second fetch returns same response'); |
| |
| </script> |
| </body> |
| </html> |