61 lines
2.4 KiB
HTML
61 lines
2.4 KiB
HTML
<!DOCTYPE html>
|
|
<meta name="timeout" content="long">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<body>
|
|
<script>
|
|
function get_requests(worker, expected) {
|
|
return new Promise(resolve => {
|
|
navigator.serviceWorker.addEventListener('message', function onMsg(evt) {
|
|
if (evt.data.size >= expected) {
|
|
navigator.serviceWorker.removeEventListener('message', onMsg);
|
|
resolve(evt.data);
|
|
} else {
|
|
worker.postMessage("");
|
|
}
|
|
});
|
|
worker.postMessage("");
|
|
});
|
|
}
|
|
|
|
const resources = [
|
|
x=>`<link rel="stylesheet" href="404/style?${x}">`,
|
|
x=>`<link rel="prefetch" as="style" href="404/prefetch?${x}">`,
|
|
x=>`<script src="404/script?${x}"><\/script>`,
|
|
x=>`<iframe src="404/iframe?${x}"></iframe>`,
|
|
x=>`<meta http-equiv="refresh" content="0;url=404/meta?${x}">`,
|
|
x=>`<a href="404/a?${x}">click</a><script>document.querySelector('a').click()<\/script>`,
|
|
x=>`<base href="404/base?${x}"><a href>me</a><script>document.querySelector('a').click()<\/script>`,
|
|
x=>`<video controls poster="404/poster?${x}"></video>`,
|
|
x=>`<input type="image" src="404/input?${x}">`,
|
|
x=>`<form method="GET" action="404/form?${x}"></form><script>document.querySelector('form').submit()<\/script>`,
|
|
x=>`<body background="404/body?${x}"></body>`,
|
|
];
|
|
|
|
async_test(t => {
|
|
const script = 'service-worker.js';
|
|
const paths = [];
|
|
navigator.serviceWorker.register(script);
|
|
t.step(async () => {
|
|
const registration = await navigator.serviceWorker.ready;
|
|
for (const html of resources) {
|
|
const iframe1 =
|
|
document.body.appendChild(document.createElement('iframe'));
|
|
iframe1.src = 'resources.html?html=' + html`%0A<`;
|
|
const iframe2 =
|
|
document.body.appendChild(document.createElement('iframe'));
|
|
iframe2.src = 'resources.html?html=' + html``;
|
|
const path = html`EOP`;
|
|
paths.push(path.substring(path.search('404\\/')+4, path.search('EOP')));
|
|
}
|
|
|
|
const requests = await get_requests(registration.active, resources.length);
|
|
paths.forEach(path => {
|
|
assert_true(requests.has(path),
|
|
`${path} should appear in requests sent`);
|
|
});
|
|
await registration.unregister();
|
|
t.done();
|
|
});
|
|
}, 'Only blocks dangling markup requests');
|
|
</script>
|