author | Emilio Cobos Álvarez <emilio@crisal.io> |
Wed, 03 Jan 2018 19:59:16 +0100 | |
changeset 397713 | b0a210594814d1cc3795bd64e750d3d8d54124e7 |
parent 397712 | 36187d67ca82916da3d54f6349facaec42dd621c |
child 397714 | c692619375fb81483ff29db47cf160c1d76c4d8f |
push id | 33189 |
push user | nerli@mozilla.com |
push date | Thu, 04 Jan 2018 09:45:12 +0000 |
treeherder | mozilla-central@f78a83244fbe [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | surkov |
bugs | 1427825 |
milestone | 59.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
accessible/base/NotificationController.cpp | file | annotate | diff | comparison | revisions | |
accessible/generic/DocAccessible.cpp | file | annotate | diff | comparison | revisions |
--- a/accessible/base/NotificationController.cpp +++ b/accessible/base/NotificationController.cpp @@ -675,19 +675,18 @@ NotificationController::WillRefresh(mozi for (auto iter = mTextHash.Iter(); !iter.Done(); iter.Next()) { nsCOMPtrHashKey<nsIContent>* entry = iter.Get(); nsIContent* textNode = entry->GetKey(); Accessible* textAcc = mDocument->GetAccessible(textNode); // If the text node is not in tree or doesn't have a frame, or placed in // another document, then this case should have been handled already by // content removal notifications. - nsINode* containerNode = textNode->GetParentNode(); - if (!containerNode || - textNode->GetOwnerDocument() != mDocument->DocumentNode()) { + nsINode* containerNode = textNode->GetFlattenedTreeParentNode(); + if (!containerNode || textNode->OwnerDoc() != mDocument->DocumentNode()) { MOZ_ASSERT(!textAcc, "Text node was removed but accessible is kept alive!"); continue; } nsIFrame* textFrame = textNode->GetPrimaryFrame(); if (!textFrame) { MOZ_ASSERT(!textAcc,
--- a/accessible/generic/DocAccessible.cpp +++ b/accessible/generic/DocAccessible.cpp @@ -1246,36 +1246,24 @@ DocAccessible::GetAccessibleByUniqueIDIn } Accessible* DocAccessible::GetAccessibleOrContainer(nsINode* aNode) const { if (!aNode || !aNode->GetComposedDoc()) return nullptr; - nsINode* currNode = aNode; - Accessible* accessible = nullptr; - while (!(accessible = GetAccessible(currNode))) { - nsINode* parent = nullptr; - - // If this is a content node, try to get a flattened parent content node. - // This will smartly skip from the shadow root to the host element, - // over parentless document fragment - if (currNode->IsContent()) - parent = currNode->AsContent()->GetFlattenedTreeParent(); - - // Fallback to just get parent node, in case there is no parent content - // node. Or current node is not a content node. - if (!parent) - parent = currNode->GetParentNode(); - - if (!(currNode = parent)) break; + for (nsINode* currNode = aNode; currNode; + currNode = currNode->GetFlattenedTreeParentNode()) { + if (Accessible* accessible = GetAccessible(currNode)) { + return accessible; + } } - return accessible; + return nullptr; } Accessible* DocAccessible::GetAccessibleOrDescendant(nsINode* aNode) const { Accessible* acc = GetAccessible(aNode); if (acc) return acc; @@ -2211,17 +2199,18 @@ DocAccessible::PutChildrenBack(nsTArray< "old parent", owner, "child", child, nullptr); #endif // Unset relocated flag to find an insertion point for the child. child->SetRelocated(false); nsIContent* content = child->GetContent(); int32_t idxInParent = -1; - Accessible* origContainer = AccessibleOrTrueContainer(content->GetParentNode()); + Accessible* origContainer = + AccessibleOrTrueContainer(content->GetFlattenedTreeParentNode()); if (origContainer) { TreeWalker walker(origContainer); if (walker.Seek(content)) { Accessible* prevChild = walker.Prev(); if (prevChild) { idxInParent = prevChild->IndexInParent() + 1; MOZ_DIAGNOSTIC_ASSERT(origContainer == prevChild->Parent(), "Broken tree"); origContainer = prevChild->Parent();