diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp index a151d9b05f26..ebbf13c711da 100644 --- a/dom/script/ScriptLoader.cpp +++ b/dom/script/ScriptLoader.cpp @@ -172,7 +172,7 @@ NS_IMPL_CYCLE_COLLECTION(ScriptLoader, mNonAsyncExternalScriptInsertedRequests, mXSLTRequests, mParserBlockingRequest, mBytecodeEncodingQueue, mPreloads, mPendingChildLoaders, mModuleLoader, - mWebExtModuleLoaders) + mWebExtModuleLoaders, mShadowRealmModuleLoaders) NS_IMPL_CYCLE_COLLECTING_ADDREF(ScriptLoader) NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptLoader) @@ -279,6 +279,13 @@ void ScriptLoader::RegisterContentScriptModuleLoader(ModuleLoader* aLoader) { mWebExtModuleLoaders.AppendElement(aLoader); } +void ScriptLoader::RegisterShadowRealmModuleLoader(ModuleLoader* aLoader) { + MOZ_ASSERT(aLoader); + MOZ_ASSERT(aLoader->GetScriptLoader() == this); + + mShadowRealmModuleLoaders.AppendElement(aLoader); +} + // Collect telemtry data about the cache information, and the kind of source // which are being loaded, and where it is being loaded from. static void CollectScriptTelemetry(ScriptLoadRequest* aRequest) { @@ -2684,6 +2691,12 @@ bool ScriptLoader::HasPendingDynamicImports() const { } } + for (ModuleLoader* loader : mShadowRealmModuleLoaders) { + if (loader->HasPendingDynamicImports()) { + return true; + } + } + return false; } @@ -3522,6 +3535,10 @@ void ScriptLoader::ParsingComplete(bool aTerminated) { loader->CancelAndClearDynamicImports(); } + for (ModuleLoader* loader : mShadowRealmModuleLoaders) { + loader->CancelAndClearDynamicImports(); + } + if (mParserBlockingRequest) { mParserBlockingRequest->Cancel(); mParserBlockingRequest = nullptr; diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h index 6205c0ed78aa..561c3e04ffe6 100644 --- a/dom/script/ScriptLoader.h +++ b/dom/script/ScriptLoader.h @@ -210,6 +210,7 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface { ModuleLoader* GetModuleLoader() { return mModuleLoader; } void RegisterContentScriptModuleLoader(ModuleLoader* aLoader); + void RegisterShadowRealmModuleLoader(ModuleLoader* aLoader); /** * Check whether to speculatively OMT parse scripts as soon as @@ -740,6 +741,7 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface { RefPtr mModuleLoader; nsTArray> mWebExtModuleLoaders; + nsTArray> mShadowRealmModuleLoaders; // Logging public: