From 498b1ab0c8db07784badbd2148f372027ef8cc27 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Wed, 8 Jul 2020 12:58:30 +0000 Subject: Issue #618 - Align error handling for module scripts with the spec (again) This updates module implementation to match spec regarding handling of instantiation errors, after it was changed yet again, this time to not remember instantiation errors, but instead immediately rethrow applicable ones. Ref: BZ 1420420 --- dom/script/ModuleLoadRequest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'dom/script/ModuleLoadRequest.cpp') diff --git a/dom/script/ModuleLoadRequest.cpp b/dom/script/ModuleLoadRequest.cpp index d62214304..a12fcb162 100644 --- a/dom/script/ModuleLoadRequest.cpp +++ b/dom/script/ModuleLoadRequest.cpp @@ -83,7 +83,7 @@ ModuleLoadRequest::ModuleLoaded() // been loaded. mModuleScript = mLoader->GetFetchedModule(mURI); - if (!mModuleScript || mModuleScript->IsErrored()) { + if (!mModuleScript || mModuleScript->HasParseError()) { ModuleErrored(); return; } @@ -95,7 +95,7 @@ void ModuleLoadRequest::ModuleErrored() { mLoader->CheckModuleDependenciesLoaded(this); - MOZ_ASSERT(!mModuleScript || mModuleScript->IsErrored()); + MOZ_ASSERT(!mModuleScript || mModuleScript->HasParseError()); CancelImports(); SetReady(); -- cgit v1.2.3 From 9982c1f5cb3dfe361b9e9d21e5582a5e35d4c7fb Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Mon, 3 Aug 2020 10:44:39 -0400 Subject: Issue #618 - Keep track of which modules in a graph have been fetched using a visited set Ref: BZ 1365187 --- dom/script/ModuleLoadRequest.cpp | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'dom/script/ModuleLoadRequest.cpp') diff --git a/dom/script/ModuleLoadRequest.cpp b/dom/script/ModuleLoadRequest.cpp index a12fcb162..a75a922e2 100644 --- a/dom/script/ModuleLoadRequest.cpp +++ b/dom/script/ModuleLoadRequest.cpp @@ -17,26 +17,48 @@ NS_INTERFACE_MAP_END_INHERITING(ScriptLoadRequest) NS_IMPL_CYCLE_COLLECTION_INHERITED(ModuleLoadRequest, ScriptLoadRequest, mBaseURL, mLoader, - mParent, mModuleScript, mImports) NS_IMPL_ADDREF_INHERITED(ModuleLoadRequest, ScriptLoadRequest) NS_IMPL_RELEASE_INHERITED(ModuleLoadRequest, ScriptLoadRequest) -ModuleLoadRequest::ModuleLoadRequest(nsIScriptElement* aElement, +ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, + nsIScriptElement* aElement, uint32_t aVersion, CORSMode aCORSMode, const SRIMetadata &aIntegrity, ScriptLoader* aLoader) : ScriptLoadRequest(ScriptKind::Module, + aURI, aElement, aVersion, aCORSMode, aIntegrity), mIsTopLevel(true), - mLoader(aLoader) -{} + mLoader(aLoader), + mVisitedSet(new VisitedURLSet()) +{ + mVisitedSet->PutEntry(aURI); +} + +ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, + ModuleLoadRequest* aParent) + : ScriptLoadRequest(ScriptKind::Module, + aURI, + aParent->mElement, + aParent->mJSVersion, + aParent->mCORSMode, + aParent->mIntegrity), + mIsTopLevel(false), + mLoader(aParent->mLoader), + mVisitedSet(aParent->mVisitedSet) +{ + MOZ_ASSERT(mVisitedSet->Contains(aURI)); + + mIsInline = false; + mReferrerPolicy = aParent->mReferrerPolicy; +} void ModuleLoadRequest::Cancel() { @@ -132,8 +154,7 @@ ModuleLoadRequest::LoadFinished() { mLoader->ProcessLoadedModuleTree(this); mLoader = nullptr; - mParent = nullptr; } } // dom namespace -} // mozilla namespace \ No newline at end of file +} // mozilla namespace -- cgit v1.2.3 From 9d6e28d3d0de8ddf5e482f7938822214f4da22ba Mon Sep 17 00:00:00 2001 From: Moonchild Date: Thu, 13 Aug 2020 17:13:23 +0000 Subject: Issue #618: Pass down referrer and referrer policy when fetching modules. Because the spec says so. --- dom/script/ModuleLoadRequest.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'dom/script/ModuleLoadRequest.cpp') diff --git a/dom/script/ModuleLoadRequest.cpp b/dom/script/ModuleLoadRequest.cpp index a75a922e2..5b0e0bdba 100644 --- a/dom/script/ModuleLoadRequest.cpp +++ b/dom/script/ModuleLoadRequest.cpp @@ -28,13 +28,17 @@ ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, uint32_t aVersion, CORSMode aCORSMode, const SRIMetadata &aIntegrity, + nsIURI* aReferrer, + mozilla::net::ReferrerPolicy aReferrerPolicy, ScriptLoader* aLoader) : ScriptLoadRequest(ScriptKind::Module, aURI, aElement, aVersion, aCORSMode, - aIntegrity), + aIntegrity, + aReferrer, + aReferrerPolicy), mIsTopLevel(true), mLoader(aLoader), mVisitedSet(new VisitedURLSet()) @@ -49,7 +53,9 @@ ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, aParent->mElement, aParent->mJSVersion, aParent->mCORSMode, - aParent->mIntegrity), + aParent->mIntegrity, + aParent->mURI, + aParent->mReferrerPolicy), mIsTopLevel(false), mLoader(aParent->mLoader), mVisitedSet(aParent->mVisitedSet) @@ -57,7 +63,6 @@ ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, MOZ_ASSERT(mVisitedSet->Contains(aURI)); mIsInline = false; - mReferrerPolicy = aParent->mReferrerPolicy; } void ModuleLoadRequest::Cancel() -- cgit v1.2.3 From 702ad218b0279227000a5ca4e729260ba29bad6b Mon Sep 17 00:00:00 2001 From: Moonchild Date: Sat, 22 Aug 2020 07:16:29 +0000 Subject: Issue #618 - Integrity for descendant module scripts should be the empty string Because the spec says so. --- dom/script/ModuleLoadRequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'dom/script/ModuleLoadRequest.cpp') diff --git a/dom/script/ModuleLoadRequest.cpp b/dom/script/ModuleLoadRequest.cpp index 5b0e0bdba..746a355b5 100644 --- a/dom/script/ModuleLoadRequest.cpp +++ b/dom/script/ModuleLoadRequest.cpp @@ -53,7 +53,7 @@ ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, aParent->mElement, aParent->mJSVersion, aParent->mCORSMode, - aParent->mIntegrity, + SRIMetadata(), aParent->mURI, aParent->mReferrerPolicy), mIsTopLevel(false), -- cgit v1.2.3 From e854d58633a2c877778410393914146f7a137495 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Tue, 25 Aug 2020 05:52:40 +0000 Subject: Issue #618 - (async) Keep track of script modes in a single mode state. This simplifies handling of combinations of async/defer by assigning one and only one state to scripts. If async then always async > if defer or module then defer > otherwise blocking. --- dom/script/ModuleLoadRequest.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'dom/script/ModuleLoadRequest.cpp') diff --git a/dom/script/ModuleLoadRequest.cpp b/dom/script/ModuleLoadRequest.cpp index 746a355b5..743f30fb9 100644 --- a/dom/script/ModuleLoadRequest.cpp +++ b/dom/script/ModuleLoadRequest.cpp @@ -63,6 +63,7 @@ ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI, MOZ_ASSERT(mVisitedSet->Contains(aURI)); mIsInline = false; + mScriptMode = aParent->mScriptMode; } void ModuleLoadRequest::Cancel() -- cgit v1.2.3