Title: [140441] trunk/Source/WebCore
Revision
140441
Author
[email protected]
Date
2013-01-22 11:12:15 -0800 (Tue, 22 Jan 2013)

Log Message

BackgroundHTMLParser should simulate tree building in a separate function
https://bugs.webkit.org/show_bug.cgi?id=107569

Reviewed by Eric Seidel.

This patch cleans up BackgroundHTMLParser::pumpTokenizer to prepare for
implementing speculative parsing.

* html/parser/BackgroundHTMLParser.cpp:
(WebCore::BackgroundHTMLParser::simulateTreeBuilder):
(WebCore):
(WebCore::BackgroundHTMLParser::pumpTokenizer):
* html/parser/BackgroundHTMLParser.h:
(BackgroundHTMLParser):
* page/Settings.in:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (140440 => 140441)


--- trunk/Source/WebCore/ChangeLog	2013-01-22 18:52:52 UTC (rev 140440)
+++ trunk/Source/WebCore/ChangeLog	2013-01-22 19:12:15 UTC (rev 140441)
@@ -1,3 +1,21 @@
+2013-01-22  Adam Barth  <[email protected]>
+
+        BackgroundHTMLParser should simulate tree building in a separate function
+        https://bugs.webkit.org/show_bug.cgi?id=107569
+
+        Reviewed by Eric Seidel.
+
+        This patch cleans up BackgroundHTMLParser::pumpTokenizer to prepare for
+        implementing speculative parsing.
+
+        * html/parser/BackgroundHTMLParser.cpp:
+        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
+        (WebCore):
+        (WebCore::BackgroundHTMLParser::pumpTokenizer):
+        * html/parser/BackgroundHTMLParser.h:
+        (BackgroundHTMLParser):
+        * page/Settings.in:
+
 2013-01-22  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r140435.

Modified: trunk/Source/WebCore/html/parser/BackgroundHTMLParser.cpp (140440 => 140441)


--- trunk/Source/WebCore/html/parser/BackgroundHTMLParser.cpp	2013-01-22 18:52:52 UTC (rev 140440)
+++ trunk/Source/WebCore/html/parser/BackgroundHTMLParser.cpp	2013-01-22 19:12:15 UTC (rev 140441)
@@ -118,6 +118,42 @@
     pumpTokenizer();
 }
 
