Bug 1261170 - add a single node ProcessContentInserted method version, r=yzen

This commit is contained in:
Alexander Surkov 2016-04-05 20:48:30 -04:00
parent 9569ed5e0a
commit 62081fdb80
3 changed files with 35 additions and 24 deletions

View File

@ -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<nsCOMPtr<nsIContent> > insertedContents;
insertedContents.AppendElement(textNode);
mDocument->ProcessContentInserted(container, &insertedContents);
mDocument->ProcessContentInserted(container, textNode);
}
}
}

View File

@ -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<AccReorderEvent> 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<nsCOMPtr<nsIContent> >* 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<AccReorderEvent> 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,

View File

@ -490,6 +490,8 @@ protected:
*/
void ProcessContentInserted(Accessible* aContainer,
const nsTArray<nsCOMPtr<nsIContent> >* aInsertedContent);
void ProcessContentInserted(Accessible* aContainer,
nsIContent* aInsertedContent);
/**
* Used to notify the document to make it process the invalidation list.