summaryrefslogtreecommitdiffstats
path: root/accessible/tests/browser/e10s/browser_caching_states.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
commit40a355a42d4a9444dc753c04c6608dade2f06a23 (patch)
tree871fc667d2de662f171103ce5ec067014ef85e61 /accessible/tests/browser/e10s/browser_caching_states.js
parentAdding upstream version 124.0.1. (diff)
downloadfirefox-40a355a42d4a9444dc753c04c6608dade2f06a23.tar.xz
firefox-40a355a42d4a9444dc753c04c6608dade2f06a23.zip
Adding upstream version 125.0.1.upstream/125.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'accessible/tests/browser/e10s/browser_caching_states.js')
-rw-r--r--accessible/tests/browser/e10s/browser_caching_states.js157
1 files changed, 156 insertions, 1 deletions
diff --git a/accessible/tests/browser/e10s/browser_caching_states.js b/accessible/tests/browser/e10s/browser_caching_states.js
index 37f8c46966..7292228f25 100644
--- a/accessible/tests/browser/e10s/browser_caching_states.js
+++ b/accessible/tests/browser/e10s/browser_caching_states.js
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
+requestLongerTimeout(2);
/* import-globals-from ../../mochitest/role.js */
/* import-globals-from ../../mochitest/states.js */
@@ -484,7 +485,7 @@ addAccessibleTask(
);
/**
- * Test caching of the expanded state for popover target element.
+ * Test caching of the expanded state for the popovertarget content attribute.
*/
addAccessibleTask(
`
@@ -550,3 +551,157 @@ addAccessibleTask(
},
{ chrome: true, topLevel: true, remoteIframe: true }
);
+
+/**
+ * Test caching of the expanded state for the popoverTargetElement WebIDL
+ * attribute.
+ */
+addAccessibleTask(
+ `
+<button id="toggle1">toggle</button>
+<div id="popover1" popover>popover1</div>
+<button id="toggle2">toggle2</button>
+<button id="toggle3">toggle3</button>
+<div id="shadowHost"><template shadowrootmode="open">
+ <button id="toggle4">toggle4</button>
+ <div id="popover2" popover>popover2</div>
+ <button id="toggle5">toggle5</button>
+</template></div>
+<script>
+ const toggle1 = document.getElementById("toggle1");
+ const popover1 = document.getElementById("popover1");
+ toggle1.popoverTargetElement = popover1;
+ const toggle3 = document.getElementById("toggle3");
+ const shadow = document.getElementById("shadowHost").shadowRoot;
+ const toggle4 = shadow.getElementById("toggle4");
+ const popover2 = shadow.getElementById("popover2");
+ toggle3.popoverTargetElement = popover2;
+ toggle4.popoverTargetElement = popover2;
+ const toggle5 = shadow.getElementById("toggle5");
+ toggle5.popoverTargetElement = popover1;
+</script>
+ `,
+ async function (browser, docAcc) {
+ const toggle1 = findAccessibleChildByID(docAcc, "toggle1");
+ // toggle1's popover target is set and connected to the document.
+ testStates(toggle1, STATE_COLLAPSED);
+
+ const toggle2 = findAccessibleChildByID(docAcc, "toggle2");
+ // toggle2's popover target isn't set yet.
+ testStates(
+ toggle2,
+ 0,
+ 0,
+ STATE_EXPANDED | STATE_COLLAPSED,
+ EXT_STATE_EXPANDABLE
+ );
+ info("Setting toggle2's popoverTargetElement");
+ let changed = waitForStateChange(toggle2, EXT_STATE_EXPANDABLE, true, true);
+ await invokeContentTask(browser, [], () => {
+ const toggle2Dom = content.document.getElementById("toggle2");
+ const popover1 = content.document.getElementById("popover1");
+ toggle2Dom.popoverTargetElement = popover1;
+ });
+ await changed;
+ testStates(toggle2, STATE_COLLAPSED);
+
+ const toggle5 = findAccessibleChildByID(docAcc, "toggle5");
+ // toggle5 is inside the shadow DOM and popover1 is outside, so the target
+ // is valid.
+ testStates(toggle5, STATE_COLLAPSED);
+
+ // Changes to the popover should fire events on all invokers.
+ const changeEvents = [
+ [EVENT_STATE_CHANGE, toggle1],
+ [EVENT_STATE_CHANGE, toggle2],
+ [EVENT_STATE_CHANGE, toggle5],
+ ];
+ info("Showing popover1");
+ changed = waitForEvents(changeEvents);
+ toggle1.doAction(0);
+ await changed;
+ testStates(toggle1, STATE_EXPANDED);
+ testStates(toggle2, STATE_EXPANDED);
+
+ info("Hiding popover1");
+ changed = waitForEvents(changeEvents);
+ toggle1.doAction(0);
+ await changed;
+ testStates(toggle1, STATE_COLLAPSED);
+ testStates(toggle2, STATE_COLLAPSED);
+
+ info("Clearing toggle1's popover target");
+ changed = waitForStateChange(toggle1, EXT_STATE_EXPANDABLE, false, true);
+ await invokeContentTask(browser, [], () => {
+ const toggle1Dom = content.document.getElementById("toggle1");
+ toggle1Dom.popoverTargetElement = null;
+ });
+ await changed;
+ testStates(
+ toggle1,
+ 0,
+ 0,
+ STATE_EXPANDED | STATE_COLLAPSED,
+ EXT_STATE_EXPANDABLE
+ );
+
+ info("Setting toggle2's popover target to a disconnected node");
+ changed = waitForStateChange(toggle2, EXT_STATE_EXPANDABLE, false, true);
+ await invokeContentTask(browser, [], () => {
+ const toggle2Dom = content.document.getElementById("toggle2");
+ const popover3 = content.document.createElement("div");
+ popover3.popover = "auto";
+ popover3.textContent = "popover3";
+ // We don't append popover3 anywhere, so it is disconnected.
+ toggle2Dom.popoverTargetElement = popover3;
+ });
+ await changed;
+ testStates(
+ toggle2,
+ 0,
+ 0,
+ STATE_EXPANDED | STATE_COLLAPSED,
+ EXT_STATE_EXPANDABLE
+ );
+
+ const toggle3 = findAccessibleChildByID(docAcc, "toggle3");
+ // toggle3 is outside popover2's shadow DOM, so the target isn't valid.
+ testStates(
+ toggle3,
+ 0,
+ 0,
+ STATE_EXPANDED | STATE_COLLAPSED,
+ EXT_STATE_EXPANDABLE
+ );
+ const toggle4 = findAccessibleChildByID(docAcc, "toggle4");
+ // toggle4 is in the same shadow DOM as popover2.
+ testStates(toggle4, STATE_COLLAPSED);
+ },
+ { chrome: true, topLevel: true }
+);
+
+/**
+ * Test the mixed state of indeterminate HTML checkboxes.
+ */
+addAccessibleTask(
+ `<input type="checkbox" id="checkbox">`,
+ async function testHTMLCheckboxMixed(browser, docAcc) {
+ const checkbox = findAccessibleChildByID(docAcc, "checkbox");
+ testStates(checkbox, 0, 0, STATE_MIXED);
+ info("Setting indeterminate on checkbox");
+ let changed = waitForStateChange(checkbox, STATE_MIXED, true);
+ await invokeContentTask(browser, [], () => {
+ content.document.getElementById("checkbox").indeterminate = true;
+ });
+ await changed;
+ testStates(checkbox, STATE_MIXED);
+ info("Clearing indeterminate on checkbox");
+ changed = waitForStateChange(checkbox, STATE_MIXED, false);
+ await invokeContentTask(browser, [], () => {
+ content.document.getElementById("checkbox").indeterminate = false;
+ });
+ await changed;
+ testStates(checkbox, 0, 0, STATE_MIXED);
+ },
+ { chrome: true, topLevel: true, iframe: true, remoteIframe: true }
+);