зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1572829 - Remove explicit children too when node has a shadow root. r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D43488 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
0ec0984d05
Коммит
df40116d6f
|
@ -2001,6 +2001,20 @@ void DocAccessible::ContentRemoved(nsIContent* aContentNode) {
|
||||||
while (nsIContent* childNode = iter.GetNextChild()) {
|
while (nsIContent* childNode = iter.GetNextChild()) {
|
||||||
ContentRemoved(childNode);
|
ContentRemoved(childNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this node has a shadow root, remove its explicit children too.
|
||||||
|
// The host node may be removed after the shadow root was attached, and
|
||||||
|
// before we asynchronously prune the light DOM and construct the shadow DOM.
|
||||||
|
// If this is a case where the node does not have its own accessible, we will
|
||||||
|
// not recurse into its current children, so we need to use an
|
||||||
|
// ExplicitChildIterator in order to get its accessible children in the light
|
||||||
|
// DOM, since they are not accessible anymore via AllChildrenIterator.
|
||||||
|
if (aContentNode->GetShadowRoot()) {
|
||||||
|
dom::ExplicitChildIterator iter = dom::ExplicitChildIterator(aContentNode);
|
||||||
|
while (nsIContent* childNode = iter.GetNextChild()) {
|
||||||
|
ContentRemoved(childNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DocAccessible::RelocateARIAOwnedIfNeeded(nsIContent* aElement) {
|
bool DocAccessible::RelocateARIAOwnedIfNeeded(nsIContent* aElement) {
|
||||||
|
|
|
@ -183,6 +183,18 @@
|
||||||
] });
|
] });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bug 1572829
|
||||||
|
async function removeShadowRootHost() {
|
||||||
|
info("removeShadowRootHost");
|
||||||
|
document.body.offsetTop; // Flush layout.
|
||||||
|
|
||||||
|
let event = waitForEvent(EVENT_REORDER, "c9", "removeShadowRootHost");
|
||||||
|
getNode("c9").firstElementChild.attachShadow({mode: "open"});
|
||||||
|
getNode("c9").firstElementChild.replaceWith("");
|
||||||
|
|
||||||
|
await event;
|
||||||
|
}
|
||||||
|
|
||||||
async function doTest() {
|
async function doTest() {
|
||||||
await hideDivFromInsideSpan();
|
await hideDivFromInsideSpan();
|
||||||
|
|
||||||
|
@ -200,6 +212,8 @@
|
||||||
|
|
||||||
await removeRelocatedWhenDomAncestorHidden();
|
await removeRelocatedWhenDomAncestorHidden();
|
||||||
|
|
||||||
|
await removeShadowRootHost();
|
||||||
|
|
||||||
SimpleTest.finish();
|
SimpleTest.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,6 +263,10 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="c9">
|
||||||
|
<div><dir>a</dir></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="eventdump"></div>
|
<div id="eventdump"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче