tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit c4ba35eab1ff9806781777aad6bf54d8c9179020
parent 01ff6257fd03bec96f1a9060647d0eaf77aea522
Author: Yoshi Cheng-Hao Huang <allstars.chh@gmail.com>
Date:   Fri,  3 Oct 2025 20:53:28 +0000

Bug 1968890 - Part 3: Call ModuleErrored in OnFetchFailed. r=jonco

Update the state of the ModuleLoadRequest in OnFetchFailed.

Differential Revision: https://phabricator.services.mozilla.com/D264805

Diffstat:
Mjs/loader/ModuleLoadRequest.cpp | 4----
Mjs/loader/ModuleLoaderBase.cpp | 16++++++++++------
2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/js/loader/ModuleLoadRequest.cpp b/js/loader/ModuleLoadRequest.cpp @@ -115,10 +115,6 @@ void ModuleLoadRequest::ModuleLoaded() { MOZ_ASSERT(IsFetching() || IsPendingFetchingError()); mModuleScript = mLoader->GetFetchedModule(ModuleMapKey(mURI, mModuleType)); - if (IsErrored()) { - ModuleErrored(); - return; - } } void ModuleLoadRequest::LoadFailed() { diff --git a/js/loader/ModuleLoaderBase.cpp b/js/loader/ModuleLoaderBase.cpp @@ -281,7 +281,6 @@ bool ModuleLoaderBase::HostLoadImportedModule(JSContext* aCx, JS_ReportErrorNumberASCII(aCx, js::GetErrorMessage, nullptr, JSMSG_DYNAMIC_IMPORT_FAILED, url.get()); } else { - request->LoadFailed(); loader->OnFetchFailed(request); return true; } @@ -698,8 +697,6 @@ void ModuleLoaderBase::ResumeWaitingRequest(ModuleLoadRequest* aRequest, bool aSuccess) { if (aSuccess) { aRequest->ModuleLoaded(); - } else { - aRequest->LoadFailed(); } if (!aRequest->IsErrored()) { @@ -823,6 +820,7 @@ void ModuleLoaderBase::OnFetchFailed(ModuleLoadRequest* aRequest) { LOG(("ScriptLoadRequest (%p): found parse error", aRequest)); aRequest->mModuleScript->SetErrorToRethrow(parseError); } + DispatchModuleErrored(aRequest); return; } @@ -862,6 +860,7 @@ void ModuleLoaderBase::OnFetchFailed(ModuleLoadRequest* aRequest) { FinishLoadingImportedModuleFailed(cx, payload, error); } + aRequest->ModuleErrored(); aRequest->ClearImport(); return; } @@ -881,6 +880,7 @@ void ModuleLoaderBase::OnFetchFailed(ModuleLoadRequest* aRequest) { // Step 14.5. Perform FinishLoadingImportedModule(referrer, moduleRequest, // payload, completion). FinishLoadingImportedModuleFailed(cx, payload, parseError); + aRequest->ModuleErrored(); aRequest->ClearImport(); } @@ -898,7 +898,13 @@ class ModuleErroredRunnable : public MicroTaskRunnable { }; void ModuleLoaderBase::DispatchModuleErrored(ModuleLoadRequest* aRequest) { - if (aRequest->HasScriptLoadContext()) { + if (aRequest->HasScriptLoadContext() && + aRequest->GetScriptLoadContext()->mIsInline) { + // https://html.spec.whatwg.org/#prepare-the-script-element + // Step 32. If el does not have a src content attribute: + // 2. "module".3.1 + // Queue an element task on the networking task source given el to + // perform the following steps: CycleCollectedJSContext* context = CycleCollectedJSContext::Get(); RefPtr<ModuleErroredRunnable> runnable = new ModuleErroredRunnable(aRequest); @@ -998,7 +1004,6 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) { } moduleScript->SetParseError(error); - DispatchModuleErrored(aRequest); return NS_OK; } @@ -1014,7 +1019,6 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) { aRequest->mModuleScript = nullptr; return rv; } - DispatchModuleErrored(aRequest); return NS_OK; } }