diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/html/semantics/forms/form-submission-target/resources/reltester.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/form-submission-target/resources/reltester.js')
-rw-r--r-- | testing/web-platform/tests/html/semantics/forms/form-submission-target/resources/reltester.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/form-submission-target/resources/reltester.js b/testing/web-platform/tests/html/semantics/forms/form-submission-target/resources/reltester.js new file mode 100644 index 0000000000..8ca9ddbc27 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/form-submission-target/resources/reltester.js @@ -0,0 +1,82 @@ +function formUsesTargetBlank(submitter) { + if (submitter.formTarget && submitter.formTarget === "_blank") { + return true; + } + if (submitter.form && submitter.form.target === "_blank") { + return true; + } + if (submitter.target && submitter.target === "_blank") { + return true; + } + if (submitter.getRootNode().querySelector("base").target === "_blank") { + return true; + } + return false; +} + +function relTester(submitter, channelInput, title) { + [ + { + rel: "", + exposed: "all" + }, + { + rel: "noopener", + exposed: "noopener" + }, + { + rel: "noreferrer", + exposed: "noreferrer" + }, + { + rel: "opener", + exposed: "all" + }, + { + rel: "noopener noreferrer", + exposed: "noreferrer" + }, + { + rel: "noreferrer opener", + exposed: "noreferrer" + }, + { + rel: "opener noopener", + exposed: "noopener" + } + ].forEach(relTest => { + // Use promise_test to submit only after one test concluded + promise_test(t => { + return new Promise(resolve => { + const channelName = Date.now() + relTest.rel, + channel = new BroadcastChannel(channelName); + let form = submitter; + if (submitter.localName !== "form") { + form = submitter.form; + } + form.rel = relTest.rel; + channelInput.value = channelName; + if (submitter.localName !== "form") { + submitter.click(); + } else { + submitter.submit(); + } + channel.onmessage = t.step_func(e => { + if (relTest.exposed === "all" || relTest.exposed === "noopener") { + assert_equals(e.data.referrer, window.location.href, "referrer"); + } else { + assert_equals(e.data.referrer, "", "referrer"); + } + // When rel is not explicitly given, account for target=_blank defaulting to noopener + if (relTest.exposed === "all" && !(relTest.rel === "" && formUsesTargetBlank(submitter))) { + assert_true(e.data.haveOpener, "opener"); + } else { + assert_false(e.data.haveOpener, "opener"); + } + resolve(); + }); + t.add_cleanup(() => channel.postMessage(null)); + }); + }, `<form rel="${relTest.rel}"> with ${title}`); + }); +} |