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

Unified Diff: third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp

Issue 2172613002: Renderer-side changes for NoState Prefetch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tests Created 4 years, 4 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
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 07f747367118d5231744ac8252c9c26bf526b0f6..d90eef3c8038302c570595001bde62b5eaa7246b 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
@@ -89,6 +89,17 @@ static HTMLTokenizer::State tokenizerStateForContextElement(Element* contextElem
return HTMLTokenizer::DataState;
}
+// static
+HTMLDocumentParser* HTMLDocumentParser::create(
Charlie Harrison 2016/08/03 14:40:03 I have a slight preference for passing the sync po
droger 2016/08/03 16:45:50 Done.
+ HTMLDocument& document,
+ ParserSynchronizationPolicy backgroundParsingPolicy)
+{
+ return new HTMLDocumentParser(
+ document,
+ threadingAllowedForDocument(document)
+ ? backgroundParsingPolicy : ForceSynchronousParsing);
+}
+
HTMLDocumentParser::HTMLDocumentParser(HTMLDocument& document, ParserSynchronizationPolicy syncPolicy)
: HTMLDocumentParser(document, AllowScriptingContent, syncPolicy)
{
@@ -150,6 +161,12 @@ DEFINE_TRACE(HTMLDocumentParser)
HTMLScriptRunnerHost::trace(visitor);
}
+// static
+bool HTMLDocumentParser::threadingAllowedForDocument(HTMLDocument& document)
+{
+ return !document.isPrefetchOnly();
+}
+
void HTMLDocumentParser::detach()
{
if (!isParsingFragment() && m_tokenizedChunkQueue.get() && m_tokenizedChunkQueue->peakPendingChunkCount()) {
@@ -707,7 +724,8 @@ void HTMLDocumentParser::insert(const SegmentedString& source)
if (!m_insertionPreloadScanner)
m_insertionPreloadScanner = createPreloadScanner();
m_insertionPreloadScanner->appendToEnd(source);
- m_insertionPreloadScanner->scanAndPreload(m_preloader.get(), document()->validBaseElementURL(), nullptr);
+ m_insertionPreloadScanner->scanAndPreload(
Charlie Harrison 2016/08/03 14:40:03 nit: Unnecessary line break.
droger 2016/08/03 16:45:50 Done.
+ m_preloader.get(), document()->validBaseElementURL(), nullptr);
}
endIfDelayed();
@@ -788,6 +806,17 @@ void HTMLDocumentParser::append(const String& inputSource)
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.debug"), "HTMLDocumentParser::append", "size", inputSource.length());
const SegmentedString source(inputSource);
+ if (document()->isPrefetchOnly()) {
+ if (!m_preloadScanner)
+ m_preloadScanner = createPreloadScanner();
+
+ m_preloadScanner->appendToEnd(source);
+ m_preloadScanner->scanAndPreload(m_preloader.get(), document()->validBaseElementURL(), nullptr);
Charlie Harrison 2016/08/03 14:40:03 This just preloads the tokens normally. Do we want
droger 2016/08/03 16:45:50 This uses the same code as the standard preload sc
Charlie Harrison 2016/08/03 17:15:14 Nope, LOAD_PREFETCH afaik is only used for the lin
pasko 2016/08/04 12:23:08 csharrison: thank you for investigation and the in
+
+ // Return after the preload scanner, do not actually parse the document.
+ return;
+ }
+
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.

Powered by Google App Engine
This is Rietveld 408576698