summaryrefslogtreecommitdiffstats
path: root/dom/script/ModuleLoadRequest.cpp
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-07-04 16:28:30 +0000
committerMoonchild <moonchild@palemoon.org>2020-07-04 16:28:30 +0000
commit66bf3a2279891ed621738fe988359758df881e41 (patch)
treeb68371b08e2f8a18e0c3e39fecd92991749e7f0a /dom/script/ModuleLoadRequest.cpp
parent9b60e71109e9df98b5ecc7ffcc58284758fc8b82 (diff)
downloadUXP-66bf3a2279891ed621738fe988359758df881e41.tar
UXP-66bf3a2279891ed621738fe988359758df881e41.tar.gz
UXP-66bf3a2279891ed621738fe988359758df881e41.tar.lz
UXP-66bf3a2279891ed621738fe988359758df881e41.tar.xz
UXP-66bf3a2279891ed621738fe988359758df881e41.zip
Issue #618 - Further align error handling for module scripts with the spec
Ref: BZ 1388728
Diffstat (limited to 'dom/script/ModuleLoadRequest.cpp')
-rw-r--r--dom/script/ModuleLoadRequest.cpp42
1 files changed, 38 insertions, 4 deletions
diff --git a/dom/script/ModuleLoadRequest.cpp b/dom/script/ModuleLoadRequest.cpp
index 8871dcdab..d62214304 100644
--- a/dom/script/ModuleLoadRequest.cpp
+++ b/dom/script/ModuleLoadRequest.cpp
@@ -43,10 +43,16 @@ void ModuleLoadRequest::Cancel()
ScriptLoadRequest::Cancel();
mModuleScript = nullptr;
mProgress = ScriptLoadRequest::Progress::Ready;
+ CancelImports();
+ mReady.RejectIfExists(NS_ERROR_DOM_ABORT_ERR, __func__);
+}
+
+void
+ModuleLoadRequest::CancelImports()
+{
for (size_t i = 0; i < mImports.Length(); i++) {
mImports[i]->Cancel();
}
- mReady.RejectIfExists(NS_ERROR_FAILURE, __func__);
}
void
@@ -77,25 +83,53 @@ ModuleLoadRequest::ModuleLoaded()
// been loaded.
mModuleScript = mLoader->GetFetchedModule(mURI);
+ if (!mModuleScript || mModuleScript->IsErrored()) {
+ ModuleErrored();
+ return;
+ }
+
mLoader->StartFetchingModuleDependencies(this);
}
void
+ModuleLoadRequest::ModuleErrored()
+{
+ mLoader->CheckModuleDependenciesLoaded(this);
+ MOZ_ASSERT(!mModuleScript || mModuleScript->IsErrored());
+
+ CancelImports();
+ SetReady();
+ LoadFinished();
+}
+
+void
ModuleLoadRequest::DependenciesLoaded()
{
// The module and all of its dependencies have been successfully fetched and
// compiled.
+ MOZ_ASSERT(mModuleScript);
+
+ mLoader->CheckModuleDependenciesLoaded(this);
SetReady();
- mLoader->ProcessLoadedModuleTree(this);
- mLoader = nullptr;
- mParent = nullptr;
+ LoadFinished();
}
void
ModuleLoadRequest::LoadFailed()
{
+ // We failed to load the source text or an error occurred unrelated to the
+ // content of the module (e.g. OOM).
+
+ MOZ_ASSERT(!mModuleScript);
+
Cancel();
+ LoadFinished();
+}
+
+void
+ModuleLoadRequest::LoadFinished()
+{
mLoader->ProcessLoadedModuleTree(this);
mLoader = nullptr;
mParent = nullptr;