Skip to content

Commit e19aa77

Browse files
yutakahiranomoz-wptsync-bot
authored andcommitted
Bug 1652946 [wpt PR 24600] - Add tests for 'cross-origin-isolated' permission, a=testonly
Automatic update from web-platform-tests Add tests for 'cross-origin-isolated' permission (#24600) * Add tests for 'cross-origin-isolated' permission Make sure self.crossOriginIsolated is affected by the permission. See also: whatwg/html#5752 -- wpt-commits: 50255e662659a593628bc7dd95860fbdaa1e2a9e wpt-pr: 24600
1 parent 33e5067 commit e19aa77

3 files changed

Lines changed: 73 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<!doctype html>
2+
<title>crossOriginIsolated permission</title>
3+
<script src=/resources/testharness.js></script>
4+
<script src=/resources/testharnessreport.js></script>
5+
<script src="/common/get-host-info.sub.js"></script>
6+
<body>
7+
<script>
8+
const {ORIGIN, HTTPS_REMOTE_ORIGIN} = get_host_info();
9+
const PATH =
10+
new URL('resources/cross-origin-isolated-frame.html', location).pathname;
11+
const PIPE =
12+
'?pipe=' +
13+
'|header(cross-origin-embedder-policy,require-corp)' +
14+
'|header(cross-origin-resource-policy,cross-origin)';
15+
16+
async function getCrossOriginIsolatedFor(t, url) {
17+
const frame = document.createElement('iframe');
18+
t.add_cleanup(() => frame.remove());
19+
frame.src = url;
20+
document.body.append(frame);
21+
22+
frame.addEventListener('error', t.unreached_func('frame.error'));
23+
await new Promise((resolve) => {
24+
frame.addEventListener('load', resolve);
25+
});
26+
27+
const mc = new MessageChannel();
28+
frame.contentWindow.postMessage({port: mc.port2}, '*', [mc.port2]);
29+
30+
const e = await new Promise((resolve) => {
31+
mc.port1.onmessage = resolve;
32+
});
33+
assert_equals(typeof(e.data), 'boolean');
34+
return e.data;
35+
}
36+
37+
function generateTest(origin, value, expectation) {
38+
// We use async_test, not promise_test here to run tests in parallel.
39+
async_test((t) => {
40+
let pipe = PIPE;
41+
if (value !== undefined) {
42+
pipe += `|header(permissions-policy,cross-origin-isolated=${value})`
43+
}
44+
const url = `${origin}${PATH}${pipe}`;
45+
(async () => {
46+
assert_equals(await getCrossOriginIsolatedFor(t, url), expectation);
47+
})().then(() => t.done(), (e) => t.step(() => {throw e;}));
48+
}, `origin = ${origin}, value = ${value}`);
49+
}
50+
51+
generateTest(ORIGIN, undefined, true);
52+
generateTest(ORIGIN, '*', true);
53+
generateTest(ORIGIN, "'self'", true);
54+
generateTest(ORIGIN, "'none'", false);
55+
generateTest(HTTPS_REMOTE_ORIGIN, undefined, false);
56+
generateTest(HTTPS_REMOTE_ORIGIN, '*', true);
57+
generateTest(HTTPS_REMOTE_ORIGIN, "'self'", false);
58+
generateTest(HTTPS_REMOTE_ORIGIN, "'none'", false);
59+
</script>
60+
</body>
61+
</html>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Cross-Origin-Embedder-Policy: require-corp
2+
Cross-Origin-Opener-Policy: same-origin
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!doctype html>
2+
<html>
3+
<body>
4+
<script>
5+
self.addEventListener('message', (e) => {
6+
e.data.port.postMessage(self.crossOriginIsolated);
7+
});
8+
</script>
9+
</body>
10+
</html>

0 commit comments

Comments
 (0)