import changes from `dev' branch of rmottola/Arctic-Fox:

- pointer style (c84ff3dee)
- Bug 1188408 - Rearrange relocation overlay so we don't change object group during compacting r=terrence (4d10ea581)
- Bug 1188408 - Simplify ArenasToUpdate iteration r=terrence (ad7052d37)
- Bug 1188408 - Make incremental zeal mode exercise compacting GC too r=terrence (12e81f0a8)
- pointer style (38c45689d)
- Bug 1188408 - Udate cell pointers after updating roots at the end of compacting a zone r=terrence (83406ea37)
- Bug 1189750 - Fix JSScript::getPCCounts to return a reference instead of a copy. r=bhackett (f97f48986)
- Bug 1167409 - 1/4 - Move offThreadToken into ScriptLoadRequest r=jandem (d69712ebb)
- Bug 1167409 - 2/4 - Factor processRequest and off thread parsing into separate functions. r=jandem (efc29867b)
- Bug 1156059 Part 1: Ignore META REFRESH when document is sandboxed from automatic features. r=bz (5cb139529)
- Bug 1156059 Part 2: Ensure that META REFRESH is blocked by iframe sandbox. r=bz (4f5812bca)
- No bug - Strip EOL whitespace from nsIDocument.h (1815b3a55)
This commit is contained in:
2021-06-08 14:45:24 +08:00
parent 94bf55fcd1
commit ece7c7b7fe
20 changed files with 321 additions and 230 deletions
+32 -20
View File
@@ -811,9 +811,9 @@ public:
} /* anonymous namespace */
nsresult
nsScriptLoader::ProcessOffThreadRequest(nsScriptLoadRequest* aRequest, void **aOffThreadToken)
nsScriptLoader::ProcessOffThreadRequest(nsScriptLoadRequest* aRequest)
{
nsresult rv = ProcessRequest(aRequest, aOffThreadToken);
nsresult rv = ProcessRequest(aRequest);
mDocument->UnblockOnload(false);
return rv;
}
@@ -845,14 +845,8 @@ NotifyOffThreadScriptLoadCompletedRunnable::Run()
nsRefPtr<nsScriptLoadRequest> request = mRequest.forget();
nsRefPtr<nsScriptLoader> loader = mLoader.forget();
nsresult rv = loader->ProcessOffThreadRequest(request, &mToken);
if (mToken) {
// The result of the off thread parse was not actually needed to process
// the request (disappearing window, some other error, ...). Finish the
// request to avoid leaks in the JS engine.
JS::FinishOffThreadScript(nullptr, xpc::GetJSRuntime(), mToken);
}
request->mOffThreadToken = mToken;
nsresult rv = loader->ProcessOffThreadRequest(request);
return rv;
}
@@ -909,17 +903,27 @@ nsScriptLoader::AttemptAsyncScriptParse(nsScriptLoadRequest* aRequest)
}
nsresult
nsScriptLoader::ProcessRequest(nsScriptLoadRequest* aRequest, void **aOffThreadToken)
nsScriptLoader::ParseOffThreadOrProcessRequest(nsScriptLoadRequest* aRequest)
{
NS_ASSERTION(nsContentUtils::IsSafeToRunScript(),
"Processing requests when running scripts is unsafe.");
NS_ASSERTION(!aRequest->mOffThreadToken,
"Candidate for off-thread parsing is already parsed off-thread");
if (!aOffThreadToken) {
nsresult rv = AttemptAsyncScriptParse(aRequest);
if (rv != NS_ERROR_FAILURE)
return rv;
nsresult rv = AttemptAsyncScriptParse(aRequest);
if (rv != NS_ERROR_FAILURE) {
return rv;
}
return ProcessRequest(aRequest);
}
nsresult
nsScriptLoader::ProcessRequest(nsScriptLoadRequest* aRequest)
{
NS_ASSERTION(nsContentUtils::IsSafeToRunScript(),
"Processing requests when running scripts is unsafe.");
NS_ENSURE_ARG(aRequest);
nsAutoString textData;
const char16_t* scriptBuf = nullptr;
@@ -987,7 +991,7 @@ nsScriptLoader::ProcessRequest(nsScriptLoadRequest* aRequest, void **aOffThreadT
doc->BeginEvaluatingExternalScript();
}
aRequest->mElement->BeginEvaluating();
rv = EvaluateScript(aRequest, srcBuf, aOffThreadToken);
rv = EvaluateScript(aRequest, srcBuf);
aRequest->mElement->EndEvaluating();
if (doc) {
doc->EndEvaluatingExternalScript();
@@ -1005,6 +1009,15 @@ nsScriptLoader::ProcessRequest(nsScriptLoadRequest* aRequest, void **aOffThreadT
mCurrentParserInsertedScript = oldParserInsertedScript;
}
if (aRequest->mOffThreadToken) {
// The request was parsed off-main-thread, but the result of the off
// thread parse was not actually needed to process the request
// (disappearing window, some other error, ...). Finish the
// request to avoid leaks in the JS engine.
JS::FinishOffThreadScript(nullptr, xpc::GetJSRuntime(), aRequest->mOffThreadToken);
aRequest->mOffThreadToken = nullptr;
}
return rv;
}
@@ -1095,8 +1108,7 @@ nsScriptLoader::FillCompileOptionsForRequest(const AutoJSAPI &jsapi,
nsresult
nsScriptLoader::EvaluateScript(nsScriptLoadRequest* aRequest,
JS::SourceBufferHolder& aSrcBuf,
void** aOffThreadToken)
JS::SourceBufferHolder& aSrcBuf)
{
// We need a document to evaluate scripts.
if (!mDocument) {
@@ -1161,7 +1173,7 @@ nsScriptLoader::EvaluateScript(nsScriptLoadRequest* aRequest,
JS::CompileOptions options(entryScript.cx());
FillCompileOptionsForRequest(entryScript, aRequest, global, &options);
rv = nsJSUtils::EvaluateString(entryScript.cx(), aSrcBuf, global, options,
aOffThreadToken);
aRequest->OffThreadTokenPtr());
}
context->SetProcessingScriptTag(oldProcessingScriptTag);
@@ -1201,7 +1213,7 @@ nsScriptLoader::ProcessPendingRequests()
while (mEnabled && !mLoadedAsyncRequests.isEmpty()) {
request = mLoadedAsyncRequests.StealFirst();
ProcessRequest(request);
ParseOffThreadOrProcessRequest(request);
}
while (mEnabled && !mNonAsyncExternalScriptInsertedRequests.isEmpty() &&