Commit bb9c94d9 authored by Yuta Kasai's avatar Yuta Kasai Committed by Commit Bot

Simplify fetch-event-within-sw.https.html using async/await

This CL simplifies the test with modern utilities like async/await and t.add_cleanup().
This just refactors the test, and doesn't change test behavior.

Bug: 678905
Change-Id: I836411a7a3fa16b825de29630ec01d4ea42a1586
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1784264
Commit-Queue: Yuta Kasai <yutakasai@google.com>
Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#693583}
parent 2b2b42c5
<!DOCTYPE html> <!DOCTYPE html>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/test-helpers.sub.js"></script> <script src="resources/test-helpers.sub.js"></script>
<body>
<script> <script>
const worker = 'resources/fetch-event-within-sw-worker.js'; const worker = 'resources/fetch-event-within-sw-worker.js';
function reset() { async function registerSwAndOpenFrame(t) {
for (const iframe of [...document.querySelectorAll('.test-iframe')]) { const registration = await navigator.serviceWorker.register(
iframe.remove(); worker, { scope: 'resources/' });
} t.add_cleanup(() => registration.unregister());
return navigator.serviceWorker.getRegistrations().then(registrations => { await wait_for_state(t, registration.installing, 'activated');
return Promise.all(registrations.map(r => r.unregister()));
}).then(() => caches.keys()).then(cacheKeys => { const frame = await with_iframe('resources/simple.html');
return Promise.all(cacheKeys.map(c => caches.delete(c))); t.add_cleanup(() => frame.remove());
}); return frame;
} }
add_completion_callback(reset); async function deleteCashes() {
const cacheKeys = await caches.keys();
await Promise.all(cacheKeys.map(c => caches.delete(c)));
}
function regReady(reg) { promise_test(async t => {
return new Promise((resolve, reject) => { t.add_cleanup(deleteCashes);
if (reg.active) {
resolve();
return;
}
const nextWorker = reg.waiting || reg.installing;
nextWorker.addEventListener('statechange', () => { const iframe = await registerSwAndOpenFrame(t);
if (nextWorker.state == 'redundant') { const fetchText =
reject(Error(`Service worker failed to install`)); await iframe.contentWindow.fetch('dummy.txt').then(r => r.text());
return;
}
if (nextWorker.state == 'activated') {
resolve();
}
});
});
}
function registerSwAndOpenFrame() { const cache = await iframe.contentWindow.caches.open('test');
return reset().then(() => navigator.serviceWorker.register(worker, { scope: 'resources/' })) await cache.add('dummy.txt');
.then(reg => regReady(reg))
.then(() => with_iframe('resources/simple.html'));
}
promise_test(() => { const response = await cache.match('dummy.txt');
return registerSwAndOpenFrame().then(iframe => { const cacheText = await (response ? response.text() : 'cache match failed');
return Promise.all([ assert_equals(fetchText, 'intercepted', 'fetch intercepted');
iframe.contentWindow.fetch('dummy.txt').then(r => r.text()), assert_equals(cacheText, 'intercepted', 'cache.add intercepted');
iframe.contentWindow.caches.open('test')
.then(cache =>
cache.add('dummy.txt').then(() => cache.match('dummy.txt'))
).then(response => {
if (!response) return 'cache match failed';
return response.text();
})
])
}).then(([fetchText, cacheText]) => {
assert_equals(fetchText, 'intercepted', 'fetch intercepted');
assert_equals(cacheText, 'intercepted', 'cache.add intercepted');
});
}, 'Service worker intercepts requests from window'); }, 'Service worker intercepts requests from window');
promise_test(() => { promise_test(async t => {
return registerSwAndOpenFrame().then(iframe => { const iframe = await registerSwAndOpenFrame(t);
return Promise.all([ const [fetchText, cacheText] = await Promise.all([
iframe.contentWindow.fetch('dummy.txt-inner-fetch').then(r => r.text()), iframe.contentWindow.fetch('dummy.txt-inner-fetch').then(r => r.text()),
iframe.contentWindow.fetch('dummy.txt-inner-cache').then(r => r.text()) iframe.contentWindow.fetch('dummy.txt-inner-cache').then(r => r.text())
]) ]);
}).then(([fetchText, cacheText]) => { assert_equals(fetchText, 'Hello world\n', 'fetch within SW not intercepted');
assert_equals(fetchText, 'Hello world\n', 'fetch within SW not intercepted'); assert_equals(cacheText, 'Hello world\n',
assert_equals(cacheText, 'Hello world\n', 'cache.add within SW not intercepted'); 'cache.add within SW not intercepted');
}); }, 'Service worker does not intercept fetch/cache requests within service ' +
}, `Service worker does not intercept fetch/cache requests within service worker`); 'worker');
</script> </script>
</body> \ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment