diff options
author | Moonchild <moonchild@palemoon.org> | 2020-08-24 10:15:00 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2020-08-24 10:15:00 +0000 |
commit | 95e0f114e2b1eed6142ee51054f7122d520eb8fb (patch) | |
tree | 3d69d349e2e3c6977f14d9b7f6fb93e1588498ad | |
parent | a0ef1c07de288109cc358cbe3d49a33fcf26d988 (diff) | |
download | uxp-95e0f114e2b1eed6142ee51054f7122d520eb8fb.tar.gz |
Issue #618 - (async) Split out function to add async request.
-rw-r--r-- | dom/script/ScriptLoader.cpp | 53 | ||||
-rw-r--r-- | dom/script/ScriptLoader.h | 1 |
2 files changed, 31 insertions, 23 deletions
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp index 69777c2477..58f0c0bbe9 100644 --- a/dom/script/ScriptLoader.cpp +++ b/dom/script/ScriptLoader.cpp @@ -1358,17 +1358,14 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement) request->mJSVersion = version; if (aElement->GetScriptAsync()) { - request->mInAsyncList = true; + AddAsyncRequest(request); if (request->IsReadyToRun()) { - mLoadedAsyncRequests.AppendElement(request); // The script is available already. Run it ASAP when the event // loop gets a chance to spin. // KVKV TODO: Instead of processing immediately, try off-thread-parsing // it and only schedule a pending ProcessRequest if that fails. ProcessPendingRequestsAsync(); - } else { - mLoadingAsyncRequests.AppendElement(request); } return false; } @@ -1469,8 +1466,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement) modReq->mBaseURL = mDocument->GetDocBaseURI(); if (aElement->GetScriptAsync()) { - modReq->mInAsyncList = true; - mLoadingAsyncRequests.AppendElement(modReq); + AddAsyncRequest(modReq); } else { AddDeferRequest(modReq); } @@ -2418,23 +2414,6 @@ ScriptLoader::NumberOfProcessors() return mNumberOfProcessors; } -void -ScriptLoader::MaybeMoveToLoadedList(ScriptLoadRequest* aRequest) -{ - MOZ_ASSERT(aRequest->IsReadyToRun()); - - // If it's async, move it to the loaded list. aRequest->mInAsyncList really - // _should_ be in a list, but the consequences if it's not are bad enough we - // want to avoid trying to move it if it's not. - if (aRequest->mInAsyncList) { - MOZ_ASSERT(aRequest->isInList()); - if (aRequest->isInList()) { - RefPtr<ScriptLoadRequest> req = mLoadingAsyncRequests.Steal(aRequest); - mLoadedAsyncRequests.AppendElement(req); - } - } -} - nsresult ScriptLoader::PrepareLoadedRequest(ScriptLoadRequest* aRequest, nsIIncrementalStreamLoader* aLoader, @@ -2646,6 +2625,34 @@ ScriptLoader::AddDeferRequest(ScriptLoadRequest* aRequest) } } +void +ScriptLoader::AddAsyncRequest(ScriptLoadRequest* aRequest) +{ + aRequest->mInAsyncList = true; + if (aRequest->IsReadyToRun()) { + mLoadedAsyncRequests.AppendElement(aRequest); + } else { + mLoadingAsyncRequests.AppendElement(aRequest); + } +} + +void +ScriptLoader::MaybeMoveToLoadedList(ScriptLoadRequest* aRequest) +{ + MOZ_ASSERT(aRequest->IsReadyToRun()); + + // If it's async, move it to the loaded list. aRequest->mInAsyncList really + // _should_ be in a list, but the consequences if it's not are bad enough we + // want to avoid trying to move it if it's not. + if (aRequest->mInAsyncList) { + MOZ_ASSERT(aRequest->isInList()); + if (aRequest->isInList()) { + RefPtr<ScriptLoadRequest> req = mLoadingAsyncRequests.Steal(aRequest); + mLoadedAsyncRequests.AppendElement(req); + } + } +} + bool ScriptLoader::MaybeRemovedDeferRequests() { diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h index 82a8512c06..61680a3ee6 100644 --- a/dom/script/ScriptLoader.h +++ b/dom/script/ScriptLoader.h @@ -571,6 +571,7 @@ private: mozilla::Vector<char16_t> &aString); void AddDeferRequest(ScriptLoadRequest* aRequest); + void AddAsyncRequest(ScriptLoadRequest* aRequest); bool MaybeRemovedDeferRequests(); void MaybeMoveToLoadedList(ScriptLoadRequest* aRequest); |