From 62081fdb8073aaecf172f240ead4886d706c175e Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Tue, 5 Apr 2016 20:48:30 -0400 Subject: [PATCH] Bug 1261170 - add a single node ProcessContentInserted method version, r=yzen --- accessible/base/NotificationController.cpp | 10 ++--- accessible/generic/DocAccessible.cpp | 47 +++++++++++++--------- accessible/generic/DocAccessible.h | 2 + 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/accessible/base/NotificationController.cpp b/accessible/base/NotificationController.cpp index ef024cb333b0..db1831e8d5ff 100644 --- a/accessible/base/NotificationController.cpp +++ b/accessible/base/NotificationController.cpp @@ -301,13 +301,11 @@ NotificationController::WillRefresh(mozilla::TimeStamp aTime) #endif // Make sure the text node is in accessible document still. - Accessible* container = mDocument->GetAccessibleOrContainer(containerNode); - NS_ASSERTION(container, - "Text node having rendered text hasn't accessible document!"); + Accessible* container = mDocument->AccessibleOrTrueContainer(containerNode); + MOZ_ASSERT(container, + "Text node having rendered text hasn't accessible document!"); if (container) { - nsTArray > insertedContents; - insertedContents.AppendElement(textNode); - mDocument->ProcessContentInserted(container, &insertedContents); + mDocument->ProcessContentInserted(container, textNode); } } } diff --git a/accessible/generic/DocAccessible.cpp b/accessible/generic/DocAccessible.cpp index 0b3a3a15ae99..97d71d74bbaa 100644 --- a/accessible/generic/DocAccessible.cpp +++ b/accessible/generic/DocAccessible.cpp @@ -1358,23 +1358,7 @@ DocAccessible::ProcessInvalidationList() if (!HasAccessible(content)) { Accessible* container = GetContainerAccessible(content); if (container) { - TreeWalker walker(container); - if (container->IsAcceptableChild(content) && walker.Seek(content)) { - Accessible* child = - GetAccService()->GetOrCreateAccessible(content, container); - if (child) { - RefPtr reorderEvent = - new AccReorderEvent(container); - - AutoTreeMutation mt(container); - container->InsertAfter(child, walker.Prev()); - mt.AfterInsertion(child); - mt.Done(); - - uint32_t flags = UpdateTreeInternal(child, true, reorderEvent); - FireEventsOnInsertion(container, reorderEvent, flags); - } - } + ProcessContentInserted(container, content); } } } @@ -1760,8 +1744,9 @@ DocAccessible::ProcessContentInserted(Accessible* aContainer, const nsTArray >* aNodes) { // Process insertions if the container accessible is still in tree. - if (!HasAccessible(aContainer->GetNode())) + if (!aContainer->IsInDocument()) { return; + } // If new root content has been inserted then update it. if (aContainer == this) { @@ -1821,6 +1806,32 @@ DocAccessible::ProcessContentInserted(Accessible* aContainer, FireEventsOnInsertion(aContainer, reorderEvent, updateFlags); } +void +DocAccessible::ProcessContentInserted(Accessible* aContainer, nsIContent* aNode) +{ + if (!aContainer->IsInDocument()) { + return; + } + + TreeWalker walker(aContainer); + if (aContainer->IsAcceptableChild(aNode) && walker.Seek(aNode)) { + Accessible* child = + GetAccService()->GetOrCreateAccessible(aNode, aContainer); + + if (child) { + RefPtr reorderEvent = new AccReorderEvent(aContainer); + + AutoTreeMutation mt(aContainer); + aContainer->InsertAfter(child, walker.Prev()); + mt.AfterInsertion(child); + mt.Done(); + + uint32_t flags = UpdateTreeInternal(child, true, reorderEvent); + FireEventsOnInsertion(aContainer, reorderEvent, flags); + } + } +} + void DocAccessible::FireEventsOnInsertion(Accessible* aContainer, AccReorderEvent* aReorderEvent, diff --git a/accessible/generic/DocAccessible.h b/accessible/generic/DocAccessible.h index 0dca354d3cd5..a02d2e8c1d3a 100644 --- a/accessible/generic/DocAccessible.h +++ b/accessible/generic/DocAccessible.h @@ -490,6 +490,8 @@ protected: */ void ProcessContentInserted(Accessible* aContainer, const nsTArray >* aInsertedContent); + void ProcessContentInserted(Accessible* aContainer, + nsIContent* aInsertedContent); /** * Used to notify the document to make it process the invalidation list.