Changeset 139020 in webkit
- Timestamp:
- Jan 7, 2013 5:21:43 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r139016 r139020 1 2013-01-07 Adam Barth <abarth@webkit.org> 2 3 HTMLTreeBuilder should not depend on Frame 4 https://bugs.webkit.org/show_bug.cgi?id=106256 5 6 Reviewed by Eric Seidel. 7 8 I needed to update this test slightly because now we lock in the 9 "script enabled" bit for the parser when the parser starts. That means 10 we'll parse the document in a consistent way even if the "script 11 enabled" bit gets flipped later. 12 13 * fast/parser/noscript-with-javascript-disabled-expected.txt: 14 * fast/parser/noscript-with-javascript-disabled.html: 15 1 16 2013-01-07 Tony Chang <tony@chromium.org> 2 17 -
trunk/LayoutTests/fast/parser/noscript-with-javascript-disabled-expected.txt
r52609 r139020 1 This test case verifies that contents inside <noscript> are rendered when Javascript is disabled. 2 Succeeded! 1 The text inside the 'noscript' tag inside the iframe should render: 2 3 -------- 4 Frame: '<!--framePath //<!--frame0-->-->' 5 -------- 6 PASS: This test case verifies that contents inside are rendered when Javascript is disabled. -
trunk/LayoutTests/fast/parser/noscript-with-javascript-disabled.html
r124410 r139020 2 2 3 3 <script> 4 if (window.testRunner) 4 if (window.testRunner) { 5 5 testRunner.dumpAsText(); 6 testRunner.dumpChildFramesAsText(); 6 7 testRunner.overridePreference("WebKitJavaScriptEnabled", false); 8 } 7 9 </script> 8 10 9 11 <noscript> 10 12 <body> 11 This test case verifies that contents inside <noscript> are rendered when Javascript is disabled. 13 FAIL: This content should not render because whether scripting is enabled 14 (for the purposes of the 'noscript' tag) is locked in when the parser starts. 15 </noscript> 12 16 13 <p>Succeeded!</p> 14 </noscript> 17 The text inside the 'noscript' tag inside the iframe should render: 18 19 <iframe 20 src="data:text/html,<noscript><body>PASS: This test case verifies that contents inside <noscript> are rendered when Javascript is disabled.</body></noscript>"> 21 </iframe> 15 22 16 23 </body> -
trunk/Source/WebCore/ChangeLog
r139016 r139020 1 2013-01-07 Adam Barth <abarth@webkit.org> 2 3 HTMLTreeBuilder should not depend on Frame 4 https://bugs.webkit.org/show_bug.cgi?id=106256 5 6 Reviewed by Eric Seidel. 7 8 Rather than have the tree builder ask the Frame whether scripting and 9 plugins are enabled, we now push that information to the tree builder 10 via HTMLParserOptions, letting us remove the Frame dependency from the 11 tree builder. 12 13 As a consequence of this change, the "script enabled" bit in the parser 14 is now locked in when the parser starts. This bit doesn't actually 15 control when script execute, only how the <noscript> element is parsed. 16 17 * html/parser/HTMLDocumentParser.cpp: 18 (WebCore::tokenizerStateForContextElement): 19 (WebCore::HTMLDocumentParser::HTMLDocumentParser): 20 * html/parser/HTMLMetaCharsetParser.cpp: 21 (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser): 22 (WebCore::HTMLMetaCharsetParser::checkForMetaCharset): 23 * html/parser/HTMLParserOptions.cpp: 24 (WebCore::HTMLParserOptions::HTMLParserOptions): 25 * html/parser/HTMLParserOptions.h: 26 (HTMLParserOptions): 27 (WebCore::HTMLParserOptions::HTMLParserOptions): 28 * html/parser/HTMLPreloadScanner.cpp: 29 (WebCore::HTMLPreloadScanner::HTMLPreloadScanner): 30 (WebCore::HTMLPreloadScanner::processToken): 31 * html/parser/HTMLTokenizer.cpp: 32 (WebCore::HTMLTokenizer::HTMLTokenizer): 33 (WebCore::HTMLTokenizer::nextToken): 34 (WebCore::HTMLTokenizer::updateStateFor): 35 * html/parser/HTMLTokenizer.h: 36 (WebCore::HTMLTokenizer::create): 37 (HTMLTokenizer): 38 * html/parser/HTMLTreeBuilder.cpp: 39 (WebCore::HTMLTreeBuilder::processStartTagForInBody): 40 (WebCore::HTMLTreeBuilder::processStartTagForInHead): 41 * html/parser/HTMLTreeBuilder.h: 42 * html/parser/HTMLViewSourceParser.cpp: 43 (WebCore::HTMLViewSourceParser::HTMLViewSourceParser): 44 (WebCore::HTMLViewSourceParser::updateTokenizerState): 45 1 46 2013-01-07 Tony Chang <tony@chromium.org> 2 47 -
trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp
r139008 r139020 48 48 // This is a direct transcription of step 4 from: 49 49 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case 50 static HTMLTokenizerState::State tokenizerStateForContextElement(Element* contextElement, bool reportErrors )50 static HTMLTokenizerState::State tokenizerStateForContextElement(Element* contextElement, bool reportErrors, const HTMLParserOptions& options) 51 51 { 52 52 if (!contextElement) … … 60 60 || contextTag.matches(xmpTag) 61 61 || contextTag.matches(iframeTag) 62 || (contextTag.matches(noembedTag) && HTMLTreeBuilder::pluginsEnabled(contextElement->document()->frame()))63 || (contextTag.matches(noscriptTag) && HTMLTreeBuilder::scriptEnabled(contextElement->document()->frame()))62 || (contextTag.matches(noembedTag) && options.pluginsEnabled) 63 || (contextTag.matches(noscriptTag) && options.scriptEnabled) 64 64 || contextTag.matches(noframesTag)) 65 65 return reportErrors ? HTMLTokenizerState::RAWTEXTState : HTMLTokenizerState::PLAINTEXTState; … … 74 74 : ScriptableDocumentParser(document) 75 75 , m_options(document) 76 , m_tokenizer(HTMLTokenizer::create(m_options .usePreHTML5ParserQuirks))76 , m_tokenizer(HTMLTokenizer::create(m_options)) 77 77 , m_scriptRunner(HTMLScriptRunner::create(document, this)) 78 78 , m_treeBuilder(HTMLTreeBuilder::create(this, document, reportErrors, m_options)) … … 89 89 : ScriptableDocumentParser(fragment->document()) 90 90 , m_options(fragment->document()) 91 , m_tokenizer(HTMLTokenizer::create(m_options .usePreHTML5ParserQuirks))91 , m_tokenizer(HTMLTokenizer::create(m_options)) 92 92 , m_treeBuilder(HTMLTreeBuilder::create(this, fragment, contextElement, scriptingPermission, m_options)) 93 93 , m_xssAuditor(this) … … 96 96 { 97 97 bool reportErrors = false; // For now document fragment parsing never reports errors. 98 m_tokenizer->setState(tokenizerStateForContextElement(contextElement, reportErrors ));98 m_tokenizer->setState(tokenizerStateForContextElement(contextElement, reportErrors, m_options)); 99 99 } 100 100 -
trunk/Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp
r134116 r139020 29 29 #include "HTMLNames.h" 30 30 #include "HTMLParserIdioms.h" 31 #include "HTMLParserOptions.h" 31 32 #include "HTMLTokenizer.h" 32 33 #include "TextCodec.h" … … 41 42 42 43 HTMLMetaCharsetParser::HTMLMetaCharsetParser() 43 : m_tokenizer(HTMLTokenizer::create( false)) // No pre-HTML5 parser quirks.44 : m_tokenizer(HTMLTokenizer::create(HTMLParserOptions(0))) 44 45 , m_assumedCodec(newTextCodec(Latin1Encoding())) 45 46 , m_inHeadSection(true) … … 180 181 AtomicString tagName(m_token.name().data(), m_token.name().size()); 181 182 if (!end) { 182 m_tokenizer->updateStateFor(tagName , 0);183 m_tokenizer->updateStateFor(tagName); 183 184 if (tagName == metaTag && processMeta()) { 184 185 m_doneChecking = true; -
trunk/Source/WebCore/html/parser/HTMLParserOptions.cpp
r139008 r139020 28 28 29 29 #include "Document.h" 30 #include "Frame.h" 30 31 #include "Settings.h" 31 32 … … 34 35 HTMLParserOptions::HTMLParserOptions(Document* document) 35 36 { 36 ASSERT(document); 37 Settings* settings = document->settings(); 37 Frame* frame = document ? document->frame() : 0; 38 scriptEnabled = frame && frame->script()->canExecuteScripts(NotAboutToExecuteScript); 39 pluginsEnabled = frame && frame->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin); 40 41 Settings* settings = document ? document->settings() : 0; 38 42 usePreHTML5ParserQuirks = settings && settings->usePreHTML5ParserQuirks(); 39 43 maximumDOMTreeDepth = settings ? settings->maximumHTMLParserDOMTreeDepth() : Settings::defaultMaximumHTMLParserDOMTreeDepth; -
trunk/Source/WebCore/html/parser/HTMLParserOptions.h
r139008 r139020 33 33 class HTMLParserOptions { 34 34 public: 35 bool scriptEnabled; 36 bool pluginsEnabled; 35 37 bool usePreHTML5ParserQuirks; 36 38 unsigned maximumDOMTreeDepth; 37 38 HTMLParserOptions()39 : usePreHTML5ParserQuirks(false)40 , maximumDOMTreeDepth(0)41 {42 }43 39 44 40 explicit HTMLParserOptions(Document*); -
trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp
r139008 r139020 166 166 : m_document(document) 167 167 , m_cssScanner(document) 168 , m_tokenizer(HTMLTokenizer::create(options .usePreHTML5ParserQuirks))168 , m_tokenizer(HTMLTokenizer::create(options)) 169 169 , m_inStyle(false) 170 170 { … … 204 204 205 205 PreloadTask task(m_token); 206 m_tokenizer->updateStateFor(task.tagName() , m_document->frame());206 m_tokenizer->updateStateFor(task.tagName()); 207 207 208 208 if (task.tagName() == styleTag) -
trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp
r138227 r139020 108 108 #define HTML_SWITCH_TO(stateName) SWITCH_TO(HTMLTokenizerState, stateName) 109 109 110 HTMLTokenizer::HTMLTokenizer( bool usePreHTML5ParserQuirks)111 : m_ usePreHTML5ParserQuirks(usePreHTML5ParserQuirks)110 HTMLTokenizer::HTMLTokenizer(const HTMLParserOptions& options) 111 : m_options(options) 112 112 { 113 113 reset(); … … 344 344 else if (cc == '>') 345 345 return emitAndResumeIn(source, HTMLTokenizerState::DataState); 346 else if (m_ usePreHTML5ParserQuirks && cc == '<')346 else if (m_options.usePreHTML5ParserQuirks && cc == '<') 347 347 return emitAndReconsumeIn(source, HTMLTokenizerState::DataState); 348 348 else if (isASCIIUpper(cc)) { … … 815 815 else if (cc == '>') 816 816 return emitAndResumeIn(source, HTMLTokenizerState::DataState); 817 else if (m_ usePreHTML5ParserQuirks && cc == '<')817 else if (m_options.usePreHTML5ParserQuirks && cc == '<') 818 818 return emitAndReconsumeIn(source, HTMLTokenizerState::DataState); 819 819 else if (isASCIIUpper(cc)) { … … 849 849 m_token->endAttributeName(source.numberOfCharactersConsumed()); 850 850 return emitAndResumeIn(source, HTMLTokenizerState::DataState); 851 } else if (m_ usePreHTML5ParserQuirks && cc == '<') {851 } else if (m_options.usePreHTML5ParserQuirks && cc == '<') { 852 852 m_token->endAttributeName(source.numberOfCharactersConsumed()); 853 853 return emitAndReconsumeIn(source, HTMLTokenizerState::DataState); … … 877 877 else if (cc == '>') 878 878 return emitAndResumeIn(source, HTMLTokenizerState::DataState); 879 else if (m_ usePreHTML5ParserQuirks && cc == '<')879 else if (m_options.usePreHTML5ParserQuirks && cc == '<') 880 880 return emitAndReconsumeIn(source, HTMLTokenizerState::DataState); 881 881 else if (isASCIIUpper(cc)) { … … 1020 1020 else if (cc == '>') 1021 1021 return emitAndResumeIn(source, HTMLTokenizerState::DataState); 1022 else if (m_ usePreHTML5ParserQuirks && cc == '<')1022 else if (m_options.usePreHTML5ParserQuirks && cc == '<') 1023 1023 return emitAndReconsumeIn(source, HTMLTokenizerState::DataState); 1024 1024 else if (cc == InputStreamPreprocessor::endOfFileMarker) { … … 1590 1590 } 1591 1591 1592 void HTMLTokenizer::updateStateFor(const AtomicString& tagName , Frame* frame)1592 void HTMLTokenizer::updateStateFor(const AtomicString& tagName) 1593 1593 { 1594 1594 if (tagName == textareaTag || tagName == titleTag) … … 1601 1601 || tagName == iframeTag 1602 1602 || tagName == xmpTag 1603 || (tagName == noembedTag && HTMLTreeBuilder::pluginsEnabled(frame))1603 || (tagName == noembedTag && m_options.pluginsEnabled) 1604 1604 || tagName == noframesTag 1605 || (tagName == noscriptTag && HTMLTreeBuilder::scriptEnabled(frame)))1605 || (tagName == noscriptTag && m_options.scriptEnabled)) 1606 1606 setState(HTMLTokenizerState::RAWTEXTState); 1607 1607 } -
trunk/Source/WebCore/html/parser/HTMLTokenizer.h
r132165 r139020 28 28 #define HTMLTokenizer_h 29 29 30 #include "HTMLParserOptions.h" 30 31 #include "HTMLToken.h" 31 32 #include "MarkupTokenizerBase.h" … … 33 34 34 35 namespace WebCore { 35 36 class Frame;37 36 38 37 class HTMLTokenizerState { … … 121 120 WTF_MAKE_FAST_ALLOCATED; 122 121 public: 123 static PassOwnPtr<HTMLTokenizer> create( bool usePreHTML5ParserQuirks) { return adoptPtr(new HTMLTokenizer(usePreHTML5ParserQuirks)); }122 static PassOwnPtr<HTMLTokenizer> create(const HTMLParserOptions& options) { return adoptPtr(new HTMLTokenizer(options)); } 124 123 ~HTMLTokenizer(); 125 124 … … 158 157 // instead of as character tokens. 159 158 // 160 void updateStateFor(const AtomicString& tagName , Frame*);159 void updateStateFor(const AtomicString& tagName); 161 160 162 161 bool forceNullCharacterReplacement() const { return m_forceNullCharacterReplacement; } … … 167 166 168 167 private: 169 explicit HTMLTokenizer( bool usePreHTML5ParserQuirks);168 explicit HTMLTokenizer(const HTMLParserOptions&); 170 169 171 170 inline bool processEntity(SegmentedString&); … … 217 216 Vector<LChar, 32> m_bufferedEndTagName; 218 217 219 bool m_usePreHTML5ParserQuirks;218 HTMLParserOptions m_options; 220 219 }; 221 220 -
trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
r139008 r139020 32 32 #include "DocumentFragment.h" 33 33 #include "DocumentType.h" 34 #include "Frame.h"35 34 #include "HTMLDocument.h" 36 35 #include "HTMLDocumentParser.h" … … 895 894 return; 896 895 } 897 if (token->name() == noembedTag && pluginsEnabled(m_document->frame())) {896 if (token->name() == noembedTag && m_options.pluginsEnabled) { 898 897 processGenericRawTextStartTag(token); 899 898 return; 900 899 } 901 if (token->name() == noscriptTag && scriptEnabled(m_document->frame())) {900 if (token->name() == noscriptTag && m_options.scriptEnabled) { 902 901 processGenericRawTextStartTag(token); 903 902 return; … … 2691 2690 } 2692 2691 if (token->name() == noscriptTag) { 2693 if ( scriptEnabled(m_document->frame())) {2692 if (m_options.scriptEnabled) { 2694 2693 processGenericRawTextStartTag(token); 2695 2694 return true; … … 2914 2913 } 2915 2914 2916 bool HTMLTreeBuilder::scriptEnabled(Frame* frame) 2917 { 2918 if (!frame) 2919 return false; 2920 return frame->script()->canExecuteScripts(NotAboutToExecuteScript); 2921 } 2922 2923 bool HTMLTreeBuilder::pluginsEnabled(Frame* frame) 2924 { 2925 if (!frame) 2926 return false; 2927 return frame->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin); 2928 } 2929 2930 } 2915 } -
trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h
r139008 r139020 91 91 92 92 void setShouldSkipLeadingNewline(bool shouldSkip) { m_shouldSkipLeadingNewline = shouldSkip; } 93 94 static bool scriptEnabled(Frame*);95 static bool pluginsEnabled(Frame*);96 93 97 94 private: -
trunk/Source/WebCore/html/parser/HTMLViewSourceParser.cpp
r139008 r139020 36 36 HTMLViewSourceParser::HTMLViewSourceParser(HTMLViewSourceDocument* document) 37 37 : DecodedDataDocumentParser(document) 38 , m_tokenizer(HTMLTokenizer::create(HTMLParserOptions(document) .usePreHTML5ParserQuirks))38 , m_tokenizer(HTMLTokenizer::create(HTMLParserOptions(document))) 39 39 { 40 40 } … … 81 81 82 82 AtomicString tagName(m_token.name().data(), m_token.name().size()); 83 m_tokenizer->updateStateFor(tagName , document()->frame());83 m_tokenizer->updateStateFor(tagName); 84 84 } 85 85
Note: See TracChangeset
for help on using the changeset viewer.