From f6df295645ad5780cf14f8392a36122bc8941de9 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 12 May 2011 11:26:05 +0100 Subject: [PATCH] Bug 644325 - Enter the listener's compartment sooner, and use the correct scope for wrapping to avoid compartment mismatches. r=mrbkap --- content/base/src/nsFrameMessageManager.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/content/base/src/nsFrameMessageManager.cpp b/content/base/src/nsFrameMessageManager.cpp index 4616af15080c..a3f8b65a0ea8 100644 --- a/content/base/src/nsFrameMessageManager.cpp +++ b/content/base/src/nsFrameMessageManager.cpp @@ -359,13 +359,17 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget, JSAutoRequest ar(ctx); + JSAutoEnterCompartment ac; + if (!ac.enter(ctx, object)) + return NS_ERROR_FAILURE; + // The parameter for the listener function. JSObject* param = JS_NewObject(ctx, NULL, NULL, NULL); NS_ENSURE_TRUE(param, NS_ERROR_OUT_OF_MEMORY); jsval targetv; nsContentUtils::WrapNative(ctx, - JS_GetGlobalObject(ctx), + JS_GetGlobalForObject(ctx, object), aTarget, &targetv); // To keep compatibility with e10s message manager, @@ -402,11 +406,6 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget, jsval thisValue = JSVAL_VOID; - JSAutoEnterCompartment ac; - - if (!ac.enter(ctx, object)) - return NS_ERROR_FAILURE; - jsval funval = JSVAL_VOID; if (JS_ObjectIsFunction(ctx, object)) { // If the listener is a JS function: @@ -422,7 +421,7 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget, defaultThisValue = aTarget; } nsContentUtils::WrapNative(ctx, - JS_GetGlobalObject(ctx), + JS_GetGlobalForObject(ctx, object), defaultThisValue, &thisValue); } else { // If the listener is a JS object which has receiveMessage function: