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:
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;
}
}