Bug 1578416 - Don't allow children of list item to move before bullet. r=Jamie

Differential Revision: https://phabricator.services.mozilla.com/D45578

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Eitan Isaacson 2019-09-12 01:00:15 +00:00
parent 78bb2541b3
commit 4b3b42e7be
6 changed files with 38 additions and 4 deletions

View File

@ -2203,7 +2203,7 @@ bool Accessible::RemoveChild(Accessible* aChild) {
return true;
}
void Accessible::MoveChild(uint32_t aNewIndex, Accessible* aChild) {
void Accessible::RelocateChild(uint32_t aNewIndex, Accessible* aChild) {
MOZ_DIAGNOSTIC_ASSERT(aChild, "No child was given");
MOZ_DIAGNOSTIC_ASSERT(aChild->mParent == this,
"A child from different subtree was given");

View File

@ -394,9 +394,9 @@ class Accessible : public nsISupports {
virtual bool RemoveChild(Accessible* aChild);
/**
* Reallocates the child withing its parent.
* Reallocates the child within its parent.
*/
void MoveChild(uint32_t aNewIndex, Accessible* aChild);
virtual void RelocateChild(uint32_t aNewIndex, Accessible* aChild);
//////////////////////////////////////////////////////////////////////////////
// Accessible tree traverse methods

View File

@ -2319,7 +2319,7 @@ bool DocAccessible::MoveChild(Accessible* aChild, Accessible* aNewParent,
if (curParent == aNewParent) {
MOZ_ASSERT(aChild->IndexInParent() != aIdxInParent, "No move case");
curParent->MoveChild(aIdxInParent, aChild);
curParent->RelocateChild(aIdxInParent, aChild);
#ifdef A11Y_LOG
logging::TreeInfo("move child: parent tree after", logging::eVerbose,

View File

@ -81,6 +81,13 @@ bool HTMLLIAccessible::InsertChildAt(uint32_t aIndex, Accessible* aChild) {
return HyperTextAccessible::InsertChildAt(aIndex, aChild);
}
void HTMLLIAccessible::RelocateChild(uint32_t aNewIndex, Accessible* aChild) {
// Don't allow moving a child in front of the bullet.
if (mBullet && aChild != mBullet && aNewIndex != 0) {
HyperTextAccessible::RelocateChild(aNewIndex, aChild);
}
}
////////////////////////////////////////////////////////////////////////////////
// HTMLLIAccessible: public

View File

@ -55,6 +55,7 @@ class HTMLLIAccessible : public HyperTextAccessibleWrap {
virtual uint64_t NativeState() const override;
virtual bool InsertChildAt(uint32_t aIndex, Accessible* aChild) override;
virtual void RelocateChild(uint32_t aNewIndex, Accessible* aChild) override;
// HTMLLIAccessible
HTMLListBulletAccessible* Bullet() const { return mBullet; }

View File

@ -195,6 +195,24 @@
await event;
}
function listItemReframe() {
testAccessibleTree("li",{ LISTITEM: [
{ STATICTEXT: [] },
{ TEXT_LEAF: [] },
] });
getNode("li").style.listStylePosition = "inside";
document.body.offsetTop; // Flush layout.
window.windowUtils.advanceTimeAndRefresh(100);
testAccessibleTree("li",{ LISTITEM: [
{ STATICTEXT: [] },
{ TEXT_LEAF: [] },
] });
window.windowUtils.restoreNormalRefresh();
}
async function doTest() {
await hideDivFromInsideSpan();
@ -214,6 +232,8 @@
await removeShadowRootHost();
listItemReframe();
SimpleTest.finish();
}
@ -267,6 +287,12 @@
<div><dir>a</dir></div>
</div>
<div id="c11">
<ul>
<li id="li">Test</li>
</ul>
</div>
<div id="eventdump"></div>
</body>
</html>