diff options
Diffstat (limited to 'dom/script/ScriptLoader.cpp')
-rw-r--r-- | dom/script/ScriptLoader.cpp | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp index 69777c247..58f0c0bbe 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() { |