diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/mozilla/tests/focus/iframe-focus-event-after-iframe-gets-focus.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/mozilla/tests/focus/iframe-focus-event-after-iframe-gets-focus.html')
-rw-r--r-- | testing/web-platform/mozilla/tests/focus/iframe-focus-event-after-iframe-gets-focus.html | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/testing/web-platform/mozilla/tests/focus/iframe-focus-event-after-iframe-gets-focus.html b/testing/web-platform/mozilla/tests/focus/iframe-focus-event-after-iframe-gets-focus.html new file mode 100644 index 0000000000..82a1346ec6 --- /dev/null +++ b/testing/web-platform/mozilla/tests/focus/iframe-focus-event-after-iframe-gets-focus.html @@ -0,0 +1,75 @@ +<!doctype html> +<meta charset=utf-8> +<title>Test focus event after iframe gets focus</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +function waitForMessage(target, checkFn) { + return new Promise(resolve => { + target.addEventListener("message", e => { + if (checkFn && !checkFn(e)) { + return; + } + resolve(); + }, { once: true }); + }); +} + +function start(w) { + w.postMessage("start", "*"); +} + +// This will send message to outer frame and also inner frame to ask them +// send the log they collect back, the logs of outer and inner will be +// concatenated. +async function getLog(w) { + let log = ""; + step_timeout(function() { + w.postMessage("getlog", "*"); + }, 0); + await waitForMessage(window, (e) => { + log = e.data; + return true; + }); + return log; +} + +function runSingleTest(url, focusIframeFunction, expectedResult, description) { + promise_test(async t => { + let w = window.open(url); + t.add_cleanup(() => { w.close(); }); + await waitForMessage(window, e => e.data === "ready"); + start(w); + focusIframeFunction(w); + assert_equals(await getLog(w), expectedResult); + }, description); +} + +function runTests(url, description) { + // Test calling iframe.focus(); + runSingleTest(url, (w) => { + w.postMessage("iframefocus", "*"); + }, "outerlog:windowblur,innerlog:windowfocus,", + description + " via calling iframe.focus()"); + + // Test calling iframe.contentWindow.focus(); + runSingleTest(url, (w) => { + w.postMessage("iframecontentWindowfocus", "*"); + }, "outerlog:windowblur,innerlog:windowfocus,", + description + " via calling iframe.contentWindow.focus()"); + + // Test calling window.focus() in iframe; + runSingleTest(url, (w) => { + w.postMessage("windowfocus", "*"); + }, "outerlog:windowblur,innerlog:willfocuswindow,windowfocus,didfocuswindow,", + description + " via calling window.focus() in iframe"); +} + +// Test same site iframe +runTests("support/iframe-focus-event-after-same-site-iframe-gets-focus-outer.html", + "Check iframe focus event after same site iframe gets focus"); + +// Test different site iframe +runTests("support/iframe-focus-event-after-different-site-iframe-gets-focus-outer.sub.html", + "Check iframe focus event after different site iframe gets focus"); +</script> |