summaryrefslogtreecommitdiffstats
path: root/dom/base/test/test_focus_display_none_xorigin_iframe.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /dom/base/test/test_focus_display_none_xorigin_iframe.html
parentInitial commit. (diff)
downloadfirefox-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 'dom/base/test/test_focus_display_none_xorigin_iframe.html')
-rw-r--r--dom/base/test/test_focus_display_none_xorigin_iframe.html134
1 files changed, 134 insertions, 0 deletions
diff --git a/dom/base/test/test_focus_display_none_xorigin_iframe.html b/dom/base/test/test_focus_display_none_xorigin_iframe.html
new file mode 100644
index 0000000000..b04141b0fe
--- /dev/null
+++ b/dom/base/test/test_focus_display_none_xorigin_iframe.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1716762
+-->
+<head>
+<meta charset="utf-8">
+<title>Test for Bug 1716762</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1716762">Mozilla Bug 1716762</a><br>
+<input></input><br>
+<div id="target" style="display: none;">
+<iframe src="http://example.org/tests/dom/base/test/file_focus_display_none_xorigin_iframe_inner.html"></iframe>
+</div>
+<script type="text/javascript">
+
+let waitForMessage = function(aMsg) {
+ return new Promise(reslove => {
+ window.addEventListener("message", function handler(e) {
+ info(`main received message: ${e.data}`);
+ if (e.data === aMsg) {
+ window.removeEventListener("message", handler);
+ reslove();
+ }
+ });
+ });
+};
+
+let sendMessage = async function(aWindow, aMsg) {
+ aWindow.postMessage(aMsg, "*");
+ await waitForMessage("done");
+}
+
+let getFocus = function(aWindow) {
+ return new Promise(reslove => {
+ window.addEventListener("message", function handler(e) {
+ info(e.data);
+ reslove(e.data);
+ }, { once: true });
+ aWindow.postMessage("getfocus", "*");
+ });
+}
+
+/** Test for Bug 1716762 **/
+
+let input = document.querySelector("input");
+let iframe = document.querySelector("iframe");
+
+add_task(async function test_ancestor_display_none_init() {
+ // focus input element
+ input.focus();
+ is(document.activeElement.tagName, "INPUT", "focus should move to input element");
+
+ // focus input element in hidden iframe
+ await sendMessage(iframe.contentWindow, "focus");
+ is(document.activeElement.tagName, "INPUT", "focus should stay on input element");
+});
+
+add_task(async function test_remove_ancestor_display_none() {
+ // remove `display: none` from the ancestor of iframe
+ document.getElementById("target").style = "";
+ document.body.offsetWidth;
+
+ // focus input element
+ input.focus();
+ is(document.activeElement.tagName, "INPUT", "focus should move to input element");
+
+ // focus input element in hidden iframe
+ await sendMessage(iframe.contentWindow, "focus");
+ is(document.activeElement.tagName, "IFRAME", "focus should move to iframe element");
+});
+
+add_task(async function test_ancestor_display_none() {
+ // add `display: none` to the ancestor of iframe back
+ document.getElementById("target").style = "display: none;";
+ document.body.offsetWidth;
+
+ // focus input element
+ input.focus();
+ is(document.activeElement.tagName, "INPUT", "focus should move to input element");
+
+ // focus input element in hidden iframe
+ await sendMessage(iframe.contentWindow, "focus");
+ is(document.activeElement.tagName, "INPUT", "focus should stay on input element");
+});
+
+add_task(async function test_remove_ancestor_display_none_again() {
+ // remove `display: none` from the ancestor of iframe
+ document.getElementById("target").style = "";
+ document.body.offsetWidth;
+
+ // focus input element
+ input.focus();
+ is(document.activeElement.tagName, "INPUT", "focus should move to input element");
+
+ // focus input element in hidden iframe
+ await sendMessage(iframe.contentWindow, "focus");
+ is(document.activeElement.tagName, "IFRAME", "focus should move to iframe element");
+});
+
+add_task(async function test_iframe_display_none() {
+ // add `display: none` to iframe
+ iframe.style = "display: none;";
+ document.body.offsetWidth;
+
+ // focus input element
+ input.focus();
+ is(document.activeElement.tagName, "INPUT", "focus should move to input element");
+
+ // focus input element in hidden iframe
+ await sendMessage(iframe.contentWindow, "focus");
+ is(document.activeElement.tagName, "INPUT", "focus should stay on input element");
+});
+
+add_task(async function test_remove_iframe_display_none() {
+ // remove `display: none` from iframe
+ iframe.style = "";
+ document.body.offsetWidth;
+
+ // focus input element
+ input.focus();
+ is(document.activeElement.tagName, "INPUT", "focus should move to input element");
+
+ // focus input element in hidden iframe
+ await sendMessage(iframe.contentWindow, "focus");
+ is(document.activeElement.tagName, "IFRAME", "focus should move to iframe element");
+});
+
+</script>
+</body>
+</html>