summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/loader/mozJSModuleLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'js/xpconnect/loader/mozJSModuleLoader.cpp')
-rw-r--r--js/xpconnect/loader/mozJSModuleLoader.cpp50
1 files changed, 28 insertions, 22 deletions
diff --git a/js/xpconnect/loader/mozJSModuleLoader.cpp b/js/xpconnect/loader/mozJSModuleLoader.cpp
index f20306f0a0..017ac32b3b 100644
--- a/js/xpconnect/loader/mozJSModuleLoader.cpp
+++ b/js/xpconnect/loader/mozJSModuleLoader.cpp
@@ -454,6 +454,12 @@ void mozJSModuleLoader::InitStatics() {
MOZ_ASSERT(!sSelf);
sSelf = new mozJSModuleLoader();
RegisterWeakMemoryReporter(sSelf);
+
+ dom::AutoJSAPI jsapi;
+ jsapi.Init();
+ JSContext* cx = jsapi.cx();
+ sSelf->InitSharedGlobal(cx);
+
NonSharedGlobalSyncModuleLoaderScope::InitStatics();
}
@@ -486,12 +492,16 @@ void mozJSModuleLoader::ShutdownLoaders() {
}
}
-mozJSModuleLoader* mozJSModuleLoader::GetOrCreateDevToolsLoader() {
+mozJSModuleLoader* mozJSModuleLoader::GetOrCreateDevToolsLoader(
+ JSContext* aCx) {
if (sDevToolsLoader) {
return sDevToolsLoader;
}
sDevToolsLoader = new mozJSModuleLoader();
RegisterWeakMemoryReporter(sDevToolsLoader);
+
+ sDevToolsLoader->InitSharedGlobal(aCx);
+
return sDevToolsLoader;
}
@@ -682,26 +692,22 @@ void mozJSModuleLoader::CreateLoaderGlobal(JSContext* aCx,
aGlobal.set(global);
}
-JSObject* mozJSModuleLoader::GetSharedGlobal(JSContext* aCx) {
- if (!mLoaderGlobal) {
- JS::RootedObject globalObj(aCx);
+void mozJSModuleLoader::InitSharedGlobal(JSContext* aCx) {
+ JS::RootedObject globalObj(aCx);
- CreateLoaderGlobal(
- aCx, IsDevToolsLoader() ? "DevTools global"_ns : "shared JSM global"_ns,
- &globalObj);
+ CreateLoaderGlobal(
+ aCx, IsDevToolsLoader() ? "DevTools global"_ns : "shared JSM global"_ns,
+ &globalObj);
- // If we fail to create a module global this early, we're not going to
- // get very far, so just bail out now.
- MOZ_RELEASE_ASSERT(globalObj);
- mLoaderGlobal = globalObj;
-
- // AutoEntryScript required to invoke debugger hook, which is a
- // Gecko-specific concept at present.
- dom::AutoEntryScript aes(globalObj, "module loader report global");
- JS_FireOnNewGlobalObject(aes.cx(), globalObj);
- }
+ // If we fail to create a module global this early, we're not going to
+ // get very far, so just bail out now.
+ MOZ_RELEASE_ASSERT(globalObj);
+ mLoaderGlobal = globalObj;
- return mLoaderGlobal;
+ // AutoEntryScript required to invoke debugger hook, which is a
+ // Gecko-specific concept at present.
+ dom::AutoEntryScript aes(globalObj, "module loader report global");
+ JS_FireOnNewGlobalObject(aes.cx(), globalObj);
}
// Read script file on the main thread and pass it back to worker.
@@ -970,8 +976,8 @@ JSObject* mozJSModuleLoader::PrepareObjectForLocation(JSContext* aCx,
nsIFile* aModuleFile,
nsIURI* aURI,
bool aRealFile) {
- RootedObject globalObj(aCx, GetSharedGlobal(aCx));
- NS_ENSURE_TRUE(globalObj, nullptr);
+ RootedObject globalObj(aCx, GetSharedGlobal());
+ MOZ_ASSERT(globalObj);
JSAutoRealm ar(aCx, globalObj);
// |thisObj| is the object we set properties on for a particular .jsm.
@@ -2018,8 +2024,8 @@ nsresult mozJSModuleLoader::ImportESModule(
MarkerInnerWindowIdFromJSContext(aCx)),
Substring(aLocation, 0, std::min(size_t(128), aLocation.Length())));
- RootedObject globalObj(aCx, GetSharedGlobal(aCx));
- NS_ENSURE_TRUE(globalObj, NS_ERROR_FAILURE);
+ RootedObject globalObj(aCx, GetSharedGlobal());
+ MOZ_ASSERT(globalObj);
MOZ_ASSERT_IF(NS_IsMainThread(),
xpc::Scriptability::Get(globalObj).Allowed());