diff options
Diffstat (limited to 'testing/web-platform/tests/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html')
-rw-r--r-- | testing/web-platform/tests/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/testing/web-platform/tests/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html b/testing/web-platform/tests/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html new file mode 100644 index 0000000000..b2385705bc --- /dev/null +++ b/testing/web-platform/tests/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html @@ -0,0 +1,54 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when focusing different-site iframe then immediately focusing back</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +function waitForEvent(target, event, checkFn) { + return new Promise(resolve => { + target.addEventListener(event, e => { + if (checkFn && !checkFn(e)) { + return; + } + resolve(); + }, { once: true }); + }); +} + +// 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 waitForEvent(window, "message", (e) => { + log = e.data; + return true; + }); + return log; +} + +// This will send message to outer frame to ask it's activeElement. +async function getActiveElement(w) { + let activeElement = ""; + step_timeout(function() { + w.postMessage("getActiveElement", "*"); + }, 0); + await waitForEvent(window, "message", (e) => { + activeElement = e.data; + return true; + }); + return activeElement; +} + +promise_test(async t => { + let w = window.open("support/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back-outer.sub.html"); + t.add_cleanup(() => { w.close(); }); + await waitForEvent(window, "message", e => e.data === "ready"); + w.postMessage("focus", "*"); + assert_equals(await getLog(w), 'outerlog:willfocusiframe,didfocusiframe,willfocusinput,inputfocus,didfocusinput,innerlog:windowfocus,windowblur,'); + assert_equals(await getActiveElement(w), 'INPUT'); +}, "Check focus event and active element after focusing different site iframe then immediately focusing back"); +</script> |