mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 05:37:11 +00:00
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:
+32
-20
@@ -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() &&
|
||||
|
||||
Reference in New Issue
Block a user