1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-26 23:18:26 +00:00

Issue #618 - Handle errors for inline module scripts and ensure we update the

module map after fetch errors.
This commit is contained in:
Jon Coppeard
2020-08-22 10:13:37 +00:00
committed by Roy Tam
parent 6c7ac2b844
commit 93d4766c01
+18 -12
View File
@@ -486,8 +486,6 @@ ScriptLoader::ProcessFetchedModuleSource(ModuleLoadRequest* aRequest)
nsresult rv = CreateModuleScript(aRequest);
MOZ_ASSERT(NS_FAILED(rv) == !aRequest->mModuleScript);
SetModuleFetchFinishedAndResumeWaitingRequests(aRequest, rv);
free(aRequest->mScriptTextBuf);
aRequest->mScriptTextBuf = nullptr;
aRequest->mScriptTextLength = 0;
@@ -497,6 +495,10 @@ ScriptLoader::ProcessFetchedModuleSource(ModuleLoadRequest* aRequest)
return rv;
}
if (!aRequest->mIsInline) {
SetModuleFetchFinishedAndResumeWaitingRequests(aRequest, rv);
}
if (!aRequest->mModuleScript->HasParseError()) {
StartFetchingModuleDependencies(aRequest);
}
@@ -1457,20 +1459,19 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement)
if (request->IsModuleRequest()) {
ModuleLoadRequest* modReq = request->AsModuleRequest();
modReq->mBaseURL = mDocument->GetDocBaseURI();
rv = CreateModuleScript(modReq);
MOZ_ASSERT(NS_FAILED(rv) == !modReq->mModuleScript);
if (NS_FAILED(rv)) {
modReq->LoadFailed();
return false;
}
if (aElement->GetScriptAsync()) {
mLoadingAsyncRequests.AppendElement(request);
modReq->mIsAsync = true;
mLoadingAsyncRequests.AppendElement(modReq);
} else {
AddDeferRequest(request);
AddDeferRequest(modReq);
}
if (!modReq->mModuleScript->HasParseError()) {
StartFetchingModuleDependencies(modReq);
nsresult rv = ProcessFetchedModuleSource(modReq);
if (NS_FAILED(rv)) {
HandleLoadError(modReq, rv);
}
return false;
}
request->mProgress = ScriptLoadRequest::Progress::Ready;
@@ -2324,6 +2325,11 @@ ScriptLoader::HandleLoadError(ScriptLoadRequest *aRequest, nsresult aResult) {
mDocument->AddBlockedTrackingNode(cont);
}
if (aRequest->IsModuleRequest() && !aRequest->mIsInline) {
auto request = aRequest->AsModuleRequest();
SetModuleFetchFinishedAndResumeWaitingRequests(request, aResult);
}
if (aRequest->mIsDefer) {
MOZ_ASSERT_IF(aRequest->IsModuleRequest(),
aRequest->AsModuleRequest()->IsTopLevel());