/** * @param aCOMProxy COM Proxy to the document in the content process. */ void DocAccessibleParent::SendParentCOMProxy() { // Make sure that we're not racing with a tab shutdown auto tab = static_cast<dom::TabParent*>(Manager()); MOZ_ASSERT(tab); if (tab->IsDestroyed()) { return; } Accessible* outerDoc = OuterDocOfRemoteBrowser(); if (!outerDoc) { return; } IAccessible* rawNative = nullptr; outerDoc->GetNativeInterface((void**) &rawNative); MOZ_ASSERT(rawNative); IAccessibleHolder::COMPtrType ptr(rawNative); IAccessibleHolder holder(Move(ptr)); if (!PDocAccessibleParent::SendParentCOMProxy(holder)) { return; } #if defined(MOZ_CONTENT_SANDBOX) mParentProxyStream = Move(holder.GetPreservedStream()); #endif // defined(MOZ_CONTENT_SANDBOX) }
/** * @param aCOMProxy COM Proxy to the document in the content process. * @param aParentCOMProxy COM Proxy to the OuterDocAccessible that is * the parent of the document. The content process will use this * proxy when traversing up across the content/chrome boundary. */ bool DocAccessibleParent::RecvCOMProxy(const IAccessibleHolder& aCOMProxy, IAccessibleHolder* aParentCOMProxy) { RefPtr<IAccessible> ptr(aCOMProxy.Get()); SetCOMInterface(ptr); Accessible* outerDoc = OuterDocOfRemoteBrowser(); IAccessible* rawNative = nullptr; if (outerDoc) { outerDoc->GetNativeInterface((void**) &rawNative); } aParentCOMProxy->Set(IAccessibleHolder::COMPtrType(rawNative)); return true; }
/** * @param aCOMProxy COM Proxy to the document in the content process. */ void DocAccessibleParent::SendParentCOMProxy() { // Make sure that we're not racing with a tab shutdown auto tab = static_cast<dom::TabParent*>(Manager()); MOZ_ASSERT(tab); if (tab->IsDestroyed()) { return; } Accessible* outerDoc = OuterDocOfRemoteBrowser(); if (!outerDoc) { return; } IAccessible* rawNative = nullptr; outerDoc->GetNativeInterface((void**) &rawNative); MOZ_ASSERT(rawNative); IAccessibleHolder::COMPtrType ptr(rawNative); IAccessibleHolder holder(Move(ptr)); Unused << PDocAccessibleParent::SendParentCOMProxy(holder); }