Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add WPTs for COEP + dedicated worker
For whatwg/html#4924 Bug: 1064920 Change-Id: I3837bd2dab635ec0d09d68362a5e4f13b6f44582 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2121936 Commit-Queue: Yutaka Hirano <yhirano@chromium.org> Reviewed-by: Mike West <mkwst@chromium.org> Cr-Commit-Position: refs/heads/master@{#755285}
- Loading branch information
1 parent
7dd40e8
commit 58beee0
Showing
2 changed files
with
121 additions
and
0 deletions.
There are no files selected for viewing
114 changes: 114 additions & 0 deletions
114
html/cross-origin-embedder-policy/dedicated-worker.https.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<!doctype html> | ||
<title>COEP and dedicated worker</title> | ||
<script src=/resources/testharness.js></script> | ||
<script src=/resources/testharnessreport.js></script> | ||
<script src="/common/get-host-info.sub.js"></script> | ||
<body> | ||
<script> | ||
const HOST = get_host_info(); | ||
const FETCH_URL = `${HOST.REMOTE_ORIGIN}/common/blank.html`; | ||
const WORKER_URL = new URL('resources/dedicated-worker.js', location).href; | ||
const WITH_COEP = '?pipe=header(cross-origin-embedder-policy,require-corp)'; | ||
|
||
async function createWorker(t, frameHasCoep, workerHasCoep, workerOptions) { | ||
const frame = document.createElement("iframe"); | ||
t.add_cleanup(() => frame.remove()); | ||
frame.src = '/common/blank.html'; | ||
if (frameHasCoep) { | ||
frame.src += WITH_COEP; | ||
} | ||
document.body.append(frame); | ||
|
||
await new Promise(resolve => { | ||
frame.addEventListener('load', resolve, {once: true}) | ||
}); | ||
const worker = new frame.contentWindow.Worker( | ||
workerHasCoep ? WORKER_URL + WITH_COEP : WORKER_URL, workerOptions); | ||
|
||
return worker; | ||
} | ||
|
||
function waitForMessage(target) { | ||
return new Promise(resolve => { | ||
target.addEventListener('message', resolve, {once: true}); | ||
}); | ||
} | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, false, false, {}); | ||
worker.onerror = t.unreached_func('Worker.onerror should not be called'); | ||
|
||
worker.postMessage(FETCH_URL); | ||
|
||
const result = await waitForMessage(worker); | ||
assert_equals(result.data, 'LOADED'); | ||
}, 'COEP: none worker in COEP: none frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, true, false, {}); | ||
worker.onerror = () => t.done(); | ||
|
||
await new Promise(resolve => t.step_timeout(resolve, 500)); | ||
assert_unreached('The worker should fire an error event'); | ||
}, 'COEP: none worker in COEP: require-corp frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, false, true, {}); | ||
worker.onerror = t.unreached_func('Worker.onerror should not be called'); | ||
|
||
worker.postMessage(FETCH_URL); | ||
|
||
const result = await waitForMessage(worker); | ||
assert_equals(result.data, 'FAILED'); | ||
}, 'COEP: require-corp worker in COEP: none frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, true, true, {}); | ||
worker.onerror = t.unreached_func('Worker.onerror should not be called'); | ||
|
||
worker.postMessage(FETCH_URL); | ||
|
||
const result = await waitForMessage(worker); | ||
assert_equals(result.data, 'FAILED'); | ||
}, 'COEP: require-corp worker in COEP: require-corp frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, false, false, {type: 'module'}); | ||
worker.onerror = t.unreached_func('Worker.onerror should not be called'); | ||
|
||
worker.postMessage(FETCH_URL); | ||
|
||
const result = await waitForMessage(worker); | ||
assert_equals(result.data, 'LOADED'); | ||
}, 'COEP: none module worker in COEP: none frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, true, false, {type: 'module'}); | ||
worker.onerror = () => t.done(); | ||
|
||
await new Promise(resolve => t.step_timeout(resolve, 500)); | ||
assert_unreached('The worker should fire an error event'); | ||
}, 'COEP: none module worker in COEP: require-corp frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, false, true, {type: 'module'}); | ||
worker.onerror = t.unreached_func('Worker.onerror should not be called'); | ||
|
||
worker.postMessage(FETCH_URL); | ||
|
||
const result = await waitForMessage(worker); | ||
assert_equals(result.data, 'FAILED'); | ||
}, 'COEP: require-corp module worker in COEP: none frame'); | ||
|
||
promise_test(async (t) => { | ||
const worker = await createWorker(t, true, true, {type: 'module'}); | ||
worker.onerror = t.unreached_func('Worker.onerror should not be called'); | ||
|
||
worker.postMessage(FETCH_URL); | ||
|
||
const result = await waitForMessage(worker); | ||
assert_equals(result.data, 'FAILED'); | ||
}, 'COEP: require-corp module worker in COEP: require-corp frame'); | ||
|
||
</script> | ||
</body> |
7 changes: 7 additions & 0 deletions
7
html/cross-origin-embedder-policy/resources/dedicated-worker.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
self.onmessage = (e) => { | ||
fetch(e.data, {mode: 'no-cors'}).then(() => { | ||
self.postMessage('LOADED'); | ||
}, () => { | ||
self.postMessage('FAILED'); | ||
}); | ||
}; |