Changeset 140441 in webkit


Ignore:
Timestamp:
Jan 22, 2013, 11:12:15 AM (13 years ago)
Author:
abarth@webkit.org
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:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r140439 r140441  
     12013-01-22  Adam Barth  <abarth@webkit.org>
     2
     3        BackgroundHTMLParser should simulate tree building in a separate function
     4        https://bugs.webkit.org/show_bug.cgi?id=107569
     5
     6        Reviewed by Eric Seidel.
     7
     8        This patch cleans up BackgroundHTMLParser::pumpTokenizer to prepare for
     9        implementing speculative parsing.
     10
     11        * html/parser/BackgroundHTMLParser.cpp:
     12        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
     13        (WebCore):
     14        (WebCore::BackgroundHTMLParser::pumpTokenizer):
     15        * html/parser/BackgroundHTMLParser.h:
     16        (BackgroundHTMLParser):
     17        * page/Settings.in:
     18
    1192013-01-22  Sheriff Bot  <webkit.review.bot@gmail.com>
    220
  • trunk/Source/WebCore/html/parser/BackgroundHTMLParser.cpp

    r140212 r140441  
    119119}
    120120
     121void BackgroundHTMLParser::simulateTreeBuilder(const CompactHTMLToken& token)
     122{
     123    if (token.type() == HTMLTokenTypes::StartTag) {
     124        const String& tagName = token.data();
     125        if (threadSafeMatch(tagName, SVGNames::svgTag)
     126            || threadSafeMatch(tagName, MathMLNames::mathTag))
     127            m_inForeignContent = true;
     128
     129        // FIXME: This is just a copy of Tokenizer::updateStateFor which uses threadSafeMatches.
     130        if (threadSafeMatch(tagName, textareaTag) || threadSafeMatch(tagName, titleTag))
     131            m_tokenizer->setState(HTMLTokenizerState::RCDATAState);
     132        else if (threadSafeMatch(tagName, plaintextTag))
     133            m_tokenizer->setState(HTMLTokenizerState::PLAINTEXTState);
     134        else if (threadSafeMatch(tagName, scriptTag))
     135            m_tokenizer->setState(HTMLTokenizerState::ScriptDataState);
     136        else if (threadSafeMatch(tagName, styleTag)
     137            || threadSafeMatch(tagName, iframeTag)
     138            || threadSafeMatch(tagName, xmpTag)
     139            || (threadSafeMatch(tagName, noembedTag) && m_options.pluginsEnabled)
     140            || threadSafeMatch(tagName, noframesTag)
     141            || (threadSafeMatch(tagName, noscriptTag) && m_options.scriptEnabled))
     142            m_tokenizer->setState(HTMLTokenizerState::RAWTEXTState);
     143    }
     144
     145    if (token.type() == HTMLTokenTypes::EndTag) {
     146        const String& tagName = token.data();
     147        if (threadSafeMatch(tagName, SVGNames::svgTag) || threadSafeMatch(tagName, MathMLNames::mathTag))
     148            m_inForeignContent = false;
     149        if (threadSafeMatch(tagName, scriptTag))
     150            m_isPausedWaitingForScripts = true;
     151    }
     152
     153    // FIXME: Need to set setForceNullCharacterReplacement based on m_inForeignContent as well.
     154    m_tokenizer->setShouldAllowCDATA(m_inForeignContent);
     155}
     156
    121157void BackgroundHTMLParser::pumpTokenizer()
    122158{
     
    126162    while (m_tokenizer->nextToken(m_input.current(), m_token)) {
    127163        m_pendingTokens.append(CompactHTMLToken(m_token));
    128 
    129         const CompactHTMLToken& token = m_pendingTokens.last();
    130 
    131         if (token.type() == HTMLTokenTypes::StartTag) {
    132             const String& tagName = token.data();
    133             if (threadSafeMatch(tagName, SVGNames::svgTag)
    134                 || threadSafeMatch(tagName, MathMLNames::mathTag))
    135                 m_inForeignContent = true;
    136 
    137             // FIXME: This is just a copy of Tokenizer::updateStateFor which doesn't use HTMLNames.
    138             if (threadSafeMatch(tagName, textareaTag) || threadSafeMatch(tagName, titleTag))
    139                 m_tokenizer->setState(HTMLTokenizerState::RCDATAState);
    140             else if (threadSafeMatch(tagName, plaintextTag))
    141                 m_tokenizer->setState(HTMLTokenizerState::PLAINTEXTState);
    142             else if (threadSafeMatch(tagName, scriptTag))
    143                 m_tokenizer->setState(HTMLTokenizerState::ScriptDataState);
    144             else if (threadSafeMatch(tagName, styleTag)
    145                 || threadSafeMatch(tagName, iframeTag)
    146                 || threadSafeMatch(tagName, xmpTag)
    147                 || (threadSafeMatch(tagName, noembedTag) && m_options.pluginsEnabled)
    148                 || threadSafeMatch(tagName, noframesTag)
    149                 || (threadSafeMatch(tagName, noscriptTag) && m_options.scriptEnabled))
    150                 m_tokenizer->setState(HTMLTokenizerState::RAWTEXTState);
    151         }
    152         if (token.type() == HTMLTokenTypes::EndTag) {
    153             const String& tagName = token.data();
    154             if (threadSafeMatch(tagName, SVGNames::svgTag) || threadSafeMatch(tagName, MathMLNames::mathTag))
    155                 m_inForeignContent = false;
    156             if (threadSafeMatch(tagName, scriptTag)) {
    157                 m_isPausedWaitingForScripts = true;
    158                 m_token.clear();
    159                 break;
    160             }
    161         }
    162         // FIXME: Need to set setForceNullCharacterReplacement based on m_inForeignContent as well.
    163         m_tokenizer->setShouldAllowCDATA(m_inForeignContent);
    164164        m_token.clear();
     165
     166        simulateTreeBuilder(m_pendingTokens.last());
     167
     168        if (m_isPausedWaitingForScripts)
     169            break;
    165170
    166171        if (m_pendingTokens.size() >= pendingTokenLimit)
  • trunk/Source/WebCore/html/parser/BackgroundHTMLParser.h

    r139950 r140441  
    6262
    6363    void pumpTokenizer();
     64    void simulateTreeBuilder(const CompactHTMLToken&);
    6465
    6566    void sendTokensToMainThread();
Note: See TracChangeset for help on using the changeset viewer.