Index: third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp |
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp |
index b603620246c137a74979c9866c99a79e1fbc16dc..c5a1f5f7bc49840f08f45c1baa6d32445de5874a 100644 |
--- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp |
+++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp |
@@ -112,8 +112,8 @@ HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, |
m_treeBuilder = HTMLTreeBuilder::create(this, fragment, contextElement, |
parserContentPolicy, m_options); |
- bool reportErrors = |
- false; // For now document fragment parsing never reports errors. |
+ // For now document fragment parsing never reports errors. |
+ bool reportErrors = false; |
m_tokenizer->setState( |
tokenizerStateForContextElement(contextElement, reportErrors, m_options)); |
m_xssAuditor.initForFragment(); |
@@ -160,8 +160,8 @@ HTMLDocumentParser::HTMLDocumentParser(Document& document, |
HTMLDocumentParser::~HTMLDocumentParser() {} |
void HTMLDocumentParser::dispose() { |
- // In Oilpan, HTMLDocumentParser can die together with Document, and |
- // detach() is not called in this case. |
+ // In Oilpan, HTMLDocumentParser can die together with Document, and detach() |
+ // is not called in this case. |
if (m_haveBackgroundParser) |
stopBackgroundParser(); |
} |
@@ -195,8 +195,8 @@ void HTMLDocumentParser::detach() { |
if (m_scriptRunner) |
m_scriptRunner->detach(); |
m_treeBuilder->detach(); |
- // FIXME: It seems wrong that we would have a preload scanner here. |
- // Yet during fast/dom/HTMLScriptElement/script-load-events.html we do. |
+ // FIXME: It seems wrong that we would have a preload scanner here. Yet during |
+ // fast/dom/HTMLScriptElement/script-load-events.html we do. |
m_preloadScanner.reset(); |
m_insertionPreloadScanner.reset(); |
if (m_parserScheduler) { |
@@ -243,8 +243,8 @@ void HTMLDocumentParser::prepareToStopParsing() { |
if (m_scriptRunner) |
document()->setReadyState(Document::Interactive); |
- // Setting the ready state above can fire mutation event and detach us |
- // from underneath. In that case, just bail out. |
+ // Setting the ready state above can fire mutation event and detach us from |
+ // underneath. In that case, just bail out. |
if (isDetached()) |
return; |
@@ -289,18 +289,19 @@ bool HTMLDocumentParser::canTakeNextToken() { |
if (isStopped()) |
return false; |
- // If we're paused waiting for a script, we try to execute scripts before continuing. |
+ // If we're paused waiting for a script, we try to execute scripts before |
+ // continuing. |
if (m_treeBuilder->hasParserBlockingScript()) |
runScriptsForPausedTreeBuilder(); |
if (isStopped() || isWaitingForScripts()) |
return false; |
// FIXME: It's wrong for the HTMLDocumentParser to reach back to the |
- // LocalFrame, but this approach is how the old parser handled |
- // stopping when the page assigns window.location. What really |
- // should happen is that assigning window.location causes the |
- // parser to stop parsing cleanly. The problem is we're not |
- // perpared to do that at every point where we run JavaScript. |
+ // LocalFrame, but this approach is how the old parser handled stopping when |
+ // the page assigns window.location. What really should happen is that |
+ // assigning window.location causes the parser to stop parsing cleanly. The |
+ // problem is we're not perpared to do that at every point where we run |
+ // JavaScript. |
if (!isParsingFragment() && document()->frame() && |
document()->frame()->navigationScheduler().locationChangePending()) |
return false; |
@@ -318,15 +319,14 @@ void HTMLDocumentParser::notifyPendingTokenizedChunks() { |
if (!isParsing()) |
return; |
- // ApplicationCache needs to be initialized before issuing preloads. |
- // We suspend preload until HTMLHTMLElement is inserted and |
- // ApplicationCache is initialized. Note: link rel preloads don't follow |
- // this policy per the spec. These directives should initiate a fetch as |
- // fast as possible. |
+ // ApplicationCache needs to be initialized before issuing preloads. We |
+ // suspend preload until HTMLHTMLElement is inserted and ApplicationCache is |
+ // initialized. Note: link rel preloads don't follow this policy per the spec. |
+ // These directives should initiate a fetch as fast as possible. |
if (!m_triedLoadingLinkHeaders && document()->loader() && |
!pendingChunks.isEmpty()) { |
- // Note that on commit, the loader dispatched preloads for all the |
- // non-media links. |
+ // Note that on commit, the loader dispatched preloads for all the non-media |
+ // links. |
document()->loader()->dispatchLinkHeaderPreloads( |
&pendingChunks.first()->viewport, LinkLoader::OnlyLoadMedia); |
m_triedLoadingLinkHeaders = true; |
@@ -359,15 +359,14 @@ void HTMLDocumentParser::notifyPendingTokenizedChunks() { |
} |
m_preloader->takeAndPreload(linkRelPreloads); |
} else { |
- // We can safely assume that there are no queued preloads request after |
- // the document element is available, as we empty the queue immediately |
- // after the document element is created in documentElementAvailable(). |
+ // We can safely assume that there are no queued preloads request after the |
+ // document element is available, as we empty the queue immediately after |
+ // the document element is created in documentElementAvailable(). |
ASSERT(m_queuedPreloads.isEmpty()); |
ASSERT(m_queuedDocumentWriteScripts.isEmpty()); |
- // Loop through the chunks to generate preloads before any |
- // document.write script evaluation takes place. Preloading these |
- // scripts is valuable and comparably cheap, while evaluating JS can be |
- // expensive. |
+ // Loop through the chunks to generate preloads before any document.write |
+ // script evaluation takes place. Preloading these scripts is valuable and |
+ // comparably cheap, while evaluating JS can be expensive. |
for (auto& chunk : pendingChunks) { |
m_preloader->takeAndPreload(chunk->preloads); |
} |
@@ -400,9 +399,9 @@ void HTMLDocumentParser::validateSpeculations( |
std::unique_ptr<TokenizedChunk> chunk) { |
ASSERT(chunk); |
if (isWaitingForScripts()) { |
- // We're waiting on a network script, just save the chunk, we'll get |
- // a second validateSpeculations call after the script completes. |
- // This call should have been made immediately after runScriptsForPausedTreeBuilder |
+ // We're waiting on a network script, just save the chunk, we'll get a |
+ // second validateSpeculations call after the script completes. This call |
+ // should have been made immediately after runScriptsForPausedTreeBuilder |
// which may have started a network load and left us waiting. |
ASSERT(!m_lastChunkBeforeScript); |
m_lastChunkBeforeScript = std::move(chunk); |
@@ -414,16 +413,16 @@ void HTMLDocumentParser::validateSpeculations( |
std::unique_ptr<HTMLToken> token = std::move(m_token); |
if (!tokenizer) { |
- // There must not have been any changes to the HTMLTokenizer state on |
- // the main thread, which means the speculation buffer is correct. |
+ // There must not have been any changes to the HTMLTokenizer state on the |
+ // main thread, which means the speculation buffer is correct. |
return; |
} |
- // Currently we're only smart enough to reuse the speculation buffer if the tokenizer |
- // both starts and ends in the DataState. That state is simplest because the HTMLToken |
- // is always in the Uninitialized state. We should consider whether we can reuse the |
- // speculation buffer in other states, but we'd likely need to do something more |
- // sophisticated with the HTMLToken. |
+ // Currently we're only smart enough to reuse the speculation buffer if the |
+ // tokenizer both starts and ends in the DataState. That state is simplest |
+ // because the HTMLToken is always in the Uninitialized state. We should |
+ // consider whether we can reuse the speculation buffer in other states, but |
+ // we'd likely need to do something more sophisticated with the HTMLToken. |
if (chunk->tokenizerState == HTMLTokenizer::DataState && |
tokenizer->getState() == HTMLTokenizer::DataState && |
m_input.current().isEmpty() && |
@@ -466,8 +465,8 @@ void HTMLDocumentParser::discardSpeculationsAndResumeFrom( |
checkpoint->preloadScannerCheckpoint = |
lastChunkBeforeScript->preloadScannerCheckpoint; |
checkpoint->unparsedInput = m_input.current().toString().isolatedCopy(); |
- m_input.current() |
- .clear(); // FIXME: This should be passed in instead of cleared. |
+ // FIXME: This should be passed in instead of cleared. |
+ m_input.current().clear(); |
ASSERT(checkpoint->unparsedInput.isSafeToSendToAnotherThread()); |
postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::resumeFrom, |
@@ -506,7 +505,8 @@ size_t HTMLDocumentParser::processTokenizedChunkFromBackgroundParser( |
if (isStopped()) |
break; |
} |
- // XSSAuditorDelegate can detach the parser if it decides to block the entire current document. |
+ // XSSAuditorDelegate can detach the parser if it decides to block the entire |
+ // current document. |
if (isDetached()) |
return elementTokenCount; |
@@ -520,8 +520,9 @@ size_t HTMLDocumentParser::processTokenizedChunkFromBackgroundParser( |
if (document()->frame() && |
document()->frame()->navigationScheduler().locationChangePending()) { |
- // To match main-thread parser behavior (which never checks locationChangePending on the EOF path) |
- // we peek to see if this chunk has an EOF and process it anyway. |
+ // To match main-thread parser behavior (which never checks |
+ // locationChangePending on the EOF path) we peek to see if this chunk has |
+ // an EOF and process it anyway. |
if (tokens->last().type() == HTMLToken::EndOfFile) { |
ASSERT( |
m_speculations |
@@ -546,23 +547,18 @@ size_t HTMLDocumentParser::processTokenizedChunkFromBackgroundParser( |
} |
if (isWaitingForScripts()) { |
- ASSERT( |
- it + 1 == |
- tokens |
- ->end()); // The </script> is assumed to be the last token of this bunch. |
+ // The </script> is assumed to be the last token of this bunch. |
+ ASSERT(it + 1 == tokens->end()); |
runScriptsForPausedTreeBuilder(); |
validateSpeculations(std::move(chunk)); |
break; |
} |
if (it->type() == HTMLToken::EndOfFile) { |
- ASSERT( |
- it + 1 == |
- tokens |
- ->end()); // The EOF is assumed to be the last token of this bunch. |
- ASSERT( |
- m_speculations |
- .isEmpty()); // There should never be any chunks after the EOF. |
+ // The EOF is assumed to be the last token of this bunch. |
+ ASSERT(it + 1 == tokens->end()); |
+ // There should never be any chunks after the EOF. |
+ ASSERT(m_speculations.isEmpty()); |
prepareToStopParsing(); |
break; |
} |
@@ -617,8 +613,8 @@ void HTMLDocumentParser::pumpPendingSpeculations() { |
processTokenizedChunkFromBackgroundParser(m_speculations.takeFirst()); |
session.addedElementTokens(elementTokenCount); |
- // Always check isParsing first as m_document may be null. |
- // Surprisingly, isScheduledForResume() may be set here as a result of |
+ // Always check isParsing first as m_document may be null. Surprisingly, |
+ // isScheduledForResume() may be set here as a result of |
// processTokenizedChunkFromBackgroundParser running arbitrary javascript |
// which invokes nested event loops. (e.g. inspector breakpoints) |
if (!isParsing() || isWaitingForScripts() || isScheduledForResume()) |
@@ -661,11 +657,11 @@ void HTMLDocumentParser::pumpTokenizer() { |
PumpSession session(m_pumpSessionNestingLevel); |
- // We tell the InspectorInstrumentation about every pump, even if we |
- // end up pumping nothing. It can filter out empty pumps itself. |
- // FIXME: m_input.current().length() is only accurate if we |
- // end up parsing the whole buffer in this pump. We should pass how |
- // much we parsed as part of didWriteHTML instead of willWriteHTML. |
+ // We tell the InspectorInstrumentation about every pump, even if we end up |
+ // pumping nothing. It can filter out empty pumps itself. |
+ // FIXME: m_input.current().length() is only accurate if we end up parsing the |
+ // whole buffer in this pump. We should pass how much we parsed as part of |
+ // didWriteHTML instead of willWriteHTML. |
TRACE_EVENT_BEGIN1( |
"devtools.timeline", "ParseHTML", "beginData", |
InspectorParseHtmlEvent::beginData( |
@@ -708,8 +704,9 @@ void HTMLDocumentParser::pumpTokenizer() { |
ASSERT(m_tokenizer->getState() == HTMLTokenizer::DataState); |
ASSERT(m_preloader); |
- // TODO(kouhei): m_preloader should be always available for synchronous parsing case, |
- // adding paranoia if for speculative crash fix for crbug.com/465478 |
+ // TODO(kouhei): m_preloader should be always available for synchronous |
+ // parsing case, adding paranoia if for speculative crash fix for |
+ // crbug.com/465478 |
if (m_preloader) { |
if (!m_preloadScanner) { |
m_preloadScanner = createPreloadScanner(); |
@@ -760,11 +757,10 @@ void HTMLDocumentParser::constructTreeFromCompactHTMLToken( |
} |
bool HTMLDocumentParser::hasInsertionPoint() { |
- // FIXME: The wasCreatedByScript() branch here might not be fully correct. |
- // Our model of the EOF character differs slightly from the one in |
- // the spec because our treatment is uniform between network-sourced |
- // and script-sourced input streams whereas the spec treats them |
- // differently. |
+ // FIXME: The wasCreatedByScript() branch here might not be fully correct. Our |
+ // model of the EOF character differs slightly from the one in the spec |
+ // because our treatment is uniform between network-sourced and script-sourced |
+ // input streams whereas the spec treats them differently. |
return m_input.hasInsertionPoint() || |
(wasCreatedByScript() && !m_input.haveSeenEndOfFile()); |
} |
@@ -808,11 +804,13 @@ void HTMLDocumentParser::startBackgroundParser() { |
ASSERT(document()); |
m_haveBackgroundParser = true; |
- // TODO(alexclarke): Remove WebFrameScheduler::setDocumentParsingInBackground when background parser goes away. |
+ // TODO(alexclarke): Remove WebFrameScheduler::setDocumentParsingInBackground |
+ // when background parser goes away. |
if (document()->frame() && document()->frame()->frameScheduler()) |
document()->frame()->frameScheduler()->setDocumentParsingInBackground(true); |
- // Make sure that a resolver is set up, so that the correct viewport dimensions will be fed to the background parser and preload scanner. |
+ // Make sure that a resolver is set up, so that the correct viewport |
+ // dimensions will be fed to the background parser and preload scanner. |
if (document()->loader()) |
document()->ensureStyleResolver(); |
@@ -873,8 +871,8 @@ void HTMLDocumentParser::append(const String& inputSource) { |
if (isStopped()) |
return; |
- // We should never reach this point if we're using a parser thread, |
- // as appendBytes() will directly ship the data to the thread. |
+ // We should never reach this point if we're using a parser thread, as |
+ // appendBytes() will directly ship the data to the thread. |
ASSERT(!shouldUseThreading()); |
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.debug"), |
@@ -895,8 +893,9 @@ void HTMLDocumentParser::append(const String& inputSource) { |
if (m_preloadScanner) { |
if (m_input.current().isEmpty() && !isWaitingForScripts()) { |
- // We have parsed until the end of the current input and so are now moving ahead of the preload scanner. |
- // Clear the scanner so we know to scan starting from the current input point if we block again. |
+ // We have parsed until the end of the current input and so are now moving |
+ // ahead of the preload scanner. Clear the scanner so we know to scan |
+ // starting from the current input point if we block again. |
m_preloadScanner.reset(); |
} else { |
m_preloadScanner->appendToEnd(source); |
@@ -909,9 +908,9 @@ void HTMLDocumentParser::append(const String& inputSource) { |
m_input.appendToEnd(source); |
if (inPumpSession()) { |
- // We've gotten data off the network in a nested write. |
- // We don't want to consume any more of the input stream now. Do |
- // not worry. We'll consume this data in a less-nested write(). |
+ // We've gotten data off the network in a nested write. We don't want to |
+ // consume any more of the input stream now. Do not worry. We'll consume |
+ // this data in a less-nested write(). |
return; |
} |
@@ -927,7 +926,8 @@ void HTMLDocumentParser::end() { |
if (m_haveBackgroundParser) |
stopBackgroundParser(); |
- // Informs the the rest of WebCore that parsing is really finished (and deletes this). |
+ // Informs the the rest of WebCore that parsing is really finished (and |
+ // deletes this). |
m_treeBuilder->finished(); |
DocumentParser::stopParsing(); |
@@ -967,17 +967,17 @@ void HTMLDocumentParser::endIfDelayed() { |
} |
void HTMLDocumentParser::finish() { |
- // FIXME: We should ASSERT(!m_parserStopped) here, since it does not |
- // makes sense to call any methods on DocumentParser once it's been stopped. |
+ // FIXME: We should ASSERT(!m_parserStopped) here, since it does not makes |
+ // sense to call any methods on DocumentParser once it's been stopped. |
// However, FrameLoader::stop calls DocumentParser::finish unconditionally. |
flush(); |
if (isDetached()) |
return; |
- // Empty documents never got an append() call, and thus have never started |
- // a background parser. In those cases, we ignore shouldUseThreading() |
- // and fall through to the non-threading case. |
+ // Empty documents never got an append() call, and thus have never started a |
+ // background parser. In those cases, we ignore shouldUseThreading() and fall |
+ // through to the non-threading case. |
if (m_haveBackgroundParser) { |
if (!m_input.haveSeenEndOfFile()) |
m_input.closeWithoutMarkingEndOfFile(); |
@@ -988,16 +988,15 @@ void HTMLDocumentParser::finish() { |
if (!m_tokenizer) { |
ASSERT(!m_token); |
- // We're finishing before receiving any data. Rather than booting up |
- // the background parser just to spin it down, we finish parsing |
- // synchronously. |
+ // We're finishing before receiving any data. Rather than booting up the |
+ // background parser just to spin it down, we finish parsing synchronously. |
m_token = wrapUnique(new HTMLToken); |
m_tokenizer = HTMLTokenizer::create(m_options); |
} |
- // We're not going to get any more data off the network, so we tell the |
- // input stream we've reached the end of file. finish() can be called more |
- // than once, if the first time does not call end(). |
+ // We're not going to get any more data off the network, so we tell the input |
+ // stream we've reached the end of file. finish() can be called more than |
+ // once, if the first time does not call end(). |
if (!m_input.haveSeenEndOfFile()) |
m_input.markEndOfFile(); |
@@ -1034,16 +1033,18 @@ TextPosition HTMLDocumentParser::textPosition() const { |
} |
bool HTMLDocumentParser::isWaitingForScripts() const { |
- // When the TreeBuilder encounters a </script> tag, it returns to the HTMLDocumentParser |
- // where the script is transfered from the treebuilder to the script runner. |
- // The script runner will hold the script until its loaded and run. During |
- // any of this time, we want to count ourselves as "waiting for a script" and thus |
- // run the preload scanner, as well as delay completion of parsing. |
+ // When the TreeBuilder encounters a </script> tag, it returns to the |
+ // HTMLDocumentParser where the script is transfered from the treebuilder to |
+ // the script runner. The script runner will hold the script until its loaded |
+ // and run. During any of this time, we want to count ourselves as "waiting |
+ // for a script" and thus run the preload scanner, as well as delay completion |
+ // of parsing. |
bool treeBuilderHasBlockingScript = m_treeBuilder->hasParserBlockingScript(); |
bool scriptRunnerHasBlockingScript = |
m_scriptRunner && m_scriptRunner->hasParserBlockingScript(); |
- // Since the parser is paused while a script runner has a blocking script, it should |
- // never be possible to end up with both objects holding a blocking script. |
+ // Since the parser is paused while a script runner has a blocking script, it |
+ // should never be possible to end up with both objects holding a blocking |
+ // script. |
ASSERT(!(treeBuilderHasBlockingScript && scriptRunnerHasBlockingScript)); |
// If either object has a blocking script, the parser should be paused. |
return treeBuilderHasBlockingScript || scriptRunnerHasBlockingScript || |
@@ -1092,12 +1093,12 @@ void HTMLDocumentParser::notifyScriptLoaded(Resource* cachedResource) { |
} |
void HTMLDocumentParser::executeScriptsWaitingForResources() { |
- // Document only calls this when the Document owns the DocumentParser |
- // so this will not be called in the DocumentFragment case. |
+ // Document only calls this when the Document owns the DocumentParser so this |
+ // will not be called in the DocumentFragment case. |
ASSERT(m_scriptRunner); |
// Ignore calls unless we have a script blocking the parser waiting on a |
- // stylesheet load. Otherwise we are currently parsing and this |
- // is a re-entrant call from encountering a </ style> tag. |
+ // stylesheet load. Otherwise we are currently parsing and this is a |
+ // re-entrant call from encountering a </ style> tag. |
if (!m_scriptRunner->hasScriptsWaitingForResources()) |
return; |
m_scriptRunner->executeScriptsWaitingForResources(); |
@@ -1114,8 +1115,8 @@ void HTMLDocumentParser::parseDocumentFragment( |
HTMLDocumentParser::create(fragment, contextElement, parserContentPolicy); |
parser->append(source); |
parser->finish(); |
- parser |
- ->detach(); // Allows ~DocumentParser to assert it was detached before destruction. |
+ // Allows ~DocumentParser to assert it was detached before destruction. |
+ parser->detach(); |
} |
void HTMLDocumentParser::suspendScheduledTasks() { |
@@ -1166,8 +1167,8 @@ void HTMLDocumentParser::flush() { |
return; |
if (shouldUseThreading()) { |
- // In some cases, flush() is called without any invocation of |
- // appendBytes. Fallback to synchronous parsing in that case. |
+ // In some cases, flush() is called without any invocation of appendBytes. |
+ // Fallback to synchronous parsing in that case. |
if (!m_haveBackgroundParser) { |
m_shouldUseThreading = false; |
m_token = wrapUnique(new HTMLToken); |