| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/css/parser/CSSParserImpl.h" | 5 #include "core/css/parser/CSSParserImpl.h" |
| 6 | 6 |
| 7 #include "core/css/CSSCustomPropertyDeclaration.h" | 7 #include "core/css/CSSCustomPropertyDeclaration.h" |
| 8 #include "core/css/CSSKeyframesRule.h" | 8 #include "core/css/CSSKeyframesRule.h" |
| 9 #include "core/css/CSSStyleSheet.h" | 9 #include "core/css/CSSStyleSheet.h" |
| 10 #include "core/css/StylePropertySet.h" | 10 #include "core/css/StylePropertySet.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 bool CSSParserImpl::parseVariableValue(MutableStylePropertySet* declaration, con
st AtomicString& propertyName, const String& value, bool important, const CSSPar
serContext& context) | 54 bool CSSParserImpl::parseVariableValue(MutableStylePropertySet* declaration, con
st AtomicString& propertyName, const String& value, bool important, const CSSPar
serContext& context) |
| 55 { | 55 { |
| 56 CSSParserImpl parser(context); | 56 CSSParserImpl parser(context); |
| 57 CSSTokenizer::Scope scope(value); | 57 CSSTokenizer::Scope scope(value); |
| 58 parser.consumeVariableValue(scope.tokenRange(), propertyName, important); | 58 parser.consumeVariableValue(scope.tokenRange(), propertyName, important); |
| 59 if (parser.m_parsedProperties.isEmpty()) | 59 if (parser.m_parsedProperties.isEmpty()) |
| 60 return false; | 60 return false; |
| 61 return declaration->addParsedProperties(parser.m_parsedProperties); | 61 return declaration->addParsedProperties(parser.m_parsedProperties); |
| 62 } | 62 } |
| 63 | 63 |
| 64 static inline void filterProperties(bool important, const WillBeHeapVector<CSSPr
operty, 256>& input, WillBeHeapVector<CSSProperty, 256>& output, size_t& unusedE
ntries, BitArray<numCSSProperties>& seenProperties) | 64 static inline void filterProperties(bool important, const HeapVector<CSSProperty
, 256>& input, HeapVector<CSSProperty, 256>& output, size_t& unusedEntries, BitA
rray<numCSSProperties>& seenProperties) |
| 65 { | 65 { |
| 66 // Add properties in reverse order so that highest priority definitions are
reached first. Duplicate definitions can then be ignored when found. | 66 // Add properties in reverse order so that highest priority definitions are
reached first. Duplicate definitions can then be ignored when found. |
| 67 for (size_t i = input.size(); i--; ) { | 67 for (size_t i = input.size(); i--; ) { |
| 68 const CSSProperty& property = input[i]; | 68 const CSSProperty& property = input[i]; |
| 69 if (property.isImportant() != important) | 69 if (property.isImportant() != important) |
| 70 continue; | 70 continue; |
| 71 const unsigned propertyIDIndex = property.id() - firstCSSProperty; | 71 const unsigned propertyIDIndex = property.id() - firstCSSProperty; |
| 72 // All custom properties use the same CSSPropertyID so we can't remove r
epeated definitions | 72 // All custom properties use the same CSSPropertyID so we can't remove r
epeated definitions |
| 73 if (property.id() != CSSPropertyVariable) { | 73 if (property.id() != CSSPropertyVariable) { |
| 74 if (seenProperties.get(propertyIDIndex)) | 74 if (seenProperties.get(propertyIDIndex)) |
| 75 continue; | 75 continue; |
| 76 seenProperties.set(propertyIDIndex); | 76 seenProperties.set(propertyIDIndex); |
| 77 } | 77 } |
| 78 output[--unusedEntries] = property; | 78 output[--unusedEntries] = property; |
| 79 } | 79 } |
| 80 } | 80 } |
| 81 | 81 |
| 82 static PassRefPtrWillBeRawPtr<ImmutableStylePropertySet> createStylePropertySet(
WillBeHeapVector<CSSProperty, 256>& parsedProperties, CSSParserMode mode) | 82 static RawPtr<ImmutableStylePropertySet> createStylePropertySet(HeapVector<CSSPr
operty, 256>& parsedProperties, CSSParserMode mode) |
| 83 { | 83 { |
| 84 BitArray<numCSSProperties> seenProperties; | 84 BitArray<numCSSProperties> seenProperties; |
| 85 size_t unusedEntries = parsedProperties.size(); | 85 size_t unusedEntries = parsedProperties.size(); |
| 86 WillBeHeapVector<CSSProperty, 256> results(unusedEntries); | 86 HeapVector<CSSProperty, 256> results(unusedEntries); |
| 87 | 87 |
| 88 filterProperties(true, parsedProperties, results, unusedEntries, seenPropert
ies); | 88 filterProperties(true, parsedProperties, results, unusedEntries, seenPropert
ies); |
| 89 filterProperties(false, parsedProperties, results, unusedEntries, seenProper
ties); | 89 filterProperties(false, parsedProperties, results, unusedEntries, seenProper
ties); |
| 90 | 90 |
| 91 RefPtrWillBeRawPtr<ImmutableStylePropertySet> result = ImmutableStylePropert
ySet::create(results.data() + unusedEntries, results.size() - unusedEntries, mod
e); | 91 RawPtr<ImmutableStylePropertySet> result = ImmutableStylePropertySet::create
(results.data() + unusedEntries, results.size() - unusedEntries, mode); |
| 92 parsedProperties.clear(); | 92 parsedProperties.clear(); |
| 93 return result.release(); | 93 return result.release(); |
| 94 } | 94 } |
| 95 | 95 |
| 96 PassRefPtrWillBeRawPtr<ImmutableStylePropertySet> CSSParserImpl::parseInlineStyl
eDeclaration(const String& string, Element* element) | 96 RawPtr<ImmutableStylePropertySet> CSSParserImpl::parseInlineStyleDeclaration(con
st String& string, Element* element) |
| 97 { | 97 { |
| 98 Document& document = element->document(); | 98 Document& document = element->document(); |
| 99 CSSParserContext context = CSSParserContext(document.elementSheet().contents
()->parserContext(), UseCounter::getFrom(&document)); | 99 CSSParserContext context = CSSParserContext(document.elementSheet().contents
()->parserContext(), UseCounter::getFrom(&document)); |
| 100 CSSParserMode mode = element->isHTMLElement() && !document.inQuirksMode() ?
HTMLStandardMode : HTMLQuirksMode; | 100 CSSParserMode mode = element->isHTMLElement() && !document.inQuirksMode() ?
HTMLStandardMode : HTMLQuirksMode; |
| 101 context.setMode(mode); | 101 context.setMode(mode); |
| 102 CSSParserImpl parser(context, document.elementSheet().contents()); | 102 CSSParserImpl parser(context, document.elementSheet().contents()); |
| 103 CSSTokenizer::Scope scope(string); | 103 CSSTokenizer::Scope scope(string); |
| 104 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); | 104 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); |
| 105 return createStylePropertySet(parser.m_parsedProperties, mode); | 105 return createStylePropertySet(parser.m_parsedProperties, mode); |
| 106 } | 106 } |
| 107 | 107 |
| 108 bool CSSParserImpl::parseDeclarationList(MutableStylePropertySet* declaration, c
onst String& string, const CSSParserContext& context) | 108 bool CSSParserImpl::parseDeclarationList(MutableStylePropertySet* declaration, c
onst String& string, const CSSParserContext& context) |
| 109 { | 109 { |
| 110 CSSParserImpl parser(context); | 110 CSSParserImpl parser(context); |
| 111 StyleRule::Type ruleType = StyleRule::Style; | 111 StyleRule::Type ruleType = StyleRule::Style; |
| 112 if (declaration->cssParserMode() == CSSViewportRuleMode) | 112 if (declaration->cssParserMode() == CSSViewportRuleMode) |
| 113 ruleType = StyleRule::Viewport; | 113 ruleType = StyleRule::Viewport; |
| 114 CSSTokenizer::Scope scope(string); | 114 CSSTokenizer::Scope scope(string); |
| 115 parser.consumeDeclarationList(scope.tokenRange(), ruleType); | 115 parser.consumeDeclarationList(scope.tokenRange(), ruleType); |
| 116 if (parser.m_parsedProperties.isEmpty()) | 116 if (parser.m_parsedProperties.isEmpty()) |
| 117 return false; | 117 return false; |
| 118 | 118 |
| 119 BitArray<numCSSProperties> seenProperties; | 119 BitArray<numCSSProperties> seenProperties; |
| 120 size_t unusedEntries = parser.m_parsedProperties.size(); | 120 size_t unusedEntries = parser.m_parsedProperties.size(); |
| 121 WillBeHeapVector<CSSProperty, 256> results(unusedEntries); | 121 HeapVector<CSSProperty, 256> results(unusedEntries); |
| 122 filterProperties(true, parser.m_parsedProperties, results, unusedEntries, se
enProperties); | 122 filterProperties(true, parser.m_parsedProperties, results, unusedEntries, se
enProperties); |
| 123 filterProperties(false, parser.m_parsedProperties, results, unusedEntries, s
eenProperties); | 123 filterProperties(false, parser.m_parsedProperties, results, unusedEntries, s
eenProperties); |
| 124 if (unusedEntries) | 124 if (unusedEntries) |
| 125 results.remove(0, unusedEntries); | 125 results.remove(0, unusedEntries); |
| 126 return declaration->addParsedProperties(results); | 126 return declaration->addParsedProperties(results); |
| 127 } | 127 } |
| 128 | 128 |
| 129 PassRefPtrWillBeRawPtr<StyleRuleBase> CSSParserImpl::parseRule(const String& str
ing, const CSSParserContext& context, StyleSheetContents* styleSheet, AllowedRul
esType allowedRules) | 129 RawPtr<StyleRuleBase> CSSParserImpl::parseRule(const String& string, const CSSPa
rserContext& context, StyleSheetContents* styleSheet, AllowedRulesType allowedRu
les) |
| 130 { | 130 { |
| 131 CSSParserImpl parser(context, styleSheet); | 131 CSSParserImpl parser(context, styleSheet); |
| 132 CSSTokenizer::Scope scope(string); | 132 CSSTokenizer::Scope scope(string); |
| 133 CSSParserTokenRange range = scope.tokenRange(); | 133 CSSParserTokenRange range = scope.tokenRange(); |
| 134 range.consumeWhitespace(); | 134 range.consumeWhitespace(); |
| 135 if (range.atEnd()) | 135 if (range.atEnd()) |
| 136 return nullptr; // Parse error, empty rule | 136 return nullptr; // Parse error, empty rule |
| 137 RefPtrWillBeRawPtr<StyleRuleBase> rule; | 137 RawPtr<StyleRuleBase> rule; |
| 138 if (range.peek().type() == AtKeywordToken) | 138 if (range.peek().type() == AtKeywordToken) |
| 139 rule = parser.consumeAtRule(range, allowedRules); | 139 rule = parser.consumeAtRule(range, allowedRules); |
| 140 else | 140 else |
| 141 rule = parser.consumeQualifiedRule(range, allowedRules); | 141 rule = parser.consumeQualifiedRule(range, allowedRules); |
| 142 if (!rule) | 142 if (!rule) |
| 143 return nullptr; // Parse error, failed to consume rule | 143 return nullptr; // Parse error, failed to consume rule |
| 144 range.consumeWhitespace(); | 144 range.consumeWhitespace(); |
| 145 if (!rule || !range.atEnd()) | 145 if (!rule || !range.atEnd()) |
| 146 return nullptr; // Parse error, trailing garbage | 146 return nullptr; // Parse error, trailing garbage |
| 147 return rule; | 147 return rule; |
| 148 } | 148 } |
| 149 | 149 |
| 150 void CSSParserImpl::parseStyleSheet(const String& string, const CSSParserContext
& context, StyleSheetContents* styleSheet) | 150 void CSSParserImpl::parseStyleSheet(const String& string, const CSSParserContext
& context, StyleSheetContents* styleSheet) |
| 151 { | 151 { |
| 152 TRACE_EVENT_BEGIN2( | 152 TRACE_EVENT_BEGIN2( |
| 153 "blink,blink_style", "CSSParserImpl::parseStyleSheet", | 153 "blink,blink_style", "CSSParserImpl::parseStyleSheet", |
| 154 "baseUrl", context.baseURL().string().utf8(), | 154 "baseUrl", context.baseURL().string().utf8(), |
| 155 "mode", context.mode()); | 155 "mode", context.mode()); |
| 156 | 156 |
| 157 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke
nize"); | 157 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke
nize"); |
| 158 CSSTokenizer::Scope scope(string); | 158 CSSTokenizer::Scope scope(string); |
| 159 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni
ze"); | 159 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni
ze"); |
| 160 | 160 |
| 161 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars
e"); | 161 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars
e"); |
| 162 CSSParserImpl parser(context, styleSheet); | 162 CSSParserImpl parser(context, styleSheet); |
| 163 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](PassRefPtrWillBeRawPtr<StyleRuleBase> rule) { | 163 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](RawPtr<StyleRuleBase> rule) { |
| 164 if (rule->isCharsetRule()) | 164 if (rule->isCharsetRule()) |
| 165 return; | 165 return; |
| 166 styleSheet->parserAppendRule(rule); | 166 styleSheet->parserAppendRule(rule); |
| 167 }); | 167 }); |
| 168 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); | 168 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); |
| 169 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse"
); | 169 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse"
); |
| 170 | 170 |
| 171 TRACE_EVENT_END2( | 171 TRACE_EVENT_END2( |
| 172 "blink,blink_style", "CSSParserImpl::parseStyleSheet", | 172 "blink,blink_style", "CSSParserImpl::parseStyleSheet", |
| 173 "tokenCount", scope.tokenCount(), | 173 "tokenCount", scope.tokenCount(), |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 observer.endRuleHeader(1); | 241 observer.endRuleHeader(1); |
| 242 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); | 242 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); |
| 243 } | 243 } |
| 244 | 244 |
| 245 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP
arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ
er) | 245 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP
arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ
er) |
| 246 { | 246 { |
| 247 CSSParserImpl parser(context, styleSheet); | 247 CSSParserImpl parser(context, styleSheet); |
| 248 CSSParserObserverWrapper wrapper(observer); | 248 CSSParserObserverWrapper wrapper(observer); |
| 249 parser.m_observerWrapper = &wrapper; | 249 parser.m_observerWrapper = &wrapper; |
| 250 CSSTokenizer::Scope scope(string, wrapper); | 250 CSSTokenizer::Scope scope(string, wrapper); |
| 251 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](PassRefPtrWillBeRawPtr<StyleRuleBase> rule) { | 251 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](RawPtr<StyleRuleBase> rule) { |
| 252 if (rule->isCharsetRule()) | 252 if (rule->isCharsetRule()) |
| 253 return; | 253 return; |
| 254 styleSheet->parserAppendRule(rule); | 254 styleSheet->parserAppendRule(rule); |
| 255 }); | 255 }); |
| 256 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); | 256 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); |
| 257 } | 257 } |
| 258 | 258 |
| 259 static CSSParserImpl::AllowedRulesType computeNewAllowedRules(CSSParserImpl::All
owedRulesType allowedRules, StyleRuleBase* rule) | 259 static CSSParserImpl::AllowedRulesType computeNewAllowedRules(CSSParserImpl::All
owedRulesType allowedRules, StyleRuleBase* rule) |
| 260 { | 260 { |
| 261 if (!rule || allowedRules == CSSParserImpl::KeyframeRules || allowedRules ==
CSSParserImpl::NoRules) | 261 if (!rule || allowedRules == CSSParserImpl::KeyframeRules || allowedRules ==
CSSParserImpl::NoRules) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 282 case KeyframesRuleList: | 282 case KeyframesRuleList: |
| 283 allowedRules = KeyframeRules; | 283 allowedRules = KeyframeRules; |
| 284 break; | 284 break; |
| 285 default: | 285 default: |
| 286 ASSERT_NOT_REACHED(); | 286 ASSERT_NOT_REACHED(); |
| 287 } | 287 } |
| 288 | 288 |
| 289 bool seenRule = false; | 289 bool seenRule = false; |
| 290 bool firstRuleValid = false; | 290 bool firstRuleValid = false; |
| 291 while (!range.atEnd()) { | 291 while (!range.atEnd()) { |
| 292 RefPtrWillBeRawPtr<StyleRuleBase> rule; | 292 RawPtr<StyleRuleBase> rule; |
| 293 switch (range.peek().type()) { | 293 switch (range.peek().type()) { |
| 294 case WhitespaceToken: | 294 case WhitespaceToken: |
| 295 range.consumeWhitespace(); | 295 range.consumeWhitespace(); |
| 296 continue; | 296 continue; |
| 297 case AtKeywordToken: | 297 case AtKeywordToken: |
| 298 rule = consumeAtRule(range, allowedRules); | 298 rule = consumeAtRule(range, allowedRules); |
| 299 break; | 299 break; |
| 300 case CDOToken: | 300 case CDOToken: |
| 301 case CDCToken: | 301 case CDCToken: |
| 302 if (ruleListType == TopLevelRuleList) { | 302 if (ruleListType == TopLevelRuleList) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 314 } | 314 } |
| 315 if (rule) { | 315 if (rule) { |
| 316 allowedRules = computeNewAllowedRules(allowedRules, rule.get()); | 316 allowedRules = computeNewAllowedRules(allowedRules, rule.get()); |
| 317 callback(rule.release()); | 317 callback(rule.release()); |
| 318 } | 318 } |
| 319 } | 319 } |
| 320 | 320 |
| 321 return firstRuleValid; | 321 return firstRuleValid; |
| 322 } | 322 } |
| 323 | 323 |
| 324 PassRefPtrWillBeRawPtr<StyleRuleBase> CSSParserImpl::consumeAtRule(CSSParserToke
nRange& range, AllowedRulesType allowedRules) | 324 RawPtr<StyleRuleBase> CSSParserImpl::consumeAtRule(CSSParserTokenRange& range, A
llowedRulesType allowedRules) |
| 325 { | 325 { |
| 326 ASSERT(range.peek().type() == AtKeywordToken); | 326 ASSERT(range.peek().type() == AtKeywordToken); |
| 327 const CSSParserString& name = range.consume().value(); | 327 const CSSParserString& name = range.consume().value(); |
| 328 const CSSParserToken* preludeStart = &range.peek(); | 328 const CSSParserToken* preludeStart = &range.peek(); |
| 329 while (!range.atEnd() && range.peek().type() != LeftBraceToken && range.peek
().type() != SemicolonToken) | 329 while (!range.atEnd() && range.peek().type() != LeftBraceToken && range.peek
().type() != SemicolonToken) |
| 330 range.consumeComponentValue(); | 330 range.consumeComponentValue(); |
| 331 | 331 |
| 332 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek()
); | 332 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek()
); |
| 333 CSSAtRuleID id = cssAtRuleID(name); | 333 CSSAtRuleID id = cssAtRuleID(name); |
| 334 if (id != CSSAtRuleInvalid && m_context.useCounter()) | 334 if (id != CSSAtRuleInvalid && m_context.useCounter()) |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 return consumeKeyframesRule(true, prelude, block); | 366 return consumeKeyframesRule(true, prelude, block); |
| 367 case CSSAtRuleKeyframes: | 367 case CSSAtRuleKeyframes: |
| 368 return consumeKeyframesRule(false, prelude, block); | 368 return consumeKeyframesRule(false, prelude, block); |
| 369 case CSSAtRulePage: | 369 case CSSAtRulePage: |
| 370 return consumePageRule(prelude, block); | 370 return consumePageRule(prelude, block); |
| 371 default: | 371 default: |
| 372 return nullptr; // Parse error, unrecognised at-rule with block | 372 return nullptr; // Parse error, unrecognised at-rule with block |
| 373 } | 373 } |
| 374 } | 374 } |
| 375 | 375 |
| 376 PassRefPtrWillBeRawPtr<StyleRuleBase> CSSParserImpl::consumeQualifiedRule(CSSPar
serTokenRange& range, AllowedRulesType allowedRules) | 376 RawPtr<StyleRuleBase> CSSParserImpl::consumeQualifiedRule(CSSParserTokenRange& r
ange, AllowedRulesType allowedRules) |
| 377 { | 377 { |
| 378 const CSSParserToken* preludeStart = &range.peek(); | 378 const CSSParserToken* preludeStart = &range.peek(); |
| 379 while (!range.atEnd() && range.peek().type() != LeftBraceToken) | 379 while (!range.atEnd() && range.peek().type() != LeftBraceToken) |
| 380 range.consumeComponentValue(); | 380 range.consumeComponentValue(); |
| 381 | 381 |
| 382 if (range.atEnd()) | 382 if (range.atEnd()) |
| 383 return nullptr; // Parse error, EOF instead of qualified rule block | 383 return nullptr; // Parse error, EOF instead of qualified rule block |
| 384 | 384 |
| 385 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek()
); | 385 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek()
); |
| 386 CSSParserTokenRange block = range.consumeBlock(); | 386 CSSParserTokenRange block = range.consumeBlock(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 406 return AtomicString(); | 406 return AtomicString(); |
| 407 | 407 |
| 408 CSSParserTokenRange contents = range.consumeBlock(); | 408 CSSParserTokenRange contents = range.consumeBlock(); |
| 409 const CSSParserToken& uri = contents.consumeIncludingWhitespace(); | 409 const CSSParserToken& uri = contents.consumeIncludingWhitespace(); |
| 410 ASSERT(uri.type() == StringToken); | 410 ASSERT(uri.type() == StringToken); |
| 411 if (!contents.atEnd()) | 411 if (!contents.atEnd()) |
| 412 return AtomicString(); | 412 return AtomicString(); |
| 413 return uri.value(); | 413 return uri.value(); |
| 414 } | 414 } |
| 415 | 415 |
| 416 PassRefPtrWillBeRawPtr<StyleRuleCharset> CSSParserImpl::consumeCharsetRule(CSSPa
rserTokenRange prelude) | 416 RawPtr<StyleRuleCharset> CSSParserImpl::consumeCharsetRule(CSSParserTokenRange p
relude) |
| 417 { | 417 { |
| 418 prelude.consumeWhitespace(); | 418 prelude.consumeWhitespace(); |
| 419 const CSSParserToken& string = prelude.consumeIncludingWhitespace(); | 419 const CSSParserToken& string = prelude.consumeIncludingWhitespace(); |
| 420 if (string.type() != StringToken || !prelude.atEnd()) | 420 if (string.type() != StringToken || !prelude.atEnd()) |
| 421 return nullptr; // Parse error, expected a single string | 421 return nullptr; // Parse error, expected a single string |
| 422 return StyleRuleCharset::create(); | 422 return StyleRuleCharset::create(); |
| 423 } | 423 } |
| 424 | 424 |
| 425 PassRefPtrWillBeRawPtr<StyleRuleImport> CSSParserImpl::consumeImportRule(CSSPars
erTokenRange prelude) | 425 RawPtr<StyleRuleImport> CSSParserImpl::consumeImportRule(CSSParserTokenRange pre
lude) |
| 426 { | 426 { |
| 427 prelude.consumeWhitespace(); | 427 prelude.consumeWhitespace(); |
| 428 AtomicString uri(consumeStringOrURI(prelude)); | 428 AtomicString uri(consumeStringOrURI(prelude)); |
| 429 if (uri.isNull()) | 429 if (uri.isNull()) |
| 430 return nullptr; // Parse error, expected string or URI | 430 return nullptr; // Parse error, expected string or URI |
| 431 | 431 |
| 432 if (m_observerWrapper) { | 432 if (m_observerWrapper) { |
| 433 unsigned endOffset = m_observerWrapper->endOffset(prelude); | 433 unsigned endOffset = m_observerWrapper->endOffset(prelude); |
| 434 m_observerWrapper->observer().startRuleHeader(StyleRule::Import, m_obser
verWrapper->startOffset(prelude)); | 434 m_observerWrapper->observer().startRuleHeader(StyleRule::Import, m_obser
verWrapper->startOffset(prelude)); |
| 435 m_observerWrapper->observer().endRuleHeader(endOffset); | 435 m_observerWrapper->observer().endRuleHeader(endOffset); |
| 436 m_observerWrapper->observer().startRuleBody(endOffset); | 436 m_observerWrapper->observer().startRuleBody(endOffset); |
| 437 m_observerWrapper->observer().endRuleBody(endOffset); | 437 m_observerWrapper->observer().endRuleBody(endOffset); |
| 438 } | 438 } |
| 439 | 439 |
| 440 return StyleRuleImport::create(uri, MediaQueryParser::parseMediaQuerySet(pre
lude)); | 440 return StyleRuleImport::create(uri, MediaQueryParser::parseMediaQuerySet(pre
lude)); |
| 441 } | 441 } |
| 442 | 442 |
| 443 PassRefPtrWillBeRawPtr<StyleRuleNamespace> CSSParserImpl::consumeNamespaceRule(C
SSParserTokenRange prelude) | 443 RawPtr<StyleRuleNamespace> CSSParserImpl::consumeNamespaceRule(CSSParserTokenRan
ge prelude) |
| 444 { | 444 { |
| 445 prelude.consumeWhitespace(); | 445 prelude.consumeWhitespace(); |
| 446 AtomicString namespacePrefix; | 446 AtomicString namespacePrefix; |
| 447 if (prelude.peek().type() == IdentToken) | 447 if (prelude.peek().type() == IdentToken) |
| 448 namespacePrefix = prelude.consumeIncludingWhitespace().value(); | 448 namespacePrefix = prelude.consumeIncludingWhitespace().value(); |
| 449 | 449 |
| 450 AtomicString uri(consumeStringOrURI(prelude)); | 450 AtomicString uri(consumeStringOrURI(prelude)); |
| 451 prelude.consumeWhitespace(); | 451 prelude.consumeWhitespace(); |
| 452 if (uri.isNull() || !prelude.atEnd()) | 452 if (uri.isNull() || !prelude.atEnd()) |
| 453 return nullptr; // Parse error, expected string or URI | 453 return nullptr; // Parse error, expected string or URI |
| 454 | 454 |
| 455 return StyleRuleNamespace::create(namespacePrefix, uri); | 455 return StyleRuleNamespace::create(namespacePrefix, uri); |
| 456 } | 456 } |
| 457 | 457 |
| 458 PassRefPtrWillBeRawPtr<StyleRuleMedia> CSSParserImpl::consumeMediaRule(CSSParser
TokenRange prelude, CSSParserTokenRange block) | 458 RawPtr<StyleRuleMedia> CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelu
de, CSSParserTokenRange block) |
| 459 { | 459 { |
| 460 WillBeHeapVector<RefPtrWillBeMember<StyleRuleBase>> rules; | 460 HeapVector<Member<StyleRuleBase>> rules; |
| 461 | 461 |
| 462 if (m_observerWrapper) { | 462 if (m_observerWrapper) { |
| 463 CSSParserTokenRange preludeWithoutWhitespace = prelude; | 463 CSSParserTokenRange preludeWithoutWhitespace = prelude; |
| 464 preludeWithoutWhitespace.consumeWhitespace(); | 464 preludeWithoutWhitespace.consumeWhitespace(); |
| 465 m_observerWrapper->observer().startRuleHeader(StyleRule::Media, m_observ
erWrapper->startOffset(preludeWithoutWhitespace)); | 465 m_observerWrapper->observer().startRuleHeader(StyleRule::Media, m_observ
erWrapper->startOffset(preludeWithoutWhitespace)); |
| 466 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(preludeWithoutWhitespace)); | 466 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(preludeWithoutWhitespace)); |
| 467 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(block)); | 467 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(block)); |
| 468 } | 468 } |
| 469 | 469 |
| 470 consumeRuleList(block, RegularRuleList, [&rules](PassRefPtrWillBeRawPtr<Styl
eRuleBase> rule) { | 470 consumeRuleList(block, RegularRuleList, [&rules](RawPtr<StyleRuleBase> rule)
{ |
| 471 rules.append(rule); | 471 rules.append(rule); |
| 472 }); | 472 }); |
| 473 | 473 |
| 474 if (m_observerWrapper) | 474 if (m_observerWrapper) |
| 475 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b
lock)); | 475 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b
lock)); |
| 476 | 476 |
| 477 return StyleRuleMedia::create(MediaQueryParser::parseMediaQuerySet(prelude),
rules); | 477 return StyleRuleMedia::create(MediaQueryParser::parseMediaQuerySet(prelude),
rules); |
| 478 } | 478 } |
| 479 | 479 |
| 480 PassRefPtrWillBeRawPtr<StyleRuleSupports> CSSParserImpl::consumeSupportsRule(CSS
ParserTokenRange prelude, CSSParserTokenRange block) | 480 RawPtr<StyleRuleSupports> CSSParserImpl::consumeSupportsRule(CSSParserTokenRange
prelude, CSSParserTokenRange block) |
| 481 { | 481 { |
| 482 CSSSupportsParser::SupportsResult supported = CSSSupportsParser::supportsCon
dition(prelude, *this); | 482 CSSSupportsParser::SupportsResult supported = CSSSupportsParser::supportsCon
dition(prelude, *this); |
| 483 if (supported == CSSSupportsParser::Invalid) | 483 if (supported == CSSSupportsParser::Invalid) |
| 484 return nullptr; // Parse error, invalid @supports condition | 484 return nullptr; // Parse error, invalid @supports condition |
| 485 | 485 |
| 486 if (m_observerWrapper) { | 486 if (m_observerWrapper) { |
| 487 m_observerWrapper->observer().startRuleHeader(StyleRule::Supports, m_obs
erverWrapper->startOffset(prelude)); | 487 m_observerWrapper->observer().startRuleHeader(StyleRule::Supports, m_obs
erverWrapper->startOffset(prelude)); |
| 488 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(prelude)); | 488 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(prelude)); |
| 489 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(block)); | 489 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(block)); |
| 490 } | 490 } |
| 491 | 491 |
| 492 WillBeHeapVector<RefPtrWillBeMember<StyleRuleBase>> rules; | 492 HeapVector<Member<StyleRuleBase>> rules; |
| 493 consumeRuleList(block, RegularRuleList, [&rules](PassRefPtrWillBeRawPtr<Styl
eRuleBase> rule) { | 493 consumeRuleList(block, RegularRuleList, [&rules](RawPtr<StyleRuleBase> rule)
{ |
| 494 rules.append(rule); | 494 rules.append(rule); |
| 495 }); | 495 }); |
| 496 | 496 |
| 497 if (m_observerWrapper) | 497 if (m_observerWrapper) |
| 498 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b
lock)); | 498 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b
lock)); |
| 499 | 499 |
| 500 return StyleRuleSupports::create(prelude.serialize().stripWhiteSpace(), supp
orted, rules); | 500 return StyleRuleSupports::create(prelude.serialize().stripWhiteSpace(), supp
orted, rules); |
| 501 } | 501 } |
| 502 | 502 |
| 503 PassRefPtrWillBeRawPtr<StyleRuleViewport> CSSParserImpl::consumeViewportRule(CSS
ParserTokenRange prelude, CSSParserTokenRange block) | 503 RawPtr<StyleRuleViewport> CSSParserImpl::consumeViewportRule(CSSParserTokenRange
prelude, CSSParserTokenRange block) |
| 504 { | 504 { |
| 505 // Allow @viewport rules from UA stylesheets even if the feature is disabled
. | 505 // Allow @viewport rules from UA stylesheets even if the feature is disabled
. |
| 506 if (!RuntimeEnabledFeatures::cssViewportEnabled() && !isUASheetBehavior(m_co
ntext.mode())) | 506 if (!RuntimeEnabledFeatures::cssViewportEnabled() && !isUASheetBehavior(m_co
ntext.mode())) |
| 507 return nullptr; | 507 return nullptr; |
| 508 | 508 |
| 509 prelude.consumeWhitespace(); | 509 prelude.consumeWhitespace(); |
| 510 if (!prelude.atEnd()) | 510 if (!prelude.atEnd()) |
| 511 return nullptr; // Parser error; @viewport prelude should be empty | 511 return nullptr; // Parser error; @viewport prelude should be empty |
| 512 | 512 |
| 513 if (m_observerWrapper) { | 513 if (m_observerWrapper) { |
| 514 unsigned endOffset = m_observerWrapper->endOffset(prelude); | 514 unsigned endOffset = m_observerWrapper->endOffset(prelude); |
| 515 m_observerWrapper->observer().startRuleHeader(StyleRule::Viewport, m_obs
erverWrapper->startOffset(prelude)); | 515 m_observerWrapper->observer().startRuleHeader(StyleRule::Viewport, m_obs
erverWrapper->startOffset(prelude)); |
| 516 m_observerWrapper->observer().endRuleHeader(endOffset); | 516 m_observerWrapper->observer().endRuleHeader(endOffset); |
| 517 m_observerWrapper->observer().startRuleBody(endOffset); | 517 m_observerWrapper->observer().startRuleBody(endOffset); |
| 518 m_observerWrapper->observer().endRuleBody(endOffset); | 518 m_observerWrapper->observer().endRuleBody(endOffset); |
| 519 } | 519 } |
| 520 | 520 |
| 521 consumeDeclarationList(block, StyleRule::Viewport); | 521 consumeDeclarationList(block, StyleRule::Viewport); |
| 522 return StyleRuleViewport::create(createStylePropertySet(m_parsedProperties,
CSSViewportRuleMode)); | 522 return StyleRuleViewport::create(createStylePropertySet(m_parsedProperties,
CSSViewportRuleMode)); |
| 523 } | 523 } |
| 524 | 524 |
| 525 PassRefPtrWillBeRawPtr<StyleRuleFontFace> CSSParserImpl::consumeFontFaceRule(CSS
ParserTokenRange prelude, CSSParserTokenRange block) | 525 RawPtr<StyleRuleFontFace> CSSParserImpl::consumeFontFaceRule(CSSParserTokenRange
prelude, CSSParserTokenRange block) |
| 526 { | 526 { |
| 527 prelude.consumeWhitespace(); | 527 prelude.consumeWhitespace(); |
| 528 if (!prelude.atEnd()) | 528 if (!prelude.atEnd()) |
| 529 return nullptr; // Parse error; @font-face prelude should be empty | 529 return nullptr; // Parse error; @font-face prelude should be empty |
| 530 | 530 |
| 531 if (m_observerWrapper) { | 531 if (m_observerWrapper) { |
| 532 unsigned endOffset = m_observerWrapper->endOffset(prelude); | 532 unsigned endOffset = m_observerWrapper->endOffset(prelude); |
| 533 m_observerWrapper->observer().startRuleHeader(StyleRule::FontFace, m_obs
erverWrapper->startOffset(prelude)); | 533 m_observerWrapper->observer().startRuleHeader(StyleRule::FontFace, m_obs
erverWrapper->startOffset(prelude)); |
| 534 m_observerWrapper->observer().endRuleHeader(endOffset); | 534 m_observerWrapper->observer().endRuleHeader(endOffset); |
| 535 m_observerWrapper->observer().startRuleBody(endOffset); | 535 m_observerWrapper->observer().startRuleBody(endOffset); |
| 536 m_observerWrapper->observer().endRuleBody(endOffset); | 536 m_observerWrapper->observer().endRuleBody(endOffset); |
| 537 } | 537 } |
| 538 | 538 |
| 539 if (m_styleSheet) | 539 if (m_styleSheet) |
| 540 m_styleSheet->setHasFontFaceRule(true); | 540 m_styleSheet->setHasFontFaceRule(true); |
| 541 | 541 |
| 542 consumeDeclarationList(block, StyleRule::FontFace); | 542 consumeDeclarationList(block, StyleRule::FontFace); |
| 543 return StyleRuleFontFace::create(createStylePropertySet(m_parsedProperties,
m_context.mode())); | 543 return StyleRuleFontFace::create(createStylePropertySet(m_parsedProperties,
m_context.mode())); |
| 544 } | 544 } |
| 545 | 545 |
| 546 PassRefPtrWillBeRawPtr<StyleRuleKeyframes> CSSParserImpl::consumeKeyframesRule(b
ool webkitPrefixed, CSSParserTokenRange prelude, CSSParserTokenRange block) | 546 RawPtr<StyleRuleKeyframes> CSSParserImpl::consumeKeyframesRule(bool webkitPrefix
ed, CSSParserTokenRange prelude, CSSParserTokenRange block) |
| 547 { | 547 { |
| 548 prelude.consumeWhitespace(); | 548 prelude.consumeWhitespace(); |
| 549 CSSParserTokenRange rangeCopy = prelude; // For inspector callbacks | 549 CSSParserTokenRange rangeCopy = prelude; // For inspector callbacks |
| 550 const CSSParserToken& nameToken = prelude.consumeIncludingWhitespace(); | 550 const CSSParserToken& nameToken = prelude.consumeIncludingWhitespace(); |
| 551 if (!prelude.atEnd()) | 551 if (!prelude.atEnd()) |
| 552 return nullptr; // Parse error; expected single non-whitespace token in
@keyframes header | 552 return nullptr; // Parse error; expected single non-whitespace token in
@keyframes header |
| 553 | 553 |
| 554 String name; | 554 String name; |
| 555 if (nameToken.type() == IdentToken) { | 555 if (nameToken.type() == IdentToken) { |
| 556 name = nameToken.value(); | 556 name = nameToken.value(); |
| 557 } else if (nameToken.type() == StringToken && webkitPrefixed) { | 557 } else if (nameToken.type() == StringToken && webkitPrefixed) { |
| 558 if (m_context.useCounter()) | 558 if (m_context.useCounter()) |
| 559 m_context.useCounter()->count(UseCounter::QuotedKeyframesRule); | 559 m_context.useCounter()->count(UseCounter::QuotedKeyframesRule); |
| 560 name = nameToken.value(); | 560 name = nameToken.value(); |
| 561 } else { | 561 } else { |
| 562 return nullptr; // Parse error; expected ident token in @keyframes heade
r | 562 return nullptr; // Parse error; expected ident token in @keyframes heade
r |
| 563 } | 563 } |
| 564 | 564 |
| 565 if (m_observerWrapper) { | 565 if (m_observerWrapper) { |
| 566 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframes, m_ob
serverWrapper->startOffset(rangeCopy)); | 566 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframes, m_ob
serverWrapper->startOffset(rangeCopy)); |
| 567 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(prelude)); | 567 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(prelude)); |
| 568 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(block)); | 568 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(block)); |
| 569 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b
lock)); | 569 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b
lock)); |
| 570 } | 570 } |
| 571 | 571 |
| 572 RefPtrWillBeRawPtr<StyleRuleKeyframes> keyframeRule = StyleRuleKeyframes::cr
eate(); | 572 RawPtr<StyleRuleKeyframes> keyframeRule = StyleRuleKeyframes::create(); |
| 573 consumeRuleList(block, KeyframesRuleList, [keyframeRule](PassRefPtrWillBeRaw
Ptr<StyleRuleBase> keyframe) { | 573 consumeRuleList(block, KeyframesRuleList, [keyframeRule](RawPtr<StyleRuleBas
e> keyframe) { |
| 574 keyframeRule->parserAppendKeyframe(toStyleRuleKeyframe(keyframe.get())); | 574 keyframeRule->parserAppendKeyframe(toStyleRuleKeyframe(keyframe.get())); |
| 575 }); | 575 }); |
| 576 keyframeRule->setName(name); | 576 keyframeRule->setName(name); |
| 577 keyframeRule->setVendorPrefixed(webkitPrefixed); | 577 keyframeRule->setVendorPrefixed(webkitPrefixed); |
| 578 return keyframeRule.release(); | 578 return keyframeRule.release(); |
| 579 } | 579 } |
| 580 | 580 |
| 581 PassRefPtrWillBeRawPtr<StyleRulePage> CSSParserImpl::consumePageRule(CSSParserTo
kenRange prelude, CSSParserTokenRange block) | 581 RawPtr<StyleRulePage> CSSParserImpl::consumePageRule(CSSParserTokenRange prelude
, CSSParserTokenRange block) |
| 582 { | 582 { |
| 583 CSSSelectorList selectorList = parsePageSelector(prelude, m_styleSheet); | 583 CSSSelectorList selectorList = parsePageSelector(prelude, m_styleSheet); |
| 584 if (!selectorList.isValid()) | 584 if (!selectorList.isValid()) |
| 585 return nullptr; // Parse error, invalid @page selector | 585 return nullptr; // Parse error, invalid @page selector |
| 586 | 586 |
| 587 if (m_observerWrapper) { | 587 if (m_observerWrapper) { |
| 588 unsigned endOffset = m_observerWrapper->endOffset(prelude); | 588 unsigned endOffset = m_observerWrapper->endOffset(prelude); |
| 589 m_observerWrapper->observer().startRuleHeader(StyleRule::Page, m_observe
rWrapper->startOffset(prelude)); | 589 m_observerWrapper->observer().startRuleHeader(StyleRule::Page, m_observe
rWrapper->startOffset(prelude)); |
| 590 m_observerWrapper->observer().endRuleHeader(endOffset); | 590 m_observerWrapper->observer().endRuleHeader(endOffset); |
| 591 } | 591 } |
| 592 | 592 |
| 593 consumeDeclarationList(block, StyleRule::Style); | 593 consumeDeclarationList(block, StyleRule::Style); |
| 594 | 594 |
| 595 return StyleRulePage::create(std::move(selectorList), createStylePropertySet
(m_parsedProperties, m_context.mode())); | 595 return StyleRulePage::create(std::move(selectorList), createStylePropertySet
(m_parsedProperties, m_context.mode())); |
| 596 } | 596 } |
| 597 | 597 |
| 598 PassRefPtrWillBeRawPtr<StyleRuleKeyframe> CSSParserImpl::consumeKeyframeStyleRul
e(CSSParserTokenRange prelude, CSSParserTokenRange block) | 598 RawPtr<StyleRuleKeyframe> CSSParserImpl::consumeKeyframeStyleRule(CSSParserToken
Range prelude, CSSParserTokenRange block) |
| 599 { | 599 { |
| 600 OwnPtr<Vector<double>> keyList = consumeKeyframeKeyList(prelude); | 600 OwnPtr<Vector<double>> keyList = consumeKeyframeKeyList(prelude); |
| 601 if (!keyList) | 601 if (!keyList) |
| 602 return nullptr; | 602 return nullptr; |
| 603 | 603 |
| 604 if (m_observerWrapper) { | 604 if (m_observerWrapper) { |
| 605 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframe, m_obs
erverWrapper->startOffset(prelude)); | 605 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframe, m_obs
erverWrapper->startOffset(prelude)); |
| 606 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(prelude)); | 606 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset
(prelude)); |
| 607 } | 607 } |
| 608 | 608 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 624 CSSParserTokenRange selector = selectors.makeSubRange(selectorStart, &se
lectors.peek()); | 624 CSSParserTokenRange selector = selectors.makeSubRange(selectorStart, &se
lectors.peek()); |
| 625 selectors.consumeIncludingWhitespace(); | 625 selectors.consumeIncludingWhitespace(); |
| 626 | 626 |
| 627 wrapper.observer().observeSelector(wrapper.startOffset(selector), wrappe
r.endOffset(selector)); | 627 wrapper.observer().observeSelector(wrapper.startOffset(selector), wrappe
r.endOffset(selector)); |
| 628 } | 628 } |
| 629 | 629 |
| 630 wrapper.observer().endRuleHeader(wrapper.endOffset(originalRange)); | 630 wrapper.observer().endRuleHeader(wrapper.endOffset(originalRange)); |
| 631 } | 631 } |
| 632 | 632 |
| 633 | 633 |
| 634 PassRefPtrWillBeRawPtr<StyleRule> CSSParserImpl::consumeStyleRule(CSSParserToken
Range prelude, CSSParserTokenRange block) | 634 RawPtr<StyleRule> CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, C
SSParserTokenRange block) |
| 635 { | 635 { |
| 636 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c
ontext, m_styleSheet); | 636 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c
ontext, m_styleSheet); |
| 637 if (!selectorList.isValid()) | 637 if (!selectorList.isValid()) |
| 638 return nullptr; // Parse error, invalid selector list | 638 return nullptr; // Parse error, invalid selector list |
| 639 | 639 |
| 640 if (m_observerWrapper) | 640 if (m_observerWrapper) |
| 641 observeSelectors(*m_observerWrapper, prelude); | 641 observeSelectors(*m_observerWrapper, prelude); |
| 642 | 642 |
| 643 consumeDeclarationList(block, StyleRule::Style); | 643 consumeDeclarationList(block, StyleRule::Style); |
| 644 | 644 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 670 while (!range.atEnd() && range.peek().type() != SemicolonToken) | 670 while (!range.atEnd() && range.peek().type() != SemicolonToken) |
| 671 range.consumeComponentValue(); | 671 range.consumeComponentValue(); |
| 672 | 672 |
| 673 consumeDeclaration(range.makeSubRange(declarationStart, &range.peek(
)), ruleType); | 673 consumeDeclaration(range.makeSubRange(declarationStart, &range.peek(
)), ruleType); |
| 674 | 674 |
| 675 if (useObserver) | 675 if (useObserver) |
| 676 m_observerWrapper->skipCommentsBefore(range, false); | 676 m_observerWrapper->skipCommentsBefore(range, false); |
| 677 break; | 677 break; |
| 678 } | 678 } |
| 679 case AtKeywordToken: { | 679 case AtKeywordToken: { |
| 680 RefPtrWillBeRawPtr<StyleRuleBase> rule = consumeAtRule(range, NoRule
s); | 680 RawPtr<StyleRuleBase> rule = consumeAtRule(range, NoRules); |
| 681 ASSERT_UNUSED(rule, !rule); | 681 ASSERT_UNUSED(rule, !rule); |
| 682 break; | 682 break; |
| 683 } | 683 } |
| 684 default: // Parse error, unexpected token in declaration list | 684 default: // Parse error, unexpected token in declaration list |
| 685 while (!range.atEnd() && range.peek().type() != SemicolonToken) | 685 while (!range.atEnd() && range.peek().type() != SemicolonToken) |
| 686 range.consumeComponentValue(); | 686 range.consumeComponentValue(); |
| 687 break; | 687 break; |
| 688 } | 688 } |
| 689 } | 689 } |
| 690 | 690 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 | 737 |
| 738 if (m_observerWrapper && (ruleType == StyleRule::Style || ruleType == StyleR
ule::Keyframe)) { | 738 if (m_observerWrapper && (ruleType == StyleRule::Style || ruleType == StyleR
ule::Keyframe)) { |
| 739 m_observerWrapper->observer().observeProperty( | 739 m_observerWrapper->observer().observeProperty( |
| 740 m_observerWrapper->startOffset(rangeCopy), m_observerWrapper->endOff
set(rangeCopy), | 740 m_observerWrapper->startOffset(rangeCopy), m_observerWrapper->endOff
set(rangeCopy), |
| 741 important, m_parsedProperties.size() != propertiesCount); | 741 important, m_parsedProperties.size() != propertiesCount); |
| 742 } | 742 } |
| 743 } | 743 } |
| 744 | 744 |
| 745 void CSSParserImpl::consumeVariableValue(CSSParserTokenRange range, const Atomic
String& variableName, bool important) | 745 void CSSParserImpl::consumeVariableValue(CSSParserTokenRange range, const Atomic
String& variableName, bool important) |
| 746 { | 746 { |
| 747 if (RefPtrWillBeRawPtr<CSSCustomPropertyDeclaration> value = CSSVariablePars
er::parseDeclarationValue(variableName, range)) | 747 if (RawPtr<CSSCustomPropertyDeclaration> value = CSSVariableParser::parseDec
larationValue(variableName, range)) |
| 748 m_parsedProperties.append(CSSProperty(CSSPropertyVariable, value.release
(), important)); | 748 m_parsedProperties.append(CSSProperty(CSSPropertyVariable, value.release
(), important)); |
| 749 } | 749 } |
| 750 | 750 |
| 751 void CSSParserImpl::consumeDeclarationValue(CSSParserTokenRange range, CSSProper
tyID unresolvedProperty, bool important, StyleRule::Type ruleType) | 751 void CSSParserImpl::consumeDeclarationValue(CSSParserTokenRange range, CSSProper
tyID unresolvedProperty, bool important, StyleRule::Type ruleType) |
| 752 { | 752 { |
| 753 CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_contex
t, m_parsedProperties, ruleType); | 753 CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_contex
t, m_parsedProperties, ruleType); |
| 754 } | 754 } |
| 755 | 755 |
| 756 PassOwnPtr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList(CSSParserTokenR
ange range) | 756 PassOwnPtr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList(CSSParserTokenR
ange range) |
| 757 { | 757 { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 768 else | 768 else |
| 769 return nullptr; // Parser error, invalid value in keyframe selector | 769 return nullptr; // Parser error, invalid value in keyframe selector |
| 770 if (range.atEnd()) | 770 if (range.atEnd()) |
| 771 return result.release(); | 771 return result.release(); |
| 772 if (range.consume().type() != CommaToken) | 772 if (range.consume().type() != CommaToken) |
| 773 return nullptr; // Parser error | 773 return nullptr; // Parser error |
| 774 } | 774 } |
| 775 } | 775 } |
| 776 | 776 |
| 777 } // namespace blink | 777 } // namespace blink |
| OLD | NEW |