Fire parent-changed events when an accessible node becomes (un)ignored

If an existing node becomes ignored or unignored, we notify platform ATs
that the parent of that node has changed children, but not that the
children of that node have a changed parent. Some platforms, such as
AT-SPI2, cache parent information separately from child information and
expect notifications about parent changes to maintain an accurate cache.
Address this problem by creating a new AXEventGenerator parent-changed
event and emit it on the existing children of a newly-un(ignored) node.

It turns out that the ordering of these notifications can also matter.
If an about-to-become-focused node is in an about-to-be-reparented
subtree, we need to notify ATs about the reparenting before we notify
them about the focus change. If we do the reverse, the AT may have
stale information about where the new focus is with respect to the
accessibility tree which in turn can break AT-driven navigation. But
BrowserAccessibilityManager::OnAccessibilityEvents was firing focus
events prior to events for any other tree updates in order to ensure
screen readers will correctly process events associated with the
focused node. We should be able to address both needs by first firing
tree updates that come from the ancestors of the focused node, then
then firing a focus event if needed, and finally firing the remaining
events.

Also add expectations for existing related content browser tests for
which AuraLinux expectations did not exist, along with fixing a bug in
the AuraLinux accessible-event recorder and adding detail for children-
changed events.

AXRelnotes: The Orca screen reader has a non-performant workaround for
the lack of parent-changed notifications, namely to not use the AT-SPI
parent caching feature. This fix will make it possible for Orca to use
AT-SPI's parent caching and improve performance.

Bug: 1047496
Change-Id: I6421543f471054c10cf6a4fa657de4d184cd6bfb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2418652
Commit-Queue: Joanmarie Diggs <jdiggs@igalia.com>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#814638}
GitOrigin-RevId: 937a7c66978c4e64887609b54ba01e6becae4cbc
1 file changed