Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp

Issue 1686483002: Oilpan: Remove most WillBe types from the code base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698