Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: Source/core/html/parser/HTMLScriptRunner.cpp

Issue 551293002: Refactor PendingScript / HTMLScriptRunner. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/parser/HTMLScriptRunner.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/parser/HTMLScriptRunner.cpp
diff --git a/Source/core/html/parser/HTMLScriptRunner.cpp b/Source/core/html/parser/HTMLScriptRunner.cpp
index 1053f534bcae81ffd709c7127deeed31369d96ba..7289e3e317adaab8afd303d1ff68cdfe65bd5c2b 100644
--- a/Source/core/html/parser/HTMLScriptRunner.cpp
+++ b/Source/core/html/parser/HTMLScriptRunner.cpp
@@ -72,13 +72,11 @@ void HTMLScriptRunner::detach()
if (!m_document)
return;
- if (m_parserBlockingScript.resource() && m_parserBlockingScript.watchingForLoad())
- stopWatchingForLoad(m_parserBlockingScript);
+ m_parserBlockingScript.stopWatchingForLoad(this);
while (!m_scriptsToExecuteAfterParsing.isEmpty()) {
PendingScript pendingScript = m_scriptsToExecuteAfterParsing.takeFirst();
- if (pendingScript.resource() && pendingScript.watchingForLoad())
- stopWatchingForLoad(pendingScript);
+ pendingScript.stopWatchingForLoad(this);
}
m_document = nullptr;
}
@@ -103,17 +101,6 @@ inline PassRefPtrWillBeRawPtr<Event> createScriptLoadEvent()
return Event::create(EventTypeNames::load);
}
-ScriptSourceCode HTMLScriptRunner::sourceFromPendingScript(const PendingScript& script, bool& errorOccurred) const
-{
- if (script.resource()) {
- errorOccurred = script.resource()->errorOccurred();
- ASSERT(script.resource()->isLoaded());
- return ScriptSourceCode(script.resource());
- }
- errorOccurred = false;
- return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingPosition());
-}
-
bool HTMLScriptRunner::isPendingScriptReady(const PendingScript& script)
{
m_hasScriptsWaitingForResources = !m_document->isScriptExecutionReady();
@@ -138,11 +125,10 @@ void HTMLScriptRunner::executeParsingBlockingScript()
void HTMLScriptRunner::executePendingScriptAndDispatchEvent(PendingScript& pendingScript, PendingScriptType pendingScriptType)
{
bool errorOccurred = false;
- ScriptSourceCode sourceCode = sourceFromPendingScript(pendingScript, errorOccurred);
+ ScriptSourceCode sourceCode = pendingScript.getSource(documentURLForScriptExecution(m_document), errorOccurred);
// Stop watching loads before executeScript to prevent recursion if the script reloads itself.
- if (pendingScript.resource() && pendingScript.watchingForLoad())
- stopWatchingForLoad(pendingScript);
+ pendingScript.stopWatchingForLoad(this);
if (!isExecutingScript()) {
Microtask::performCheckpoint();
@@ -176,24 +162,6 @@ void HTMLScriptRunner::executePendingScriptAndDispatchEvent(PendingScript& pendi
ASSERT(!isExecutingScript());
}
-void HTMLScriptRunner::watchForLoad(PendingScript& pendingScript)
-{
- ASSERT(!pendingScript.watchingForLoad());
- ASSERT(!pendingScript.resource()->isLoaded());
- // addClient() will call notifyFinished() if the load is complete.
- // Callers do not expect to be re-entered from this call, so they
- // should not become a client of an already-loaded Resource.
- pendingScript.resource()->addClient(this);
- pendingScript.setWatchingForLoad(true);
-}
-
-void HTMLScriptRunner::stopWatchingForLoad(PendingScript& pendingScript)
-{
- ASSERT(pendingScript.watchingForLoad());
- pendingScript.resource()->removeClient(this);
- pendingScript.setWatchingForLoad(false);
-}
-
void HTMLScriptRunner::notifyFinished(Resource* cachedResource)
{
m_host->notifyScriptLoaded(cachedResource);
@@ -260,7 +228,7 @@ bool HTMLScriptRunner::executeScriptsWaitingForParsing()
ASSERT(!hasParserBlockingScript());
ASSERT(m_scriptsToExecuteAfterParsing.first().resource());
if (!m_scriptsToExecuteAfterParsing.first().resource()->isLoaded()) {
- watchForLoad(m_scriptsToExecuteAfterParsing.first());
+ m_scriptsToExecuteAfterParsing.first().watchForLoad(this);
return false;
}
PendingScript first = m_scriptsToExecuteAfterParsing.takeFirst();
@@ -284,7 +252,7 @@ void HTMLScriptRunner::requestParsingBlockingScript(Element* element)
// in the cache. Callers will attempt to run the m_parserBlockingScript
// if possible before returning control to the parser.
if (!m_parserBlockingScript.resource()->isLoaded())
- watchForLoad(m_parserBlockingScript);
+ m_parserBlockingScript.watchForLoad(this);
}
void HTMLScriptRunner::requestDeferredScript(Element* element)
« no previous file with comments | « Source/core/html/parser/HTMLScriptRunner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698