Bug 1365086, part 1 - Make nsMessageManagerScriptExecutor::GetGlobal return a JSObject pointer. r=smaug
MozReview-Commit-ID: HxMaMyK8fFW
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -3148,17 +3148,17 @@ public:
NS_IMETHOD Run() override
{
nsInProcessTabChildGlobal* tabChild =
static_cast<nsInProcessTabChildGlobal*>(mFrameLoader->mChildMessageManager.get());
// Since bug 1126089, messages can arrive even when the docShell is destroyed.
// Here we make sure that those messages are not delivered.
if (tabChild && tabChild->GetInnerManager() && mFrameLoader->GetExistingDocShell()) {
- nsCOMPtr<nsIXPConnectJSObjectHolder> kungFuDeathGrip(tabChild->GetGlobal());
+ JS::Rooted<JSObject*> kungFuDeathGrip(dom::RootingCx(), tabChild->GetGlobal());
ReceiveMessage(static_cast<EventTarget*>(tabChild), mFrameLoader,
tabChild->GetInnerManager());
}
return NS_OK;
}
RefPtr<nsFrameLoader> mFrameLoader;
};
--- a/dom/base/nsFrameMessageManager.h
+++ b/dom/base/nsFrameMessageManager.h
@@ -360,20 +360,19 @@ struct nsMessageManagerScriptHolder
bool mRunInGlobalScope;
};
class nsMessageManagerScriptExecutor
{
public:
static void PurgeCache();
static void Shutdown();
- already_AddRefed<nsIXPConnectJSObjectHolder> GetGlobal()
+ JSObject* GetGlobal()
{
- nsCOMPtr<nsIXPConnectJSObjectHolder> ref = mGlobal;
- return ref.forget();
+ return mGlobal->GetJSObject();
}
void MarkScopesForCC();
protected:
friend class nsMessageManagerScriptCx;
nsMessageManagerScriptExecutor() { MOZ_COUNT_CTOR(nsMessageManagerScriptExecutor); }
~nsMessageManagerScriptExecutor() { MOZ_COUNT_DTOR(nsMessageManagerScriptExecutor); }
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -237,17 +237,17 @@ TabChildBase::DispatchMessageManagerMess
ErrorResult rv;
data.Write(cx, json, rv);
if (NS_WARN_IF(rv.Failed())) {
rv.SuppressException();
return;
}
}
- nsCOMPtr<nsIXPConnectJSObjectHolder> kungFuDeathGrip(GetGlobal());
+ JS::Rooted<JSObject*> kungFuDeathGrip(cx, GetGlobal());
// Let the BrowserElementScrolling helper (if it exists) for this
// content manipulate the frame state.
RefPtr<nsFrameMessageManager> mm =
static_cast<nsFrameMessageManager*>(mTabChildGlobal->mMessageManager.get());
mm->ReceiveMessage(static_cast<EventTarget*>(mTabChildGlobal), nullptr,
aMessageName, false, &data, nullptr, nullptr, nullptr);
}
@@ -2231,17 +2231,17 @@ TabChild::RecvAsyncMessage(const nsStrin
// We should have a message manager if the global is alive, but it
// seems sometimes we don't. Assert in aurora/nightly, but don't
// crash in release builds.
MOZ_DIAGNOSTIC_ASSERT(mTabChildGlobal->mMessageManager);
if (!mTabChildGlobal->mMessageManager) {
return IPC_OK();
}
- nsCOMPtr<nsIXPConnectJSObjectHolder> kungFuDeathGrip(GetGlobal());
+ JS::Rooted<JSObject*> kungFuDeathGrip(dom::RootingCx(), GetGlobal());
StructuredCloneData data;
UnpackClonedMessageDataForChild(aData, data);
RefPtr<nsFrameMessageManager> mm =
static_cast<nsFrameMessageManager*>(mTabChildGlobal->mMessageManager.get());
mm->ReceiveMessage(static_cast<EventTarget*>(mTabChildGlobal), nullptr,
aMessage, false, &data, &cpows, aPrincipal, nullptr);
return IPC_OK();
}
@@ -3576,12 +3576,10 @@ TabChildGlobal::GetPrincipal()
return nullptr;
return mTabChild->GetPrincipal();
}
JSObject*
TabChildGlobal::GetGlobalJSObject()
{
NS_ENSURE_TRUE(mTabChild, nullptr);
- nsCOMPtr<nsIXPConnectJSObjectHolder> ref = mTabChild->GetGlobal();
- NS_ENSURE_TRUE(ref, nullptr);
- return ref->GetJSObject();
+ return mTabChild->GetGlobal();
}