From d208b0de7a466377cddeee98c96111121c6e0ec4 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Thu, 7 Jul 2016 20:08:26 -0400 Subject: [PATCH] Bug 1282150 part 3. Add a way to get the JSRuntime for the thread, and use it in various places for rooting. r=bholley --- dom/base/DOMRequest.cpp | 3 ++- dom/base/ScriptSettings.cpp | 6 ++++++ dom/base/ScriptSettings.h | 2 ++ dom/base/nsJSEnvironment.cpp | 6 +++--- dom/bindings/BindingUtils.cpp | 2 +- dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp | 2 +- dom/bluetooth/bluez/BluetoothHfpManager.cpp | 2 +- dom/devicestorage/nsDeviceStorage.cpp | 3 +-- dom/events/JSEventHandler.cpp | 2 +- dom/xhr/XMLHttpRequestWorker.cpp | 4 ++-- dom/xslt/xpath/txXPCOMExtensionFunction.cpp | 4 ++-- 11 files changed, 22 insertions(+), 14 deletions(-) diff --git a/dom/base/DOMRequest.cpp b/dom/base/DOMRequest.cpp index 9ca169daecdc..46a57c377440 100644 --- a/dom/base/DOMRequest.cpp +++ b/dom/base/DOMRequest.cpp @@ -23,6 +23,7 @@ using mozilla::dom::DOMRequestService; using mozilla::dom::DOMCursor; using mozilla::dom::Promise; using mozilla::dom::AutoJSAPI; +using mozilla::dom::GetJSRuntime; DOMRequest::DOMRequest(nsPIDOMWindowInner* aWindow) : DOMEventTargetHelper(aWindow) @@ -301,7 +302,7 @@ class FireSuccessAsyncTask : public mozilla::Runnable FireSuccessAsyncTask(DOMRequest* aRequest, const JS::Value& aResult) : mReq(aRequest), - mResult(nsContentUtils::RootingCxForThread(), aResult) + mResult(GetJSRuntime(), aResult) { } diff --git a/dom/base/ScriptSettings.cpp b/dom/base/ScriptSettings.cpp index 235d330af082..ff53a7c2811e 100644 --- a/dom/base/ScriptSettings.cpp +++ b/dom/base/ScriptSettings.cpp @@ -293,6 +293,12 @@ GetJSContext() } } // namespace danger +JSRuntime* +GetJSRuntime() +{ + return CycleCollectedJSRuntime::Get()->Runtime(); +} + AutoJSAPI::AutoJSAPI() : ScriptSettingsStackEntry(nullptr, eJSAPI) , mCx(nullptr) diff --git a/dom/base/ScriptSettings.h b/dom/base/ScriptSettings.h index 9df9b4e41693..f94faed70ade 100644 --- a/dom/base/ScriptSettings.h +++ b/dom/base/ScriptSettings.h @@ -136,6 +136,8 @@ JSContext* GetJSContext(); } // namespace danger +JSRuntime* GetJSRuntime(); + class ScriptSettingsStack; class ScriptSettingsStackEntry { friend class ScriptSettingsStack; diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index 4bbf1bbb91f2..04a11b88a262 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -247,8 +247,8 @@ FindExceptionStackForConsoleReport(nsPIDOMWindowInner* win, return nullptr; } - JSContext* cx = nsContentUtils::RootingCxForThread(); - JS::RootedObject exceptionObject(cx, &exceptionValue.toObject()); + JSRuntime* rt = GetJSRuntime(); + JS::RootedObject exceptionObject(rt, &exceptionValue.toObject()); JSObject* stackObject = ExceptionStackOrNull(exceptionObject); if (stackObject) { return stackObject; @@ -269,7 +269,7 @@ FindExceptionStackForConsoleReport(nsPIDOMWindowInner* win, if (!stack) { return nullptr; } - JS::RootedValue value(cx); + JS::RootedValue value(rt); stack->GetNativeSavedFrame(&value); if (value.isObject()) { return &value.toObject(); diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index 938184e929d4..4fce62c7ec58 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -2350,7 +2350,7 @@ ConstructJSImplementation(const char* aContractId, do_QueryInterface(implISupports); nsCOMPtr window = do_QueryInterface(aGlobal); if (gpi) { - JS::Rooted initReturn(nsContentUtils::RootingCxForThread()); + JS::Rooted initReturn(GetJSRuntime()); rv = gpi->Init(window, &initReturn); if (NS_FAILED(rv)) { aRv.Throw(rv); diff --git a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp index 718260edbbda..e8a948e48cf9 100644 --- a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp +++ b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp @@ -751,7 +751,7 @@ BluetoothHfpManager::HandleVoiceConnectionChanged(uint32_t aClientId) mService = service; // Signal - JS::Rooted value(nsContentUtils::RootingCxForThread()); + JS::Rooted value(dom::GetJSRuntime()); voiceInfo->GetRelSignalStrength(&value); if (value.isNumber()) { mSignal = (int)ceil(value.toNumber() / 20.0); diff --git a/dom/bluetooth/bluez/BluetoothHfpManager.cpp b/dom/bluetooth/bluez/BluetoothHfpManager.cpp index 09131993db50..f7e88e2f352a 100644 --- a/dom/bluetooth/bluez/BluetoothHfpManager.cpp +++ b/dom/bluetooth/bluez/BluetoothHfpManager.cpp @@ -641,7 +641,7 @@ BluetoothHfpManager::HandleVoiceConnectionChanged(uint32_t aClientId) } UpdateCIND(CINDType::SERVICE, service); - JS::Rooted value(nsContentUtils::RootingCxForThread()); + JS::Rooted value(dom::GetJSRuntime()); voiceInfo->GetRelSignalStrength(&value); if (value.isNumber()) { uint8_t signal = ceil(value.toNumber() / 20.0); diff --git a/dom/devicestorage/nsDeviceStorage.cpp b/dom/devicestorage/nsDeviceStorage.cpp index 4efec83f4a48..ac34ab238cac 100644 --- a/dom/devicestorage/nsDeviceStorage.cpp +++ b/dom/devicestorage/nsDeviceStorage.cpp @@ -3975,8 +3975,7 @@ DeviceStorageRequestManager::Resolve(uint32_t aId, uint64_t aValue, return NS_OK; } - JS::RootedValue value(nsContentUtils::RootingCxForThread(), - JS_NumberValue((double)aValue)); + JS::RootedValue value(GetJSRuntime(), JS_NumberValue((double)aValue)); return ResolveInternal(i, value); } diff --git a/dom/events/JSEventHandler.cpp b/dom/events/JSEventHandler.cpp index 1b81c0dd939f..b6cd6f9f5f5a 100644 --- a/dom/events/JSEventHandler.cpp +++ b/dom/events/JSEventHandler.cpp @@ -154,7 +154,7 @@ JSEventHandler::HandleEvent(nsIDOMEvent* aEvent) columnNumber.Construct(); columnNumber.Value() = scriptEvent->Colno(); - error.Construct(nsContentUtils::RootingCxForThread()); + error.Construct(GetJSRuntime()); scriptEvent->GetError(&error.Value()); } else { msgOrEvent.SetAsEvent() = aEvent->InternalDOMEvent(); diff --git a/dom/xhr/XMLHttpRequestWorker.cpp b/dom/xhr/XMLHttpRequestWorker.cpp index 64e4ee8c79f8..093290a67cea 100644 --- a/dom/xhr/XMLHttpRequestWorker.cpp +++ b/dom/xhr/XMLHttpRequestWorker.cpp @@ -507,7 +507,7 @@ public: mReadyState(0), mUploadEvent(aUploadEvent), mProgressEvent(true), mLengthComputable(aLengthComputable), mUseCachedArrayBufferResponse(false), mResponseTextResult(NS_OK), mStatusResult(NS_OK), mResponseResult(NS_OK), - mScopeObj(nsContentUtils::RootingCxForThread(), aScopeObj) + mScopeObj(GetJSRuntime(), aScopeObj) { } EventRunnable(Proxy* aProxy, bool aUploadEvent, const nsString& aType, @@ -520,7 +520,7 @@ public: mUploadEvent(aUploadEvent), mProgressEvent(false), mLengthComputable(0), mUseCachedArrayBufferResponse(false), mResponseTextResult(NS_OK), mStatusResult(NS_OK), mResponseResult(NS_OK), - mScopeObj(nsContentUtils::RootingCxForThread(), aScopeObj) + mScopeObj(GetJSRuntime(), aScopeObj) { } private: diff --git a/dom/xslt/xpath/txXPCOMExtensionFunction.cpp b/dom/xslt/xpath/txXPCOMExtensionFunction.cpp index e8d8b61d8845..534b46b95eb1 100644 --- a/dom/xslt/xpath/txXPCOMExtensionFunction.cpp +++ b/dom/xslt/xpath/txXPCOMExtensionFunction.cpp @@ -18,7 +18,7 @@ #include "txXPathObjectAdaptor.h" #include "mozilla/Attributes.h" #include "mozilla/UniquePtr.h" -#include "nsContentUtils.h" +#include "mozilla/dom/ScriptSettings.h" #include "nsIClassInfo.h" #include "nsIInterfaceInfo.h" #include "js/RootingAPI.h" @@ -384,7 +384,7 @@ txXPCOMExtensionFunctionCall::evaluate(txIEvalContext* aContext, uint8_t paramCount = methodInfo->GetParamCount(); uint8_t inArgs = paramCount - 1; - JS::Rooted invokeParams(nsContentUtils::RootingCxForThread()); + JS::Rooted invokeParams(mozilla::dom::GetJSRuntime()); if (!invokeParams.get().Init(paramCount)) { return NS_ERROR_OUT_OF_MEMORY; }