Bug 504553 - patch 5 - AutoJSAPI in websockets in workers, r=smaug
--- a/content/base/src/WebSocket.cpp
+++ b/content/base/src/WebSocket.cpp
@@ -12,16 +12,17 @@
#include "jsfriendapi.h"
#include "js/OldDebugAPI.h"
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/net/WebSocketChannel.h"
#include "mozilla/dom/File.h"
#include "mozilla/dom/ScriptSettings.h"
#include "mozilla/dom/WorkerPrivate.h"
#include "mozilla/dom/WorkerRunnable.h"
+#include "mozilla/dom/WorkerScope.h"
#include "nsIScriptGlobalObject.h"
#include "nsIDOMWindow.h"
#include "nsIDocument.h"
#include "nsXPCOM.h"
#include "nsIXPConnect.h"
#include "nsContentUtils.h"
#include "nsError.h"
#include "nsIScriptObjectPrincipal.h"
@@ -1538,28 +1539,30 @@ WebSocket::CreateAndDispatchSimpleEvent(
nsresult
WebSocket::CreateAndDispatchMessageEvent(const nsACString& aData,
bool aIsBinary)
{
MOZ_ASSERT(mImpl);
mImpl->AssertIsOnTargetThread();
+ AutoJSAPI jsapi;
+
if (NS_IsMainThread()) {
- AutoJSAPI jsapi;
if (NS_WARN_IF(!jsapi.Init(GetOwner()))) {
return NS_ERROR_FAILURE;
}
-
- return CreateAndDispatchMessageEvent(jsapi.cx(), aData, aIsBinary);
+ } else {
+ MOZ_ASSERT(mWorkerPrivate);
+ if (NS_WARN_IF(!jsapi.Init(mWorkerPrivate->GlobalScope()))) {
+ return NS_ERROR_FAILURE;
+ }
}
- MOZ_ASSERT(mWorkerPrivate);
- return CreateAndDispatchMessageEvent(mWorkerPrivate->GetJSContext(), aData,
- aIsBinary);
+ return CreateAndDispatchMessageEvent(jsapi.cx(), aData, aIsBinary);
}
nsresult
WebSocket::CreateAndDispatchMessageEvent(JSContext* aCx,
const nsACString& aData,
bool aIsBinary)
{
MOZ_ASSERT(mImpl);