diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/html/cross-origin-opener-policy/resource-popup.https.html | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/cross-origin-opener-policy/resource-popup.https.html')
-rw-r--r-- | testing/web-platform/tests/html/cross-origin-opener-policy/resource-popup.https.html | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/cross-origin-opener-policy/resource-popup.https.html b/testing/web-platform/tests/html/cross-origin-opener-policy/resource-popup.https.html new file mode 100644 index 0000000000..481cceb72f --- /dev/null +++ b/testing/web-platform/tests/html/cross-origin-opener-policy/resource-popup.https.html @@ -0,0 +1,91 @@ +<!DOCTYPE html> +<html lang="en"> +<meta charset="utf-8"> +<title>Cross-Origin-Opener-Policy forces browsing context switch in various popup document types</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> + +<p>These tests create a "parent" popup window which is an HTML document with a +specific Cross-Origin-Opener-Policy. The parent creates a "child" popup window +which is a non-HTML document with a Cross-Origin-Opener-Policy of its own. The +parent waits for the child's location to change from "<code>about:blank</code>" +and then inspects its <code>name</code> and <code>closed</code> properties +which it reports back to the test context.</p> + +<p>The HTTP `Refresh` header is used to ensure the child eventually closes +itself (since proper observance of COOP will prevent the parent from closing +the child in some cases).</p> + +<script> +'use strict'; + +const coop_resource_test = ({parentCoop, resourceCoop, resource, resourceName, validate}) => { + async_test((t) => { + const bc = new BroadcastChannel(token()); + bc.onmessage = t.step_func_done(({data}) => validate(data)); + const childLocation = resource + + `?pipe=header(Refresh,2;url=/html/cross-origin-opener-policy/resources/resource-cleanup.html?channel=${bc.name})` + + (resourceCoop ? `|header(Cross-Origin-Opener-Policy,${resourceCoop})` : ''); + const parentLocation = 'resources/resource-popup.html' + + `?channel_name=${bc.name}` + + `&resource=${encodeURIComponent(childLocation)}` + + `&resource_name=${resourceName}` + + (parentCoop ? `&pipe=header(Cross-Origin-Opener-Policy,${parentCoop})` : ''); + + open(parentLocation); + + t.add_cleanup(() => { + // Close the "parent" popup and the "child" popup if it has already + // redirected to the HTML document. + bc.postMessage(null); + // Prepare to close the "child" popup in the case that it has not yet + // redirected to the the HTML document. + bc.onmessage = () => bc.postMessage(null); + }); + }, `${resource} - parent COOP: "${parentCoop}"; child COOP: "${resourceCoop}"`); +}; + +const resources = [ + '/common/dummy.xml', + '/images/red.png', + '/common/text-plain.txt', + '/media/2x2-green.mp4', +]; + +for (const resource of resources) { + coop_resource_test({ + parentCoop: '', + resourceCoop: 'same-origin', + resource, + resourceName: 'foobar', + validate(data) { + assert_equals(data.name, null); + assert_equals(data.closed, true); + } + }); + + coop_resource_test({ + parentCoop: 'same-origin', + resourceCoop: '', + resource, + resourceName: 'foobar', + validate(data) { + assert_equals(data.name, null); + assert_equals(data.closed, true); + } + }); + + coop_resource_test({ + parentCoop: 'same-origin', + resourceCoop: 'same-origin', + resource, + resourceName: 'foobar', + validate(data) { + assert_equals(data.name, 'foobar'); + assert_equals(data.closed, false); + } + }); +} +</script> +</html> |