Open Bug 1573292 Opened 1 year ago Updated 9 months ago

Fix usage of nsIDocShellTreeItem in nsAccessibilityService::GetRootDocumentAccessible

Categories

(Core :: Disability Access APIs, enhancement, P2)

enhancement

Tracking

()

Fission Milestone Future

People

(Reporter: djvj, Unassigned)

References

(Blocks 2 open bugs)

Details

(Whiteboard: [rm-docshell-tree-item:simple])

In accessible/base/nsAccessibilityService.cpp, in GetRootDocumentAccessible (https://searchfox.org/mozilla-central/source/accessible/base/nsAccessibilityService.cpp#341):

The logic uses GetInProcessRootTreeItem to obtain the root and check if it is the same as the current tree item. If it is not the same (current item is not the root), then the presShell variable is replaced with the PresShell of the current document.

However, in a post-fission world, it can occur such that the "in-process root" is the same as the current item, but the actual root is out of process. In this case, we would erroneously skip this assignment, and use the presShell provided in the argument.

The fix here seems like it should be the following:

  1. Use GetInProcessParent to obtain the parent.
  2. If it's null, then the current item is either the true root, or it is the child of an out-of-process item.
  3. In the case that it is null, use BrowsingContext to obtain information about whether there exists an out-of-process parent.
  4. If an out-of-process parent exists, then this item cannot be the true root.
  5. If the OOP parent does not exist, then this item is the true root.
  6. Adjust conditional logic accordingly.
Component: DOM: Core & HTML → Disability Access APIs
Fission Milestone: --- → M5
Priority: -- → P2

Updated with fixed-location link: https://searchfox.org/mozilla-central/rev/1d0e84d2ec2843924bc6e5ed6658f93439e12351/accessible/base/nsAccessibilityService.cpp#350

Now that I understand things better, the fix for this can be described much more simply: adjust the is this the root item check to use the BrowsingContext instead of nsIDocShellTreeItem.

Whiteboard: [rm-docshell-tree-item:simple]
Fission Milestone: M5 → Future

Kannan says replacing nsIDocShellTreeItem calls should block enabling Fission in Nightly (M6).

Fission Milestone: Future → M6

This is only ever used in the parent process by code which hooks up Gecko accessibility to the OS (widget code + Android SessionAccessibility). In any case, as far as the a11y engine is concerned, root accessible means in-process root accessible (the outer most accessible in the in-process a11y tree). Therefore, we don't want to change the behaviour here.

Fission Milestone: M6 → Future
You need to log in before you can comment on or make changes to this bug.