Closed Bug 1543313 Opened 7 months ago Closed 5 months ago

Fission a11y: Send embedder iframe as parent COM proxy for embedded OOP DocAccessibleChild

Categories

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

All
Windows
enhancement

Tracking

()

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

People

(Reporter: Jamie, Assigned: Jamie)

References

(Blocks 2 open bugs)

Details

Attachments

(3 files)

Bug 1543307 will expose the embedded OOP iframe document accessible as a child of the embedder iframe accessible via COM. Clients also need the reverse relationship: when they query the parent of the embedded iframe document, they want to receive the embedder iframe accessible.

  1. The parent process already has a ProxyAccessible for the iframe.
  2. After bug 1543287, DocAccessibleParent::AddChildDoc retrieves this ProxyAccessible.
  3. We can already retrieve a COM proxy for any ProxyAccessible using ProxyAccessible::GetCOMInterface.
  4. Finally, we can send the parent COM proxy for a remote document using DocAccessibleParent::SendParentCOMProxy.

AddChildDoc needs some way to know that it needs to send the COM proxy. TabParent::RecvPDocAccessibleConstructor (which calls AddChildDoc) already knows this, so AddChildDoc may need an additional argument. Alternatively, AddChildDoc could somehow ask the iframe ProxyAccessible or the child DocAccessibleParent.

Depends on: 1543575
Blocks: 1543575
No longer depends on: 1543575
Blocks: 1553706

DocAccessibleParent already has IsTopLevel(), which identifies a document at the top level of the hierarchy; i.e. it has no parents.
Now that we have out-of-process iframes, we need to be able to identify and retrieve documents at the top level of their content process, even if they are embedded by another remote document.
DocAccessibleParent::IsTopLevelInContentProcess() has been introduced to achieve this.
BrowserParent::GetTopLevelDocAccessible() now uses this instead of IsTopLevel(), since we want to be able to get the top DocAccessibleParent even for a BrowserParent for an out-of-process iframe.

Previously, a COM proxy was only sent from content for top level documents.
Now, a COM proxy is also sent (and needed) for out-of-process iframe documents.
This change adjusts GetProxiedAccessibleInSubtree accordingly.

Aside from the parent being needed by the client, this is also important because events from the embedded document are deferred until the parent COM proxy is received.

Pushed by jteh@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/85d11dab6b63
part 1: Allow identification and retrieval of DocAccessibleParents at the top level of their content process. r=eeejay
https://hg.mozilla.org/integration/autoland/rev/30b106088985
part 2: Support getting an IAccessible for a ProxyAccessible in an out-of-process iframe. r=eeejay
https://hg.mozilla.org/integration/autoland/rev/15f3e6bb3ba9
part 3: For out-of-process iframes on Windows, send the embedder accessible COM proxy to be used as the parent of the embedded document. r=eeejay
Pushed by jteh@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/3c619a698b96
part 1: Allow identification and retrieval of DocAccessibleParents at the top level of their content process. r=eeejay
https://hg.mozilla.org/integration/autoland/rev/ef50240bdb1f
part 2: Support getting an IAccessible for a ProxyAccessible in an out-of-process iframe. r=eeejay
https://hg.mozilla.org/integration/autoland/rev/379dc9cb2ae9
part 3: For out-of-process iframes on Windows, send the embedder accessible COM proxy to be used as the parent of the embedded document. r=eeejay,yzen
Flags: needinfo?(jteh)
Blocks: a11y-fission
Fission Milestone: --- → M3
You need to log in before you can comment on or make changes to this bug.