+void BackgroundHTMLParser::simulateTreeBuilder(const CompactHTMLToken& token)
+{
+    if (token.type() == HTMLTokenTypes::StartTag) {
+        const String& tagName = token.data();
+        if (threadSafeMatch(tagName, SVGNames::svgTag)
+            || threadSafeMatch(tagName, MathMLNames::mathTag))
+            m_inForeignContent = true;
+
+        // FIXME: This is just a copy of Tokenizer::updateStateFor which uses threadSafeMatches.
+        if (threadSafeMatch(tagName, textareaTag) || threadSafeMatch(tagName, titleTag))
+            m_tokenizer->setState(HTMLTokenizerState::RCDATAState);
+        else if (threadSafeMatch(tagName, plaintextTag))
+            m_tokenizer->setState(HTMLTokenizerState::PLAINTEXTState);
+        else if (threadSafeMatch(tagName, scriptTag))
+            m_tokenizer->setState(HTMLTokenizerState::ScriptDataState);
+        else if (threadSafeMatch(tagName, styleTag)
+            || threadSafeMatch(tagName, iframeTag)
+            || threadSafeMatch(tagName, xmpTag)
+            || (threadSafeMatch(tagName, noembedTag) && m_options.pluginsEnabled)
+            || threadSafeMatch(tagName, noframesTag)
+            || (threadSafeMatch(tagName, noscriptTag) && m_options.scriptEnabled))
+            m_tokenizer->setState(HTMLTokenizerState::RAWTEXTState);
+    }
+
+    if (token.type() == HTMLTokenTypes::EndTag) {
+        const String& tagName = token.data();
+        if (threadSafeMatch(tagName, SVGNames::svgTag) || threadSafeMatch(tagName, MathMLNames::mathTag))
+            m_inForeignContent = false;
+        if (threadSafeMatch(tagName, scriptTag))
+            m_isPausedWaitingForScripts = true;
+    }
+
+    // FIXME: Need to set setForceNullCharacterReplacement based on m_inForeignContent as well.
+    m_tokenizer->setShouldAllowCDATA(m_inForeignContent);
+}
+
 void BackgroundHTMLParser::pumpTokenizer()
 {
     if (m_isPausedWaitingForScripts)
@@ -125,44 +161,13 @@
 
     while (m_tokenizer->nextToken(m_input.current(), m_token)) {
         m_pendingTokens.append(CompactHTMLToken(m_token));
+        m_token.clear();
 
-        const CompactHTMLToken& token = m_pendingTokens.last();
+        simulateTreeBuilder(m_pendingTokens.last());
 
-        if (token.type() == HTMLTokenTypes::StartTag) {
-            const String& tagName = token.data();
-            if (threadSafeMatch(tagName, SVGNames::svgTag)
-                || threadSafeMatch(tagName, MathMLNames::mathTag))
-                m_inForeignContent = true;
+        if (m_isPausedWaitingForScripts)
+            break;
 
-            // FIXME: This is just a copy of Tokenizer::updateStateFor which doesn't use HTMLNames.
-            if (threadSafeMatch(tagName, textareaTag) || threadSafeMatch(tagName, titleTag))
-                m_tokenizer->setState(HTMLTokenizerState::RCDATAState);
-            else if (threadSafeMatch(tagName, plaintextTag))
-                m_tokenizer->setState(HTMLTokenizerState::PLAINTEXTState);
-            else if (threadSafeMatch(tagName, scriptTag))
-                m_tokenizer->setState(HTMLTokenizerState::ScriptDataState);
-            else if (threadSafeMatch(tagName, styleTag)
-                || threadSafeMatch(tagName, iframeTag)
-                || threadSafeMatch(tagName, xmpTag)
-                || (threadSafeMatch(tagName, noembedTag) && m_options.pluginsEnabled)
-                || threadSafeMatch(tagName, noframesTag)
-                || (threadSafeMatch(tagName, noscriptTag) && m_options.scriptEnabled))
-                m_tokenizer->setState(HTMLTokenizerState::RAWTEXTState);
-        }
-        if (token.type() == HTMLTokenTypes::EndTag) {
-            const String& tagName = token.data();
-            if (threadSafeMatch(tagName, SVGNames::svgTag) || threadSafeMatch(tagName, MathMLNames::mathTag))
-                m_inForeignContent = false;
-            if (threadSafeMatch(tagName, scriptTag)) {
-                m_isPausedWaitingForScripts = true;
-                m_token.clear();
-                break;
-            }
-        }
-        // FIXME: Need to set setForceNullCharacterReplacement based on m_inForeignContent as well.
-        m_tokenizer->setShouldAllowCDATA(m_inForeignContent);
-        m_token.clear();
-
         if (m_pendingTokens.size() >= pendingTokenLimit)
             sendTokensToMainThread();
     }

Modified: trunk/Source/WebCore/html/parser/BackgroundHTMLParser.h (140440 => 140441)


--- trunk/Source/WebCore/html/parser/BackgroundHTMLParser.h	2013-01-22 18:52:52 UTC (rev 140440)
+++ trunk/Source/WebCore/html/parser/BackgroundHTMLParser.h	2013-01-22 19:12:15 UTC (rev 140441)
@@ -61,6 +61,7 @@
     explicit BackgroundHTMLParser(const HTMLParserOptions&, ParserIdentifier);
 
     void pumpTokenizer();
+    void simulateTreeBuilder(const CompactHTMLToken&);
 
     void sendTokensToMainThread();
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to