summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html')
-rw-r--r--testing/web-platform/tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html57
1 files changed, 57 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html b/testing/web-platform/tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
new file mode 100644
index 0000000000..10929847ee
--- /dev/null
+++ b/testing/web-platform/tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<meta charset=utf-8>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/common/utils.js"></script>
+<script src="../../resources/common.js"></script>
+
+<script>
+
+async function createCoopRestrictPropertiesPopup(popupToken, name) {
+ const url = SAME_ORIGIN.origin + '/common/dispatcher/executor.html' +
+ `?uuid=${popupToken}` +
+ '&pipe=|header(Cross-Origin-Opener-Policy, restrict-properties)';
+ const popup = window.open(url, name);
+ add_completion_callback(() => popup.close());
+
+ // Wait for the popup to be loaded.
+ const replyToken = token();
+ send(popupToken, `send('${replyToken}', 'Done loading')`);
+ assert_equals(await receive(replyToken), 'Done loading');
+
+ return popup;
+}
+
+promise_test(async t => {
+ // Start by opening a first COOP: restrict-properties popup. No name is set to
+ // begin with.
+ const popupToken1 = token();
+ const popup1 = await createCoopRestrictPropertiesPopup(popupToken1, '');
+
+ // Once the popup is live, explicitly set a name.
+ const name = token();
+ send(popupToken1, `window.name = '${name}'`);
+
+ // To make sure this name has been propagated to other processes, send a dummy
+ // message from the popup to the main page, and wait for it to be received.
+ // It should be delivered after the name change is replicated.
+ const message_waiter = new Promise(resolve => {
+ onmessage = (event) => {
+ if (event.data == 'Waited enough') { resolve(); }
+ }
+ });
+ send(popupToken1, `opener.postMessage('Waited enough', '*')`);
+ await message_waiter;
+
+ // Finally, call window.open with the same name. This should not resolve
+ // across browsing context groups, and create a brand new popup.
+ const popupToken2 = token();
+ const popup2 = await createCoopRestrictPropertiesPopup(popupToken2, name);
+ assert_not_equals(popup1, popup2,
+ 'Named targeting resolved across isolation boundaries');
+
+}, 'Verify that named targeting does not work across isolation boundaries.');
+
+</script>