Bug 1426440 - Fix processing of non-parser-generated module scripts r=smaug

This commit is contained in:
Jon Coppeard 2018-01-03 13:07:58 +00:00
parent 09b342610e
commit 42419122ec
2 changed files with 38 additions and 30 deletions

View File

@ -845,9 +845,28 @@ ScriptLoader::CheckModuleDependenciesLoaded(ModuleLoadRequest* aRequest)
LOG(("ScriptLoadRequest (%p): all ok", aRequest));
}
class ScriptRequestProcessor : public Runnable
{
private:
RefPtr<ScriptLoader> mLoader;
RefPtr<ScriptLoadRequest> mRequest;
public:
ScriptRequestProcessor(ScriptLoader* aLoader, ScriptLoadRequest* aRequest)
: Runnable("dom::ScriptRequestProcessor")
, mLoader(aLoader)
, mRequest(aRequest)
{}
NS_IMETHOD Run() override
{
return mLoader->ProcessRequest(mRequest);
}
};
void
ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
{
MOZ_ASSERT(aRequest->IsReadyToRun());
if (aRequest->IsTopLevel()) {
ModuleScript* moduleScript = aRequest->mModuleScript;
if (moduleScript && !moduleScript->HasErrorToRethrow()) {
@ -855,8 +874,17 @@ ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
aRequest->mModuleScript = nullptr;
}
}
MaybeMoveToLoadedList(aRequest);
ProcessPendingRequests();
if (aRequest->mIsInline &&
aRequest->mElement->GetParserCreated() == NOT_FROM_PARSER)
{
MOZ_ASSERT(!aRequest->isInList());
nsContentUtils::AddScriptRunner(
new ScriptRequestProcessor(this, aRequest));
} else {
MaybeMoveToLoadedList(aRequest);
ProcessPendingRequests();
}
}
if (aRequest->mWasCompiledOMT) {
@ -1165,23 +1193,6 @@ ScriptLoader::PreloadURIComparator::Equals(const PreloadInfo& aPi,
same;
}
class ScriptRequestProcessor : public Runnable
{
private:
RefPtr<ScriptLoader> mLoader;
RefPtr<ScriptLoadRequest> mRequest;
public:
ScriptRequestProcessor(ScriptLoader* aLoader, ScriptLoadRequest* aRequest)
: Runnable("dom::ScriptRequestProcessor")
, mLoader(aLoader)
, mRequest(aRequest)
{}
NS_IMETHOD Run() override
{
return mLoader->ProcessRequest(mRequest);
}
};
/**
* Returns ValidJSVersion::Valid if aVersionStr is a string of the form
* '1.n', n = 0, ..., 8, and ValidJSVersion::Invalid for other strings.
@ -1583,12 +1594,14 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement* aElement)
if (request->IsModuleRequest()) {
ModuleLoadRequest* modReq = request->AsModuleRequest();
modReq->mBaseURL = mDocument->GetDocBaseURI();
modReq->mIsAsync = aElement->GetScriptAsync();
if (aElement->GetScriptAsync()) {
modReq->mIsAsync = true;
mLoadingAsyncRequests.AppendElement(modReq);
} else {
AddDeferRequest(modReq);
if (aElement->GetParserCreated() != NOT_FROM_PARSER) {
if (modReq->mIsAsync) {
mLoadingAsyncRequests.AppendElement(modReq);
} else {
AddDeferRequest(modReq);
}
}
nsresult rv = ProcessFetchedModuleSource(modReq);
@ -1612,7 +1625,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement* aElement)
NS_ASSERTION(!nsContentUtils::IsSafeToRunScript(),
"A script-inserted script is inserted without an update batch?");
nsContentUtils::AddScriptRunner(new ScriptRequestProcessor(this,
request));
request));
return false;
}
if (aElement->GetParserCreated() == FROM_PARSER_NETWORK &&

View File

@ -1,5 +0,0 @@
[instantiation-error-8.html]
expected: TIMEOUT
[Instantiate attempt on a tree w/ previously instantiate-failed tree as a sub-tree shouldn't crash.]
expected: TIMEOUT