NS_IMETHODIMP HangMonitoredProcess::GetScriptBrowser(nsIDOMElement** aBrowser) { MOZ_RELEASE_ASSERT(NS_IsMainThread()); if (mHangData.type() != HangData::TSlowScriptData) { return NS_ERROR_NOT_AVAILABLE; } TabId tabId = mHangData.get_SlowScriptData().tabId(); if (!mContentParent) { return NS_ERROR_NOT_AVAILABLE; } nsTArray<PBrowserParent*> tabs; mContentParent->ManagedPBrowserParent(tabs); for (size_t i = 0; i < tabs.Length(); i++) { TabParent* tp = TabParent::GetFrom(tabs[i]); if (tp->GetTabId() == tabId) { nsCOMPtr<nsIDOMElement> node = do_QueryInterface(tp->GetOwnerElement()); node.forget(aBrowser); return NS_OK; } } *aBrowser = nullptr; return NS_OK; }
bool RenderFrameParent::Init(nsFrameLoader* aFrameLoader) { if (mInitted || !aFrameLoader) { return false; } mFrameLoader = aFrameLoader; RefPtr<LayerManager> lm = GetFrom(mFrameLoader); mAsyncPanZoomEnabled = lm && lm->AsyncPanZoomEnabled(); TabParent* browser = TabParent::GetFrom(mFrameLoader); if (XRE_IsParentProcess()) { // Our remote frame will push layers updates to the compositor, // and we'll keep an indirect reference to that tree. browser->Manager()->AsContentParent()->AllocateLayerTreeId(browser, &mLayersId); if (lm && lm->AsClientLayerManager()) { lm->AsClientLayerManager()->GetRemoteRenderer()->SendNotifyChildCreated(mLayersId); } } else if (XRE_IsContentProcess()) { ContentChild::GetSingleton()->SendAllocateLayerTreeId(browser->Manager()->ChildID(), browser->GetTabId(), &mLayersId); CompositorBridgeChild::Get()->SendNotifyChildCreated(mLayersId); } mInitted = true; return true; }