Closed Bug 1558369 Opened 6 years ago Closed 6 years ago

Fission a11y: OOP iframes not accessible in-process with COM handler enabled

Categories

(Core :: Disability Access APIs, defect, P1)

All
Windows
defect

Tracking

()

RESOLVED FIXED
mozilla69
Fission Milestone M4
Tracking Status
firefox69 --- fixed

People

(Reporter: Jamie, Assigned: Jamie)

References

Details

Attachments

(1 file)

When the accessibility COM handler is enabled, in-process clients can't access OOP iframes. For example, NVDA fails to render them in its buffer. This works as expected when the handler is disabled.

My guess is that this relates to IGeckoBackChannel::get_AllChildren and HandlerEnumerator. The embedder only has an IDispatch COM proxy for the embedded document, but get_AllChildren tries to QI this to IAccessible2_3. That's probably going to fail because of the sandbox.

When a client wants to fetch all accessible children, the COM handler uses handlerProvider::get_AllChildren in the content process to optimize cross-process retrieval of all children.
This works fine for iframes rendered in the same content process, just as it does for other accessibles.
However, for out-of-process iframes, HandlerProvider::get_AllChildren will fail.
This is because we only send down an IDispatch COM proxy for the embedded document, but get_AllChildren will try to QueryInterface this to IAccessible2 to reduce QI calls from the parent process.
Because the content process is sandboxed, it can't make the outgoing COM call to QI the proxy from IDispatch to IAccessible2 and so it fails.

Since an iframe only has one child anyway, we don't need the bulk fetch optimization offered by HandlerChildEnumerator or even IEnumVARIANT.
Therefore, we explicitly tell the client this interface is not supported, which will cause the oleacc AccessibleChildren function to fall back to accChild.

Pushed by jteh@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/d8c452255338 AccessibleHandler: Don't use HandlerChildEnumerator for iframes. r=yzen
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla69

Retroactively moving fixed bugs whose summaries mention "Fission" (or other Fission-related keywords) but are not assigned to a Fission Milestone to an appropriate Fission Milestone.

This will generate a lot of bugmail, so you can filter your bugmail for the following UUID and delete them en masse:

0ee3c76a-bc79-4eb2-8d12-05dc0b68e732

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

Attachment

General

Created:
Updated:
Size: