65 lines
2.2 KiB
HTML
65 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<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 setupRegistrationAndWaitToBeControlled(t, scope) {
|
|
const controlled = new Promise((resolve) => {
|
|
navigator.serviceWorker.oncontrollerchange = () => { resolve(); };
|
|
});
|
|
const reg = await navigator.serviceWorker.register('sw-intercept.js');
|
|
await wait_for_state(t, reg.installing, 'activated');
|
|
await controlled;
|
|
add_completion_callback(_ => reg.unregister());
|
|
return reg;
|
|
}
|
|
|
|
// Using 250ms polling interval to provide enough 'network calmness' to give
|
|
// the background low priority revalidation request a chance to kick in.
|
|
function wait250ms(test) {
|
|
return new Promise(resolve => {
|
|
test.step_timeout(() => {
|
|
resolve();
|
|
}, 250);
|
|
});
|
|
}
|
|
|
|
promise_test(async (test) => {
|
|
var request_token = token();
|
|
const uri = 'resources/stale-script.py?token=' + request_token;
|
|
|
|
await setupRegistrationAndWaitToBeControlled(test, 'resources/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(`resources/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 wait250ms(test);
|
|
}
|
|
}, 'Second fetch returns same response');
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|