зеркало из https://github.com/mozilla/gecko-dev.git
e7f4ed385b
Normally, the OuterDocAccessible is created first and the DocAccessibleParent for a remote document is created after that. So, we get the OuterDocAccessible and call DocAccessibleParent::SendParentCOMProxy when the DocAccessibleParent is constructed (BrowserParent::RecvPDocAccessibleConstructor). However, sometimes, the OuterDocAccessible is created *after* the DocAccessibleParent. This sometimes happens for extension popups, for example. In that case, we previously never sent the parent COM proxy. Aside from leaving the remote document with a null parent, this also meant we never sent any events for the document, since events are buffered for remote documents until the parent COM proxy is received. This effectively left the remote document (e.g. extension popup) inaccessible. Now, we also call SendParentCOMProxy in the OuterDocAccessible constructor. Note that this doesn't result in duplicates because if the OuterDocAccessible was created first, there won't be a DocAccessibleParent for the remote document yet, so this code won't run. That said, if the OuterDocAccessible is recreated (e.g. due to frame reconstruction), we may call SendParentCOMProxy again. This should be okay, but it required an assertion in DocAccessibleChild::RecvParentCOMProxy to be tweaked. Differential Revision: https://phabricator.services.mozilla.com/D40358 --HG-- extra : moz-landing-system : lando |
||
---|---|---|
.. | ||
other | ||
win | ||
DocAccessibleChildBase.cpp | ||
DocAccessibleChildBase.h | ||
DocAccessibleParent.cpp | ||
DocAccessibleParent.h | ||
IPCTypes.h | ||
ProxyAccessibleBase.cpp | ||
ProxyAccessibleBase.h | ||
ProxyAccessibleShared.h | ||
moz.build |