mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
bug 852150 - handle removal of accessibles when reframe root doesn't have an accessible more correctly r=surkov
This commit is contained in:
parent
f6274d24c5
commit
5c16f8ec62
@ -1739,10 +1739,33 @@ DocAccessible::UpdateTree(Accessible* aContainer, nsIContent* aChildNode,
|
||||
if (child) {
|
||||
updateFlags |= UpdateTreeInternal(child, aIsInsert, reorderEvent);
|
||||
} else {
|
||||
TreeWalker walker(aContainer, aChildNode, true);
|
||||
if (aIsInsert) {
|
||||
TreeWalker walker(aContainer, aChildNode, true);
|
||||
|
||||
while ((child = walker.NextChild()))
|
||||
updateFlags |= UpdateTreeInternal(child, aIsInsert, reorderEvent);
|
||||
while ((child = walker.NextChild()))
|
||||
updateFlags |= UpdateTreeInternal(child, aIsInsert, reorderEvent);
|
||||
} else {
|
||||
// aChildNode may not coorespond to a particular accessible, to handle
|
||||
// this we go through all the children of aContainer. Then if a child
|
||||
// has aChildNode as an ancestor, or does not have the node for
|
||||
// aContainer as an ancestor remove that child of aContainer. Note that
|
||||
// when we are called aChildNode may already have been removed
|
||||
// from the DOM so we can't expect it to have a parent or what was it's
|
||||
// parent to have it as a child.
|
||||
nsINode* containerNode = aContainer->GetNode();
|
||||
for (uint32_t idx = 0; idx < aContainer->ContentChildCount();) {
|
||||
Accessible* child = aContainer->ContentChildAt(idx);
|
||||
nsINode* childNode = child->GetContent();
|
||||
while (childNode != aChildNode && childNode != containerNode &&
|
||||
(childNode = childNode->GetParentNode()));
|
||||
|
||||
if (childNode != containerNode) {
|
||||
updateFlags |= UpdateTreeInternal(child, false, reorderEvent);
|
||||
} else {
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Content insertion/removal is not cause of accessible tree change.
|
||||
|
@ -30,6 +30,7 @@ MOCHITEST_A11Y_FILES =\
|
||||
test_optgroup.html \
|
||||
test_recreation.html \
|
||||
test_select.html \
|
||||
test_bug852150.xhtml \
|
||||
test_textleaf.html \
|
||||
test_visibility.html \
|
||||
test_whitespace.html \
|
||||
|
59
accessible/tests/mochitest/treeupdate/test_bug852150.xhtml
Normal file
59
accessible/tests/mochitest/treeupdate/test_bug852150.xhtml
Normal file
@ -0,0 +1,59 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Canvas subdom mutation</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<script type="application/javascript"
|
||||
src="../common.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="../role.js"></script>
|
||||
|
||||
<script>
|
||||
<![CDATA[
|
||||
function doTest()
|
||||
{
|
||||
var the_displayNone = getNode("the_displaynone");
|
||||
var the_table = getNode("the_table");
|
||||
var the_row = getNode("the_row");
|
||||
ok(isAccessible(the_table), "table should be accessible");
|
||||
the_displayNone.appendChild(the_table);
|
||||
ok(!isAccessible(the_table), "table in display none tree shouldn't be accessible");
|
||||
|
||||
setTimeout(function() {
|
||||
document.body.removeChild(the_row);
|
||||
// make sure no accessibles have stuck around.
|
||||
ok(!isAccessible(the_row), "row shouldn't be accessible");
|
||||
ok(!isAccessible(the_table), "table shouldn't be accessible");
|
||||
ok(!isAccessible(the_displayNone), "display none things shouldn't be accessible");
|
||||
SimpleTest.finish();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addA11yLoadEvent(doTest);
|
||||
]]>
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<a target="_blank"
|
||||
title="test accessible removal when reframe root isn't accessible"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=852150">
|
||||
Mozilla Bug 852150
|
||||
</a>
|
||||
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
|
||||
<div id="the_displaynone" style="display: none;"></div>
|
||||
<table id="the_table"></table>
|
||||
<tr id="the_row"></tr>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user