Changeset 140441 in webkit
- Timestamp:
- Jan 22, 2013, 11:12:15 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r140439 r140441 1 2013-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 1 19 2013-01-22 Sheriff Bot <webkit.review.bot@gmail.com> 2 20 -
trunk/Source/WebCore/html/parser/BackgroundHTMLParser.cpp
r140212 r140441 119 119 } 120 120 121 void 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 121 157 void BackgroundHTMLParser::pumpTokenizer() 122 158 { … … 126 162 while (m_tokenizer->nextToken(m_input.current(), m_token)) { 127 163 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);164 164 m_token.clear(); 165 166 simulateTreeBuilder(m_pendingTokens.last()); 167 168 if (m_isPausedWaitingForScripts) 169 break; 165 170 166 171 if (m_pendingTokens.size() >= pendingTokenLimit) -
trunk/Source/WebCore/html/parser/BackgroundHTMLParser.h
r139950 r140441 62 62 63 63 void pumpTokenizer(); 64 void simulateTreeBuilder(const CompactHTMLToken&); 64 65 65 66 void sendTokensToMainThread();
Note:
See TracChangeset
for help on using the changeset viewer.