mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 13:07:52 +00:00
Bug 1426440 - Fix processing of non-parser-generated module scripts r=smaug
This commit is contained in:
parent
09b342610e
commit
42419122ec
@ -845,9 +845,28 @@ ScriptLoader::CheckModuleDependenciesLoaded(ModuleLoadRequest* aRequest)
|
|||||||
LOG(("ScriptLoadRequest (%p): all ok", 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
|
void
|
||||||
ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
|
ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(aRequest->IsReadyToRun());
|
||||||
|
|
||||||
if (aRequest->IsTopLevel()) {
|
if (aRequest->IsTopLevel()) {
|
||||||
ModuleScript* moduleScript = aRequest->mModuleScript;
|
ModuleScript* moduleScript = aRequest->mModuleScript;
|
||||||
if (moduleScript && !moduleScript->HasErrorToRethrow()) {
|
if (moduleScript && !moduleScript->HasErrorToRethrow()) {
|
||||||
@ -855,8 +874,17 @@ ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
|
|||||||
aRequest->mModuleScript = nullptr;
|
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) {
|
if (aRequest->mWasCompiledOMT) {
|
||||||
@ -1165,23 +1193,6 @@ ScriptLoader::PreloadURIComparator::Equals(const PreloadInfo& aPi,
|
|||||||
same;
|
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
|
* Returns ValidJSVersion::Valid if aVersionStr is a string of the form
|
||||||
* '1.n', n = 0, ..., 8, and ValidJSVersion::Invalid for other strings.
|
* '1.n', n = 0, ..., 8, and ValidJSVersion::Invalid for other strings.
|
||||||
@ -1583,12 +1594,14 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement* aElement)
|
|||||||
if (request->IsModuleRequest()) {
|
if (request->IsModuleRequest()) {
|
||||||
ModuleLoadRequest* modReq = request->AsModuleRequest();
|
ModuleLoadRequest* modReq = request->AsModuleRequest();
|
||||||
modReq->mBaseURL = mDocument->GetDocBaseURI();
|
modReq->mBaseURL = mDocument->GetDocBaseURI();
|
||||||
|
modReq->mIsAsync = aElement->GetScriptAsync();
|
||||||
|
|
||||||
if (aElement->GetScriptAsync()) {
|
if (aElement->GetParserCreated() != NOT_FROM_PARSER) {
|
||||||
modReq->mIsAsync = true;
|
if (modReq->mIsAsync) {
|
||||||
mLoadingAsyncRequests.AppendElement(modReq);
|
mLoadingAsyncRequests.AppendElement(modReq);
|
||||||
} else {
|
} else {
|
||||||
AddDeferRequest(modReq);
|
AddDeferRequest(modReq);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult rv = ProcessFetchedModuleSource(modReq);
|
nsresult rv = ProcessFetchedModuleSource(modReq);
|
||||||
@ -1612,7 +1625,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement* aElement)
|
|||||||
NS_ASSERTION(!nsContentUtils::IsSafeToRunScript(),
|
NS_ASSERTION(!nsContentUtils::IsSafeToRunScript(),
|
||||||
"A script-inserted script is inserted without an update batch?");
|
"A script-inserted script is inserted without an update batch?");
|
||||||
nsContentUtils::AddScriptRunner(new ScriptRequestProcessor(this,
|
nsContentUtils::AddScriptRunner(new ScriptRequestProcessor(this,
|
||||||
request));
|
request));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (aElement->GetParserCreated() == FROM_PARSER_NETWORK &&
|
if (aElement->GetParserCreated() == FROM_PARSER_NETWORK &&
|
||||||
|
@ -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
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user