Commit graph

200 commits

Author SHA1 Message Date
Eitan Isaacson
6c538e2f0e Bug 1728403 - Introduce CacheUpdateType as argument for Cache IPDL message. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D124117
2021-09-01 20:32:17 +00:00
Andi-Bogdan Postelnicu
54a355c786 Bug 1725145 - add static prefs include to accessible. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D123455
2021-08-25 10:46:16 +00:00
Eitan Isaacson
b3e528f978 Bug 1700263 - Implement async Cache protocol method. r=Jamie
This is a good place to formalize the following naming convention:
 * A "field" is and direct accessible getter method (name,
   role, value, min, max, etc.)
 * An "attribute" is a member of the "attributes" field.

With that said, I think AccAttributes should probably be named
AccProperties or something of the sort. Might leave that for another
time.

Differential Revision: https://phabricator.services.mozilla.com/D121924
2021-08-17 18:17:38 +00:00
James Teh
dca5bf0440 Bug 1715230 part 4: Stop using RemoteAccessibleWrap! r=morgan
Previously, when the cache was disabled, we had a RemoteAccessibleWrap for every RemoteAccessible.
This is no longer necessary and now only serves as an extra level of indirection and memory waste.
We still keep the stub MsaaAccessible to hold the id sent up from content.

Differential Revision: https://phabricator.services.mozilla.com/D117528
2021-07-19 03:44:10 +00:00
James Teh
1f9a808684 Bug 1713680: Correctly handle the case where the BrowserBridgeParent for an OOP iframe changes while addition of its DocAccessibleParent is still pending. r=eeejay
An OuterDocAccessible can be recreated, causing the embedder accessible for a BrowserBridgeParent (OOP iframe) to change.
However, changing the src of an iframe can also cause a new BrowserBridgeParent to be created.
Previously, if addition of the child document was still pending when this occurred (because the OuterDocAccessible hadn't been sent to the parent yet), this pending addition could remain, causing problems if the id was reused later.

To fix this (and to hopefully make this more robust given the continued problems we're seeing in the wild with this area of the code), I've completely refactored the way we handle these pending child doc additions.
Rather than tracking the pending additions by their accessible id and child doc, we track them by their BrowserBridgeParent.
This way, we're closest to a single source of truth.
We also remove a pending addition when an associated BrowserBridgeParent is destroyed.

Differential Revision: https://phabricator.services.mozilla.com/D117889
2021-06-16 11:50:09 +00:00
Marian-Vasile Laza
5e955a47c4 Backed out changeset 238ccbc3793f (bug 1713680) for causing bustages on BrowserBridgeParent.cpp
CLOSED TREE
2021-06-16 09:58:21 +03:00
James Teh
e0cd1fdf22 Bug 1713680: Correctly handle the case where the BrowserBridgeParent for an OOP iframe changes while addition of its DocAccessibleParent is still pending. r=eeejay
An OuterDocAccessible can be recreated, causing the embedder accessible for a BrowserBridgeParent (OOP iframe) to change.
However, changing the src of an iframe can also cause a new BrowserBridgeParent to be created.
Previously, if addition of the child document was still pending when this occurred (because the OuterDocAccessible hadn't been sent to the parent yet), this pending addition could remain, causing problems if the id was reused later.

To fix this (and to hopefully make this more robust given the continued problems we're seeing in the wild with this area of the code), I've completely refactored the way we handle these pending child doc additions.
Rather than tracking the pending additions by their accessible id and child doc, we track them by their BrowserBridgeParent.
This way, we're closest to a single source of truth.
We also remove a pending addition when an associated BrowserBridgeParent is destroyed.

Differential Revision: https://phabricator.services.mozilla.com/D117889
2021-06-16 00:14:52 +00:00
James Teh
cca8d5e473 Bug 1695116 part 1: When the cache is enabled, use a real MsaaAccessible for RemoteAccessibles. r=morgan
With the cache disabled (which was previously always the case), we create a RemoteAccessibleWrap for each RemoteAccessible, stored as the RemoteAccessible's "Wrapper".
This in turn creates an MsaaAccessible.
However, both of these are little more than stubs: the MsaaAccessible itself is never returned to clients and most of the methods would crash if called.
They exist only to store the MSAA id received from the content process and to return the COM proxy from the content process to clients.

With the cache enabled, we now create a real MsaaAccessible for each RemoteAccessible, stored as the RemoteAccessible's "Wrapper".
This MsaaAccessible is directly returned to clients.
Soon, it will generate its own id in the parent process and will delegate to the underlying RemoteAccessible to serve queries from clients.

As part of this:

1. We stop managing COM proxies in the parent process when the cache is enabled, since we don't need those and can't store them anyway.
2. We stop setting the id on the MsaaAccessible when the cache is enabled, since it will soon generate its own id like local MsaaAccessibles do.
3. OuterDocAccessible::ChildCount had to be tweaked so it doesn't try to return a RemoteAccessibleWrap when the cache is enabled. (It previously called RemoteChildDocAccessible, which fetches a RemoteAccessibleWrap.)

Differential Revision: https://phabricator.services.mozilla.com/D116191
2021-06-08 07:20:49 +00:00
James Teh
8363da33a8 Bug 1712210: Remove a pending child doc addition (if any) when the embedder accessible for an OOP iframe changes. r=eeejay
Previously, if an OuterDoc was never sent to the parent process and its id was reused later, we ended up adding the document to that accessible, which usually wasn't even an OuterDoc.
Alongside the actual fix, add some assertions to make breakage in this area easier to debug in future.

Differential Revision: https://phabricator.services.mozilla.com/D115777
2021-05-25 23:17:09 +00:00
James Teh
1601c5d67a Bug 1679753: Add diagnostic assert to DocAccessibleParent::AddChildDoc when binding to a nonexistent proxy. r=eeejay
Returning an IPC failure causes a crash in the content process on Nightly.
However, the crash doesn't have a useful stack.
A diagnostic assert will cause a full browser crash instead of a tab crash, which isn't ideal.
On the other hand, it will hopefully allow us to get much more useful info about the crash.

Differential Revision: https://phabricator.services.mozilla.com/D115054
2021-05-18 00:12:42 +00:00
James Teh
98c0f0589f Bug 1694865 part 17: Add various functions to get an MsaaAccessible/MsaaDocAccessible and use them where appropriate. r=morgan
In this patch, these new functions just static_cast, but they'll soon be returning a different object.

Differential Revision: https://phabricator.services.mozilla.com/D112952
2021-05-01 02:51:23 +00:00
David Parks
4176faa40b Bug 1682030 - Remove NPAPI plugin support from accessible. r=eeejay
Removes NPAPI plugin support from accessible/, as part of removing all of NPAPI plugin support.  This was the only reason for HTMLWin32ObjectAccessible was needed, so we get rid of that, too.

Differential Revision: https://phabricator.services.mozilla.com/D107143
2021-04-06 19:28:11 +00:00
Csoregi Natalia
d68661e2cc Backed out 24 changesets (bug 1682030) for bustage on ProcessHangMonitor.cpp and nsCOMPtr.h. CLOSED TREE
Backed out changeset 5b1644096477 (bug 1682030)
Backed out changeset 35ae60eea3c7 (bug 1682030)
Backed out changeset 3eca76a6d639 (bug 1682030)
Backed out changeset 259c45447ad9 (bug 1682030)
Backed out changeset de9222dc8c31 (bug 1682030)
Backed out changeset 2986c7e14349 (bug 1682030)
Backed out changeset 6af3410bdb93 (bug 1682030)
Backed out changeset 42b0621c2927 (bug 1682030)
Backed out changeset 366e3e371858 (bug 1682030)
Backed out changeset 9adb2865adea (bug 1682030)
Backed out changeset 6af6af3bc03a (bug 1682030)
Backed out changeset da94a91b35ae (bug 1682030)
Backed out changeset 9143da258d0e (bug 1682030)
Backed out changeset 5e20d06952ba (bug 1682030)
Backed out changeset 6253d7e1ce7d (bug 1682030)
Backed out changeset 0e06ddeea3e2 (bug 1682030)
Backed out changeset 9c58d57c9e44 (bug 1682030)
Backed out changeset e90edd89430e (bug 1682030)
Backed out changeset 5861b8166b10 (bug 1682030)
Backed out changeset b4b88cdc7993 (bug 1682030)
Backed out changeset b80054e9805c (bug 1682030)
Backed out changeset 580d857674c0 (bug 1682030)
Backed out changeset a9cdf93c2662 (bug 1682030)
Backed out changeset 9c9c8b4998e2 (bug 1682030)
2021-04-06 03:54:12 +03:00
David Parks
a6245e18b9 Bug 1682030 - Remove NPAPI plugin support from accessible. r=eeejay
Removes NPAPI plugin support from accessible/, as part of removing all of NPAPI plugin support.  This was the only reason for HTMLWin32ObjectAccessible was needed, so we get rid of that, too.

Differential Revision: https://phabricator.services.mozilla.com/D107143
2021-04-05 23:48:35 +00:00
Eitan Isaacson
d6a5ece8c2 Bug 1695765 - Use Accessible base type in XPCOM instead of AccessibleOrProxy. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D104927
2021-03-09 04:09:03 +00:00
Cosmin Sabou
84170de8f6 Backed out changeset fd254f9f8ae1 (bug 1695765) for causing xpcAccessible related bustages. CLOSED TREE 2021-03-05 08:51:53 +02:00
Eitan Isaacson
89b8c80806 Bug 1695765 - Use Accessible base type in XPCOM instead of AccessibleOrProxy. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D104927
2021-03-05 05:47:16 +00:00
Butkovits Atila
9ca372253f Backed out changeset 858bc4755aae (bug 1695765) for causing failures at xpcAccessibleGeneric.h. CLOSED TREE 2021-03-04 02:17:36 +02:00
Eitan Isaacson
a02fa2061c Bug 1695765 - Use Accessible base type in XPCOM instead of AccessibleOrProxy. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D104927
2021-03-03 22:56:45 +00:00
Eitan Isaacson
bafd5e712b Bug 1694203 - P9: Have RemoteAccessible inherit from Accessible. r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D104915
2021-03-02 16:32:24 +00:00
Eitan Isaacson
457ba6f552 Bug 1694203 - P8: Rename ChildrenCount to ChildCount in RemoteAccessible. r=Jamie
This will allow us to make this an override when inheriting from Accessible.

Differential Revision: https://phabricator.services.mozilla.com/D106005
2021-03-02 16:32:23 +00:00
Eitan Isaacson
6e8749d0da Bug 1693597 - P2: Rename ProxyAccessible to RemoteAccessible. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D105671
2021-02-19 23:14:33 +00:00
Eitan Isaacson
6e49732365 Bug 1693597 - P1: Rename Accessible to LocalAccessible. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D105670
2021-02-19 23:14:32 +00:00
Eitan Isaacson
f48f468cb7 Bug 1693607 - [Linux] Add braces around statements. r=morgan
This is a collaboration between clang-tidy and clang-format.

clang-tidy uses compiled code paths, so this patch is linux specific.

Differential Revision: https://phabricator.services.mozilla.com/D105669
2021-02-19 23:14:32 +00:00
Eitan Isaacson
ff59e176e4 Bug 1692523 - P2: Prefix remote heirarchy functions with 'Remote'. r=Jamie
Parent -> RemoteParent
ChildAt -> RemoteChildAt
FirstChild -> RemoteFirstChild
LastChild -> RemoteLastChild
NextSibling -> RemoteNextSibling
PrevSibling -> RemotePrevSibling

Differential Revision: https://phabricator.services.mozilla.com/D105035
2021-02-16 20:05:11 +00:00
James Teh
03c0b5f0e4 Bug 1669748: Null check the document IAccessibles sent for OOP iframes. r=yzen
The COM proxy for a DocAccessibleParent at the top level in its content process really should never be null.
However, some systems seem to have a broken COM configuration which causes problems like this.
This does mean a11y is broken, but users who get a11y enabled because of something other than an AT (e.g. touch screen) probably aren't even aware.
Regardless, we shouldn't crash.
Instead, we assert (in debug builds) and null check.

Differential Revision: https://phabricator.services.mozilla.com/D102129
2021-01-19 19:30:57 +00:00
Eitan Isaacson
2e476d423a Bug 1671049 - Invalidate cached ARIA role and role in mozAccessible when role changes. r=morgan
Besides the ARIA role invalidation, this fixes an issue where the mozAccessible's role is also incorrect when the aria role changes on a body tag.

Depends on D93439

Differential Revision: https://phabricator.services.mozilla.com/D93440
2020-10-14 00:04:49 +00:00
Eitan Isaacson
8b130be2bb Bug 1226473 - Support AXSelectedTextMarkerRange. r=morgan
To do this well we need to cache the text selection in the top level process.

Differential Revision: https://phabricator.services.mozilla.com/D82111
2020-07-06 17:32:45 +00:00
Eitan Isaacson
970939c823 Bug 1649217 - Part 3: Support isSelectionCollapsed in caret moved xpcom iface. r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D81913
2020-07-02 17:43:21 +00:00
Eitan Isaacson
9abbad9091 Bug 1649217 - Part 2: Send isSelectionCollapsed for caret move in IPC. r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D81912
2020-07-02 18:08:52 +00:00
Eitan Isaacson
ccdf272301 Bug 1647483 - Add a TextRange getter to text selection change events. r=Jamie
This includes 3 changes:
1. Add a lazy ranges getter to AccTextSelChangeEvent.
2. Create an XPCOM interface for testing purposes.
3. Add IPDL bindings for passing ranges in e10s.

Differential Revision: https://phabricator.services.mozilla.com/D80556
2020-06-23 18:52:42 +00:00
James Teh
6a5821c667 Bug 1630208 part 2: Drop events for DocAccessibleParents which are already shut down. r=yzen
We can receive IPC events after a DocAccessibleParent is shut down if the BrowserParent is in the process of being destroyed (probably the tab closed) but there are still events in the IPC queue.
Most Recv*Event methods in BrowserParent check mShutdown, but a few don't.
For the events that don't, if the event is for a document, we'll successfully fire the platform event, and then successfully get and cache an xpcAccessibleDocument.
However, that xpcAccessibleDocument will never be removed from the cache because it's already shut down, so NotifyOfRemoteDocShutdown (which would normally remove it from the XPC cache) won't get called.
This results in a leaked object.
Thus, it's important that all Recv*Event methods drop the event if mShutdown is true.
This patch adds that check to the methods which didn't have it already.

Differential Revision: https://phabricator.services.mozilla.com/D79780
2020-06-17 18:40:42 +00:00
James Teh
d24d857a51 Bug 1628582: Set DocAccessibleParent::mDocProxyStream on the child document, not the parent document. r=yzen
DocAccessibleParent::AddChildDoc sends a COM proxy for the embedded document to the embedder process hosting the iframe.
This gets returned as the child of the embedder OuterDocAccessible.
Whenever we send a proxy to a content process, we must hold a PreservedStreamPtr in the parent process.
Previously, we set mDocProxyStream on the parent (embedder) document.
However, if a document had multiple OOP iframes, this meant we  ended up losing the PreservedStreamPtr for all but the last added child OOP document.
We now set mDocProxyStream on the child document instead, since there can only be one embedder OuterDocAccessible per child document.

Differential Revision: https://phabricator.services.mozilla.com/D74584
2020-05-11 14:41:57 +00:00
James Teh
fa30324c84 Bug 1619506 part 1: Implement QueryService to SID_IAccessibleContentDocument for OOP iframes. r=yzen
For OOP iframes, the top level document lives in a different process.
Previously, we incorrectly returned the top level document in the same process.
This was causing JAWS to incorrectly identify OOP iframe documents as separate tab documents.
To fix this, we must send the real top level document down from the parent process and return that when requested in the content process.

Differential Revision: https://phabricator.services.mozilla.com/D70162

--HG--
extra : moz-landing-system : lando
2020-04-08 18:28:08 +00:00
James Teh
4a0ed4f097 Bug 1581040: handle late creation/re-creation of OuterDocAccessible for OOP iframe. r=yzen,nika
1. When creating a DocAccessibleParent for an embedded document in an OOP iframe, it's possible that the embedder accessible hasn't been set yet.
    This can occur if the iframe is initially hidden.
    Previously, we incorrectly set the document up as a top level document (e.g. tab document) in this case.
    Now, we set up the document as top level in its content process, set up the proxy, etc.
    The document will be added to its child document later when the embedder is set.

2. When setting the embedder accessible for an OOP iframe, check if the embedded DocAccessibleParent already exists.
    This can happen if an iframe is hidden and then shown or an iframe is reflowed by layout.
    If it already exists, add the embedded (child) document to its embedder.

3. Mac's implementation of ProxyCreated requires that AddChildDoc be called *before* ProxyCreated so it can invalidate the native children of the parent.
    Because it's possible for an OOP iframe document to be added to its embedder after the document is created, we can't satisfy this requirement for OOP iframe documents.
    Therefore, we now allow a null parent in Mac's ProxyCreated and use the reorder event fired later to invalidate the native children.

Differential Revision: https://phabricator.services.mozilla.com/D51357

--HG--
extra : moz-landing-system : lando
2019-11-07 00:38:59 +00:00
James Teh
fa1fd5ca07 Bug 1593892: Fire OOP iframe reorder events on all platforms, not just Windows. r=yzen
Previously, this code was unintentionally inside a Windows ifdef.

Differential Revision: https://phabricator.services.mozilla.com/D51754

--HG--
extra : moz-landing-system : lando
2019-11-06 00:36:45 +00:00
Cosmin Sabou
e7966b8b03 Backed out changeset ac4242e7f029 (bug 1581040) for causing browser chrome crashes @mozilla::a11y::ProxyCreated. CLOSED TREE 2019-11-05 10:39:48 +02:00
James Teh
28a8c82da1 Bug 1581040: handle late creation/re-creation of OuterDocAccessible for OOP iframe. r=yzen,nika
1. When creating a DocAccessibleParent for an embedded document in an OOP iframe, it's possible that the embedder accessible hasn't been set yet.
    This can occur if the iframe is initially hidden.
    Previously, we incorrectly set the document up as a top level document (e.g. tab document) in this case.
    Now, we set up the document as top level in its content process, set up the proxy, etc.
    The document will be added to its child document later when the embedder is set.

2. When setting the embedder accessible for an OOP iframe, check if the embedded DocAccessibleParent already exists.
    This can happen if an iframe is hidden and then shown or an iframe is reflowed by layout.
    If it already exists, add the embedded (child) document to its embedder.

Differential Revision: https://phabricator.services.mozilla.com/D51357

--HG--
extra : moz-landing-system : lando
2019-11-05 05:44:34 +00:00
Ciure Andrei
64cfc71bcd Backed out changeset 967bb08714f9 (bug 1581040) for causing build bustages CLOSED TREE 2019-11-05 07:23:01 +02:00
James Teh
f0676dcb3a Bug 1581040: handle late creation/re-creation of OuterDocAccessible for OOP iframe. r=yzen,nika
1. When creating a DocAccessibleParent for an embedded document in an OOP iframe, it's possible that the embedder accessible hasn't been set yet.
    This can occur if the iframe is initially hidden.
    Previously, we incorrectly set the document up as a top level document (e.g. tab document) in this case.
    Now, we set up the document as top level in its content process, set up the proxy, etc.
    The document will be added to its child document later when the embedder is set.

2. When setting the embedder accessible for an OOP iframe, check if the embedded DocAccessibleParent already exists.
    This can happen if an iframe is hidden and then shown or an iframe is reflowed by layout.
    If it already exists, add the embedded (child) document to its embedder.

Differential Revision: https://phabricator.services.mozilla.com/D51357

--HG--
extra : moz-landing-system : lando
2019-11-05 05:02:38 +00:00
Eitan Isaacson
0293722fcc Bug 1565728 - Introduce PDocAccessiblePlatformExt. r=Jamie
This is an extension protocol that can be used for platform specific
API (ie. AccessibleWrap methods).

I'm not thrilled with the seperate constructor for the sub-protocol.
This means that the parent won't have the actor upon DocAccessibleParent
construction, and some timing bugs can arise because of the extra round
trip. It would be cool if both actors could be co-created, but that
would require ManagedEndpoint, and for PBrowser to manage them both. I
don't want to expose this to PBrowser.

Differential Revision: https://phabricator.services.mozilla.com/D37955

--HG--
extra : moz-landing-system : lando
2019-09-13 16:55:01 +00:00
Dorel Luca
c7aad775a7 Backed out 2 changesets (bug 1565728) for License failure. CLOSED TREE
Backed out changeset 6c30dad5259b (bug 1565728)
Backed out changeset 4369b7203266 (bug 1565728)
2019-09-13 03:16:23 +03:00
Eitan Isaacson
35496390cd Bug 1565728 - Introduce PDocAccessiblePlatformExt. r=Jamie
This is an extension protocol that can be used for platform specific
API (ie. AccessibleWrap methods).

I'm not thrilled with the seperate constructor for the sub-protocol.
This means that the parent won't have the actor upon DocAccessibleParent
construction, and some timing bugs can arise because of the extra round
trip. It would be cool if both actors could be co-created, but that
would require ManagedEndpoint, and for PBrowser to manage them both. I
don't want to expose this to PBrowser.

Differential Revision: https://phabricator.services.mozilla.com/D37955

--HG--
extra : moz-landing-system : lando
2019-09-12 23:01:59 +00:00
Dorel Luca
7f5e96335e Backed out 2 changesets (bug 1565728) for License failure. CLOSED TREE
Backed out changeset 0d08e4b02c17 (bug 1565728)
Backed out changeset 4fe176e80602 (bug 1565728)
2019-09-12 23:48:50 +03:00
Eitan Isaacson
82aa8a18ca Bug 1565728 - Introduce PDocAccessiblePlatformExt. r=Jamie
This is an extension protocol that can be used for platform specific
API (ie. AccessibleWrap methods).

I'm not thrilled with the seperate constructor for the sub-protocol.
This means that the parent won't have the actor upon DocAccessibleParent
construction, and some timing bugs can arise because of the extra round
trip. It would be cool if both actors could be co-created, but that
would require ManagedEndpoint, and for PBrowser to manage them both. I
don't want to expose this to PBrowser.

Differential Revision: https://phabricator.services.mozilla.com/D37955

--HG--
extra : moz-landing-system : lando
2019-09-12 20:10:51 +00:00
James Teh
49d8452868 Bug 1574286: When adding a remote child document, if the parent proxy doesn't exist yet, defer adding until it does. r=eeejay
For OOP iframes, sometimes, AddChildDoc gets called before the embedder sends us the OuterDocAccessible.
Previously, we crashed when this occurred.
Now, we add the child when the OuterDocAccessible proxy gets created later.

Differential Revision: https://phabricator.services.mozilla.com/D42798

--HG--
extra : moz-landing-system : lando
2019-08-30 03:32:55 +00:00
James Teh
07b13c72c3 Bug 1570038: When sending the parent COM proxy for a remote document, return early if the parent COM proxy can't be retrieved. r=yzen
Previously, we expected that we'd always be able to get the COM proxy for the parent (outer doc), so we crashed if it was null.
For an out-of-process iframe, this sometimes fails.
That is probably because the outer doc died in the embedder process, but the parent process hasn't received a message to remove it from the ProxyAccessible tree yet.

Differential Revision: https://phabricator.services.mozilla.com/D40150

--HG--
extra : moz-landing-system : lando
2019-08-02 03:40:14 +00:00
Sylvestre Ledru
e77bfc655d Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D38057

--HG--
extra : moz-landing-system : lando
2019-07-16 07:33:44 +00:00
James Teh
3a49aece73 Bug 1564299: Fire a reorder event on the outer doc accessible when an OOP document gets added. r=yzen
For same-process iframe documents, this reorder event is fired by the content process.
This isn't possible when the document is in a different process to its embedder.
In this case, we need to fire it from the parent process when the embedded document accessible is added.

Differential Revision: https://phabricator.services.mozilla.com/D37352

--HG--
extra : moz-landing-system : lando
2019-07-10 12:59:21 +00:00
James Teh
43f890d3a4 Bug 1562208: Don't assume that a child DocAccessibleParent is for a different process to its parent because there is a BrowserBridgeParent. r=yzen
Previously, DocAccessibleParent::AddChildDoc used the presence of a BrowserBridgeParent to determine whether the child document was in a different process to the parent document.
While this is normally the case, there can be a point while the embedded document is loading where there is a temporary document in the same (embedder) process.
In this case, we tried to get the COM proxy for the child document.
For a child document in the same process, this isn't available yet, so this caused infinite recursion (stack overflow) in ProxyAccessible::GetCOMInterface.

Instead of using the presence of BrowserBridgeParent, first check whether the child document is at the top level of its content process.
If it isn't, the document is in the same process as its parent.

Also, add a DIAGNOSTIC_ASSERT to ProxyAccessible::GetCOMInterface which will fire if no COM proxy or MSAA child id has been set.
Previously, we just recursed infinitely and overflowed the stack in this case, which is painful to debug.

Differential Revision: https://phabricator.services.mozilla.com/D37344

--HG--
extra : moz-landing-system : lando
2019-07-09 00:56:56 +00:00