Changeset 82916 in webkit
- Timestamp:
- Apr 5, 2011 2:27:58 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r82913 r82916 1 2011-04-05 James Simonsen <simonjam@chromium.org> 2 3 Reviewed by Adam Barth. 4 5 Stop preload scanning CSS when it's impossible to have another @import. 6 https://bugs.webkit.org/show_bug.cgi?id=57664 7 8 * fast/preloader/style-expected.txt: 9 * fast/preloader/style.html: Updated to test invalid @import statements. 10 1 11 2011-04-05 Kent Tamura <tkent@chromium.org> 2 12 -
trunk/LayoutTests/fast/preloader/style-expected.txt
r61366 r82916 3 3 4 4 <style> 5 @charset "ascii"; 6 /* */ 5 7 @import "resources/style1.css"; 8 em { 9 @import "resources/fail.css"; 10 } 11 @import "resources/fail.css"; 12 </style> 13 <style> 14 @media print { 15 @import "resources/fail.css"; 16 } 17 @import "resources/fail.css"; 6 18 </style> 7 19 -
trunk/LayoutTests/fast/preloader/style.html
r61370 r82916 10 10 <script>document.write("<plaintext>");</script> 11 11 <style> 12 @charset "ascii"; 13 /* */ 12 14 @import "resources/style1.css"; 15 em { 16 @import "resources/fail.css"; 17 } 18 @import "resources/fail.css"; 13 19 </style> 20 <style> 21 @media print { 22 @import "resources/fail.css"; 23 } 24 @import "resources/fail.css"; 25 </style> -
trunk/Source/WebCore/ChangeLog
r82915 r82916 1 2011-04-05 James Simonsen <simonjam@chromium.org> 2 3 Reviewed by Adam Barth. 4 5 Stop preload scanning CSS when it's impossible to have another @import. 6 https://bugs.webkit.org/show_bug.cgi?id=57664 7 8 @import statements are only allowed at the beginning of a CSS file. 9 Only comments or @charset can precede them. After seeing anything else, 10 abort early so that we: 11 - don't have to parse the rest of the CSS. 12 - don't preload something that the regular parser won't load. 13 14 * html/parser/CSSPreloadScanner.cpp: 15 (WebCore::CSSPreloadScanner::scan): Terminate early if we're done with @imports. 16 (WebCore::CSSPreloadScanner::tokenize): Terminate early if we see a {} or any style rule. 17 (WebCore::CSSPreloadScanner::emitRule): Only @charset or @import are allowed to precede @import. 18 * html/parser/CSSPreloadScanner.h: Add DoneParsingImportRules state. 19 1 20 2011-04-05 Takayoshi Kochi <kochi@chromium.org> 2 21 -
trunk/Source/WebCore/html/parser/CSSPreloadScanner.cpp
r68854 r82916 55 55 56 56 const HTMLToken::DataVector& characters = token.characters(); 57 for (HTMLToken::DataVector::const_iterator iter = characters.begin(); iter != characters.end() ; ++iter)57 for (HTMLToken::DataVector::const_iterator iter = characters.begin(); iter != characters.end() && m_state != DoneParsingImportRules; ++iter) 58 58 tokenize(*iter); 59 59 } … … 65 65 switch (m_state) { 66 66 case Initial: 67 if (isHTMLSpace(c)) 68 break; 67 69 if (c == '@') 68 70 m_state = RuleStart; 69 71 else if (c == '/') 70 72 m_state = MaybeComment; 73 else 74 m_state = DoneParsingImportRules; 71 75 break; 72 76 case MaybeComment: … … 81 85 break; 82 86 case MaybeCommentEnd: 87 if (c == '*') 88 break; 83 89 if (c == '/') 84 90 m_state = Initial; 85 else if (c == '*')86 ;87 91 else 88 92 m_state = Comment; … … 107 111 case AfterRule: 108 112 if (isHTMLSpace(c)) 109 ; 110 else if (c == ';') 111 m_state = Initial; 113 break; 114 if (c == ';') 115 m_state = Initial; 116 else if (c == '{') 117 m_state = DoneParsingImportRules; 112 118 else { 113 119 m_state = RuleValue; … … 118 124 if (isHTMLSpace(c)) 119 125 m_state = AfterRuleValue; 120 else if (c == ';') {126 else if (c == ';') 121 127 emitRule(); 122 m_state = Initial; 123 } else 128 else 124 129 m_ruleValue.append(c); 125 130 break; 126 131 case AfterRuleValue: 127 132 if (isHTMLSpace(c)) 128 ;129 else if (c == ';') {133 break; 134 if (c == ';') 130 135 emitRule(); 131 m_state = Initial; 132 } else { 136 else if (c == '{') 137 m_state = DoneParsingImportRules; 138 else { 133 139 // FIXME: media rules 134 140 m_state = Initial; 135 141 } 142 break; 143 case DoneParsingImportRules: 144 ASSERT_NOT_REACHED(); 136 145 break; 137 146 } … … 188 197 if (!value.isEmpty()) 189 198 m_document->cachedResourceLoader()->preload(CachedResource::CSSStyleSheet, value, String(), m_scanningBody); 190 } 199 m_state = Initial; 200 } else if (equalIgnoringCase("charset", m_rule.data(), m_rule.size())) 201 m_state = Initial; 202 else 203 m_state = DoneParsingImportRules; 191 204 m_rule.clear(); 192 205 m_ruleValue.clear(); -
trunk/Source/WebCore/html/parser/CSSPreloadScanner.h
r76248 r82916 54 54 AfterRule, 55 55 RuleValue, 56 AfterRuleValue 56 AfterRuleValue, 57 DoneParsingImportRules, 57 58 }; 58 59
Note: See TracChangeset
for help on using the changeset viewer.