Bug 577684 - Jetpack should push the JS context on to the XPConnect stack when running message receivers, r=mrbkap

This commit is contained in:
Benjamin Smedberg
2010-07-15 10:40:33 -04:00
parent 64a36a80cf
commit dd4b9ae2fc

View File

@@ -42,6 +42,7 @@
#include "nsNetUtil.h" #include "nsNetUtil.h"
#include "nsIVariant.h" #include "nsIVariant.h"
#include "nsIXPConnect.h" #include "nsIXPConnect.h"
#include "nsIJSContextStack.h"
namespace mozilla { namespace mozilla {
namespace jetpack { namespace jetpack {
@@ -135,10 +136,31 @@ JetpackParent::EvalScript(const nsAString& aScript)
return NS_OK; return NS_OK;
} }
class AutoCXPusher
{
public:
AutoCXPusher(JSContext* cx)
: mCXStack(do_GetService("@mozilla.org/js/xpc/ContextStack;1"))
{
if (mCXStack)
mCXStack->Push(cx);
}
~AutoCXPusher()
{
if (mCXStack)
mCXStack->Pop(NULL);
}
private:
nsCOMPtr<nsIJSContextStack> mCXStack;
JSContext* mCX;
};
bool bool
JetpackParent::RecvSendMessage(const nsString& messageName, JetpackParent::RecvSendMessage(const nsString& messageName,
const nsTArray<Variant>& data) const nsTArray<Variant>& data)
{ {
AutoCXPusher cxp(mContext);
JSAutoRequest request(mContext); JSAutoRequest request(mContext);
return JetpackActorCommon::RecvMessage(mContext, messageName, data, NULL); return JetpackActorCommon::RecvMessage(mContext, messageName, data, NULL);
} }
@@ -148,6 +170,7 @@ JetpackParent::RecvCallMessage(const nsString& messageName,
const nsTArray<Variant>& data, const nsTArray<Variant>& data,
nsTArray<Variant>* results) nsTArray<Variant>* results)
{ {
AutoCXPusher cxp(mContext);
JSAutoRequest request(mContext); JSAutoRequest request(mContext);
return JetpackActorCommon::RecvMessage(mContext, messageName, data, results); return JetpackActorCommon::RecvMessage(mContext, messageName, data, results);
} }