Index: third_party/WebKit/Source/core/dom/PendingScript.cpp |
diff --git a/third_party/WebKit/Source/core/dom/PendingScript.cpp b/third_party/WebKit/Source/core/dom/PendingScript.cpp |
index 4e8cc789ccbd4fa60a89026dc1e7f712718cd6de..f747fb07d4576b63a7d5368d7602bd174becc306 100644 |
--- a/third_party/WebKit/Source/core/dom/PendingScript.cpp |
+++ b/third_party/WebKit/Source/core/dom/PendingScript.cpp |
@@ -58,13 +58,20 @@ PendingScript::PendingScript(Element* element, |
m_parserBlockingLoadStartTime(0), |
m_client(nullptr), |
m_isForTesting(isForTesting) { |
- CHECK(m_isForTesting || m_element); |
+ checkState(); |
setResource(resource); |
MemoryCoordinator::instance().registerClient(this); |
} |
PendingScript::~PendingScript() {} |
+NOINLINE void PendingScript::checkState() const { |
+ // TODO(hiroshige): Turn these CHECK()s into DCHECK() before going to beta. |
+ CHECK(m_isForTesting || m_element); |
sof
2017/02/23 07:26:23
This method would be a good place to elucidate the
|
+ CHECK(resource() || !m_streamer); |
+ CHECK(!m_streamer || m_streamer->resource() == resource()); |
+} |
+ |
void PendingScript::dispose() { |
stopWatchingForLoad(); |
DCHECK(!m_client); |
@@ -81,6 +88,8 @@ void PendingScript::dispose() { |
} |
void PendingScript::watchForLoad(PendingScriptClient* client) { |
+ checkState(); |
+ |
DCHECK(!m_watchingForLoad); |
// addClient() will call streamingFinished() if the load is complete. Callers |
// who do not expect to be re-entered from this call should not call |
@@ -96,6 +105,7 @@ void PendingScript::watchForLoad(PendingScriptClient* client) { |
void PendingScript::stopWatchingForLoad() { |
if (!m_watchingForLoad) |
return; |
+ checkState(); |
DCHECK(resource()); |
m_client = nullptr; |
m_watchingForLoad = false; |
@@ -109,6 +119,7 @@ Element* PendingScript::element() const { |
} |
void PendingScript::streamingFinished() { |
+ checkState(); |
DCHECK(resource()); |
if (m_client) |
m_client->pendingScriptFinished(this); |
@@ -185,7 +196,7 @@ void PendingScript::notifyFinished(Resource* resource) { |
// objects (perhaps attached to identical Resource objects) per request. |
// |
// See https://crbug.com/500701 for more information. |
- CHECK(m_isForTesting || m_element); |
+ checkState(); |
if (m_element) |
m_integrityFailure = !checkScriptResourceIntegrity(resource, m_element); |
@@ -212,6 +223,8 @@ DEFINE_TRACE(PendingScript) { |
ScriptSourceCode PendingScript::getSource(const KURL& documentURL, |
bool& errorOccurred) const { |
+ checkState(); |
+ |
if (resource()) { |
errorOccurred = resource()->errorOccurred() || m_integrityFailure; |
DCHECK(resource()->isLoaded()); |
@@ -219,6 +232,7 @@ ScriptSourceCode PendingScript::getSource(const KURL& documentURL, |
return ScriptSourceCode(m_streamer, resource()); |
return ScriptSourceCode(resource()); |
} |
+ |
errorOccurred = false; |
return ScriptSourceCode(m_element->textContent(), documentURL, |
startingPosition()); |
@@ -228,25 +242,28 @@ void PendingScript::setStreamer(ScriptStreamer* streamer) { |
DCHECK(!m_streamer); |
DCHECK(!m_watchingForLoad); |
m_streamer = streamer; |
+ checkState(); |
} |
bool PendingScript::isReady() const { |
- if (resource() && !resource()->isLoaded()) |
- return false; |
- if (m_streamer && !m_streamer->isFinished()) |
- return false; |
+ checkState(); |
+ if (resource()) { |
+ return resource()->isLoaded() && (!m_streamer || m_streamer->isFinished()); |
+ } |
+ |
return true; |
} |
bool PendingScript::errorOccurred() const { |
+ checkState(); |
if (resource()) |
return resource()->errorOccurred(); |
- if (m_streamer && m_streamer->resource()) |
- return m_streamer->resource()->errorOccurred(); |
+ |
return false; |
} |
void PendingScript::onPurgeMemory() { |
+ checkState(); |
if (!m_streamer) |
return; |
m_streamer->cancel(); |