/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });
const REORDER = { expected: [[EVENT_REORDER, "container"]] };
// Dynamically inserted slotted accessible elements should be in
// the accessible tree.
const snippet = `
`;
addAccessibleTask(snippet, async function (browser, accDoc) {
let container = findAccessibleChildByID(accDoc, "container");
testChildrenIds(container, ["l1"]);
await contentSpawnMutation(browser, REORDER, function () {
let labelEl = content.document.createElement("label");
labelEl.id = "l2";
let containerEl = content.document.getElementById("container");
containerEl.appendChild(labelEl);
});
testChildrenIds(container, ["l1", "l2"]);
});
// Dynamically inserted not accessible custom element containing an accessible
// in its shadow DOM.
const snippet2 = `
`;
addAccessibleTask(snippet2, async function (browser, accDoc) {
let container = findAccessibleChildByID(accDoc, "container");
await contentSpawnMutation(browser, REORDER, function () {
content.document.getElementById("container").innerHTML = "";
});
testChildrenIds(container, ["input"]);
});
/**
* Ensure that changing the slot on the body while moving the body doesn't
* try to remove the DocAccessible. We test this here instead of in
* accessible/tests/mochitest/treeupdate/test_shadow_slots.html because this
* messes with the body element and we don't want that to impact other tests.
*/
addAccessibleTask(
``,
async function (browser, docAcc) {
info("Moving body and setting slot on body");
let reordered = waitForEvent(EVENT_REORDER, docAcc);
await invokeContentTask(browser, [], () => {
const host = content.document.getElementById("host");
const emptyScript = content.document.getElementById("emptyScript");
const body = content.document.body;
emptyScript.append(host);
host.append(body);
body.slot = "";
});
await reordered;
is(docAcc.childCount, 0, "document has no children after body move");
},
{
chrome: true,
topLevel: true,
iframe: true,
remoteIframe: true,
contentSetup: async function contentSetup() {
const doc = content.document;
const host = doc.getElementById("host");
host.attachShadow({ mode: "open" });
const emptyScript = doc.createElement("script");
emptyScript.id = "emptyScript";
doc.head.append(emptyScript);
},
}
);
addAccessibleTask(
`
`,
async function (browser, docAcc) {
info("A slotted inline");
const container = findAccessibleChildByID(docAcc, "container");
testAccessibleTree(container, {
TEXT_CONTAINER: [{ TEXT_CONTAINER: [{ PUSHBUTTON: { name: "Help" } }] }],
});
const SLOT_REORDER = {
expected: [
[
EVENT_REORDER,
evt => getAccessibleDOMNodeID(evt.accessible.parent) == "container",
],
],
};
await contentSpawnMutation(browser, SLOT_REORDER, function () {
content.document.getElementById("container").firstElementChild.slot =
"foo";
});
testAccessibleTree(container, {
TEXT_CONTAINER: [{ TEXT_CONTAINER: [] }],
});
}
);