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

Unified Diff: Source/core/dom/PendingScript.cpp

Issue 669603002: Reland: Refactor Script(Loader|Runner): don't access Resources all over the place... (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: test update Created 6 years, 2 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/bindings/core/v8/ScriptStreamerTest.cpp ('k') | Source/core/dom/ScriptLoader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/PendingScript.cpp
diff --git a/Source/core/dom/PendingScript.cpp b/Source/core/dom/PendingScript.cpp
index 143e6680b7c9f92eb4a9087fd54e9b2a75240e34..3bd4da82dac8021e9ad4d4d5c566bfa4bd18ff1d 100644
--- a/Source/core/dom/PendingScript.cpp
+++ b/Source/core/dom/PendingScript.cpp
@@ -40,16 +40,17 @@ PendingScript::~PendingScript()
void PendingScript::watchForLoad(ScriptResourceClient* client)
{
ASSERT(!m_watchingForLoad);
- ASSERT(!isReady());
+ // addClient() will call notifyFinished() if the load is complete. Callers
+ // who do not expect to be re-entered from this call should not call
+ // watchForLoad for a PendingScript which isReady. We also need to set
+ // m_watchingForLoad early, since addClient() can result in calling
+ // notifyFinished and further stopWatchingForLoad().
+ m_watchingForLoad = true;
if (m_streamer) {
m_streamer->addClient(client);
} else {
- // 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.
resource()->addClient(client);
}
- m_watchingForLoad = true;
}
void PendingScript::stopWatchingForLoad(ScriptResourceClient* client)
@@ -58,9 +59,7 @@ void PendingScript::stopWatchingForLoad(ScriptResourceClient* client)
return;
ASSERT(resource());
if (m_streamer) {
- m_streamer->cancel();
m_streamer->removeClient(client);
- m_streamer.clear();
} else {
resource()->removeClient(client);
}
@@ -72,6 +71,8 @@ PassRefPtrWillBeRawPtr<Element> PendingScript::releaseElementAndClear()
setScriptResource(0);
m_watchingForLoad = false;
m_startingPosition = TextPosition::belowRangePosition();
+ if (m_streamer)
+ m_streamer->cancel();
m_streamer.release();
return m_element.release();
}
« no previous file with comments | « Source/bindings/core/v8/ScriptStreamerTest.cpp ('k') | Source/core/dom/ScriptLoader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698