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

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

Issue 1858753003: Remove RawPtr from core/css (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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/CSSCustomIdentValue.h" 7 #include "core/css/CSSCustomIdentValue.h"
8 #include "core/css/CSSCustomPropertyDeclaration.h" 8 #include "core/css/CSSCustomPropertyDeclaration.h"
9 #include "core/css/CSSKeyframesRule.h" 9 #include "core/css/CSSKeyframesRule.h"
10 #include "core/css/CSSStyleSheet.h" 10 #include "core/css/CSSStyleSheet.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 // TODO(timloh): Do we need to do anything here? 80 // TODO(timloh): Do we need to do anything here?
81 } else { 81 } else {
82 if (seenProperties.test(propertyIDIndex)) 82 if (seenProperties.test(propertyIDIndex))
83 continue; 83 continue;
84 seenProperties.set(propertyIDIndex); 84 seenProperties.set(propertyIDIndex);
85 } 85 }
86 output[--unusedEntries] = property; 86 output[--unusedEntries] = property;
87 } 87 }
88 } 88 }
89 89
90 static RawPtr<ImmutableStylePropertySet> createStylePropertySet(HeapVector<CSSPr operty, 256>& parsedProperties, CSSParserMode mode) 90 static ImmutableStylePropertySet* createStylePropertySet(HeapVector<CSSProperty, 256>& parsedProperties, CSSParserMode mode)
91 { 91 {
92 std::bitset<numCSSProperties> seenProperties; 92 std::bitset<numCSSProperties> seenProperties;
93 size_t unusedEntries = parsedProperties.size(); 93 size_t unusedEntries = parsedProperties.size();
94 HeapVector<CSSProperty, 256> results(unusedEntries); 94 HeapVector<CSSProperty, 256> results(unusedEntries);
95 HashSet<AtomicString> seenCustomProperties; 95 HashSet<AtomicString> seenCustomProperties;
96 96
97 filterProperties(true, parsedProperties, results, unusedEntries, seenPropert ies, seenCustomProperties); 97 filterProperties(true, parsedProperties, results, unusedEntries, seenPropert ies, seenCustomProperties);
98 filterProperties(false, parsedProperties, results, unusedEntries, seenProper ties, seenCustomProperties); 98 filterProperties(false, parsedProperties, results, unusedEntries, seenProper ties, seenCustomProperties);
99 99
100 RawPtr<ImmutableStylePropertySet> result = ImmutableStylePropertySet::create (results.data() + unusedEntries, results.size() - unusedEntries, mode); 100 ImmutableStylePropertySet* result = ImmutableStylePropertySet::create(result s.data() + unusedEntries, results.size() - unusedEntries, mode);
101 parsedProperties.clear(); 101 parsedProperties.clear();
102 return result.release(); 102 return result;
103 } 103 }
104 104
105 RawPtr<ImmutableStylePropertySet> CSSParserImpl::parseInlineStyleDeclaration(con st String& string, Element* element) 105 ImmutableStylePropertySet* CSSParserImpl::parseInlineStyleDeclaration(const Stri ng& string, Element* element)
106 { 106 {
107 Document& document = element->document(); 107 Document& document = element->document();
108 CSSParserContext context = CSSParserContext(document.elementSheet().contents ()->parserContext(), UseCounter::getFrom(&document)); 108 CSSParserContext context = CSSParserContext(document.elementSheet().contents ()->parserContext(), UseCounter::getFrom(&document));
109 CSSParserMode mode = element->isHTMLElement() && !document.inQuirksMode() ? HTMLStandardMode : HTMLQuirksMode; 109 CSSParserMode mode = element->isHTMLElement() && !document.inQuirksMode() ? HTMLStandardMode : HTMLQuirksMode;
110 context.setMode(mode); 110 context.setMode(mode);
111 CSSParserImpl parser(context, document.elementSheet().contents()); 111 CSSParserImpl parser(context, document.elementSheet().contents());
112 CSSTokenizer::Scope scope(string); 112 CSSTokenizer::Scope scope(string);
113 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); 113 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style);
114 return createStylePropertySet(parser.m_parsedProperties, mode); 114 return createStylePropertySet(parser.m_parsedProperties, mode);
115 } 115 }
(...skipping 13 matching lines...) Expand all
129 size_t unusedEntries = parser.m_parsedProperties.size(); 129 size_t unusedEntries = parser.m_parsedProperties.size();
130 HeapVector<CSSProperty, 256> results(unusedEntries); 130 HeapVector<CSSProperty, 256> results(unusedEntries);
131 HashSet<AtomicString> seenCustomProperties; 131 HashSet<AtomicString> seenCustomProperties;
132 filterProperties(true, parser.m_parsedProperties, results, unusedEntries, se enProperties, seenCustomProperties); 132 filterProperties(true, parser.m_parsedProperties, results, unusedEntries, se enProperties, seenCustomProperties);
133 filterProperties(false, parser.m_parsedProperties, results, unusedEntries, s eenProperties, seenCustomProperties); 133 filterProperties(false, parser.m_parsedProperties, results, unusedEntries, s eenProperties, seenCustomProperties);
134 if (unusedEntries) 134 if (unusedEntries)
135 results.remove(0, unusedEntries); 135 results.remove(0, unusedEntries);
136 return declaration->addParsedProperties(results); 136 return declaration->addParsedProperties(results);
137 } 137 }
138 138
139 RawPtr<StyleRuleBase> CSSParserImpl::parseRule(const String& string, const CSSPa rserContext& context, StyleSheetContents* styleSheet, AllowedRulesType allowedRu les) 139 StyleRuleBase* CSSParserImpl::parseRule(const String& string, const CSSParserCon text& context, StyleSheetContents* styleSheet, AllowedRulesType allowedRules)
140 { 140 {
141 CSSParserImpl parser(context, styleSheet); 141 CSSParserImpl parser(context, styleSheet);
142 CSSTokenizer::Scope scope(string); 142 CSSTokenizer::Scope scope(string);
143 CSSParserTokenRange range = scope.tokenRange(); 143 CSSParserTokenRange range = scope.tokenRange();
144 range.consumeWhitespace(); 144 range.consumeWhitespace();
145 if (range.atEnd()) 145 if (range.atEnd())
146 return nullptr; // Parse error, empty rule 146 return nullptr; // Parse error, empty rule
147 RawPtr<StyleRuleBase> rule; 147 StyleRuleBase* rule;
148 if (range.peek().type() == AtKeywordToken) 148 if (range.peek().type() == AtKeywordToken)
149 rule = parser.consumeAtRule(range, allowedRules); 149 rule = parser.consumeAtRule(range, allowedRules);
150 else 150 else
151 rule = parser.consumeQualifiedRule(range, allowedRules); 151 rule = parser.consumeQualifiedRule(range, allowedRules);
152 if (!rule) 152 if (!rule)
153 return nullptr; // Parse error, failed to consume rule 153 return nullptr; // Parse error, failed to consume rule
154 range.consumeWhitespace(); 154 range.consumeWhitespace();
155 if (!rule || !range.atEnd()) 155 if (!rule || !range.atEnd())
156 return nullptr; // Parse error, trailing garbage 156 return nullptr; // Parse error, trailing garbage
157 return rule; 157 return rule;
158 } 158 }
159 159
160 void CSSParserImpl::parseStyleSheet(const String& string, const CSSParserContext & context, StyleSheetContents* styleSheet) 160 void CSSParserImpl::parseStyleSheet(const String& string, const CSSParserContext & context, StyleSheetContents* styleSheet)
161 { 161 {
162 TRACE_EVENT_BEGIN2( 162 TRACE_EVENT_BEGIN2(
163 "blink,blink_style", "CSSParserImpl::parseStyleSheet", 163 "blink,blink_style", "CSSParserImpl::parseStyleSheet",
164 "baseUrl", context.baseURL().getString().utf8(), 164 "baseUrl", context.baseURL().getString().utf8(),
165 "mode", context.mode()); 165 "mode", context.mode());
166 166
167 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke nize"); 167 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke nize");
168 CSSTokenizer::Scope scope(string); 168 CSSTokenizer::Scope scope(string);
169 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni ze"); 169 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni ze");
170 170
171 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars e"); 171 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars e");
172 CSSParserImpl parser(context, styleSheet); 172 CSSParserImpl parser(context, styleSheet);
173 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](RawPtr<StyleRuleBase> rule) { 173 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](StyleRuleBase* rule) {
174 if (rule->isCharsetRule()) 174 if (rule->isCharsetRule())
175 return; 175 return;
176 styleSheet->parserAppendRule(rule); 176 styleSheet->parserAppendRule(rule);
177 }); 177 });
178 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); 178 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid);
179 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse" ); 179 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse" );
180 180
181 TRACE_EVENT_END2( 181 TRACE_EVENT_END2(
182 "blink,blink_style", "CSSParserImpl::parseStyleSheet", 182 "blink,blink_style", "CSSParserImpl::parseStyleSheet",
183 "tokenCount", scope.tokenCount(), 183 "tokenCount", scope.tokenCount(),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 } 220 }
221 } 221 }
222 222
223 selector->setForPage(); 223 selector->setForPage();
224 Vector<OwnPtr<CSSParserSelector>> selectorVector; 224 Vector<OwnPtr<CSSParserSelector>> selectorVector;
225 selectorVector.append(selector.release()); 225 selectorVector.append(selector.release());
226 CSSSelectorList selectorList = CSSSelectorList::adoptSelectorVector(selector Vector); 226 CSSSelectorList selectorList = CSSSelectorList::adoptSelectorVector(selector Vector);
227 return selectorList; 227 return selectorList;
228 } 228 }
229 229
230 RawPtr<ImmutableStylePropertySet> CSSParserImpl::parseCustomPropertySet(CSSParse rTokenRange range) 230 ImmutableStylePropertySet* CSSParserImpl::parseCustomPropertySet(CSSParserTokenR ange range)
231 { 231 {
232 range.consumeWhitespace(); 232 range.consumeWhitespace();
233 if (range.peek().type() != LeftBraceToken) 233 if (range.peek().type() != LeftBraceToken)
234 return nullptr; 234 return nullptr;
235 CSSParserTokenRange block = range.consumeBlock(); 235 CSSParserTokenRange block = range.consumeBlock();
236 range.consumeWhitespace(); 236 range.consumeWhitespace();
237 if (!range.atEnd()) 237 if (!range.atEnd())
238 return nullptr; 238 return nullptr;
239 CSSParserImpl parser(strictCSSParserContext()); 239 CSSParserImpl parser(strictCSSParserContext());
240 parser.consumeDeclarationList(block, StyleRule::Style); 240 parser.consumeDeclarationList(block, StyleRule::Style);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 observer.endRuleHeader(1); 273 observer.endRuleHeader(1);
274 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); 274 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style);
275 } 275 }
276 276
277 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ er) 277 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ er)
278 { 278 {
279 CSSParserImpl parser(context, styleSheet); 279 CSSParserImpl parser(context, styleSheet);
280 CSSParserObserverWrapper wrapper(observer); 280 CSSParserObserverWrapper wrapper(observer);
281 parser.m_observerWrapper = &wrapper; 281 parser.m_observerWrapper = &wrapper;
282 CSSTokenizer::Scope scope(string, wrapper); 282 CSSTokenizer::Scope scope(string, wrapper);
283 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](RawPtr<StyleRuleBase> rule) { 283 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](StyleRuleBase* rule) {
284 if (rule->isCharsetRule()) 284 if (rule->isCharsetRule())
285 return; 285 return;
286 styleSheet->parserAppendRule(rule); 286 styleSheet->parserAppendRule(rule);
287 }); 287 });
288 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); 288 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid);
289 } 289 }
290 290
291 static CSSParserImpl::AllowedRulesType computeNewAllowedRules(CSSParserImpl::All owedRulesType allowedRules, StyleRuleBase* rule) 291 static CSSParserImpl::AllowedRulesType computeNewAllowedRules(CSSParserImpl::All owedRulesType allowedRules, StyleRuleBase* rule)
292 { 292 {
293 if (!rule || allowedRules == CSSParserImpl::KeyframeRules || allowedRules == CSSParserImpl::NoRules) 293 if (!rule || allowedRules == CSSParserImpl::KeyframeRules || allowedRules == CSSParserImpl::NoRules)
(...skipping 20 matching lines...) Expand all
314 case KeyframesRuleList: 314 case KeyframesRuleList:
315 allowedRules = KeyframeRules; 315 allowedRules = KeyframeRules;
316 break; 316 break;
317 default: 317 default:
318 ASSERT_NOT_REACHED(); 318 ASSERT_NOT_REACHED();
319 } 319 }
320 320
321 bool seenRule = false; 321 bool seenRule = false;
322 bool firstRuleValid = false; 322 bool firstRuleValid = false;
323 while (!range.atEnd()) { 323 while (!range.atEnd()) {
324 RawPtr<StyleRuleBase> rule; 324 StyleRuleBase* rule;
325 switch (range.peek().type()) { 325 switch (range.peek().type()) {
326 case WhitespaceToken: 326 case WhitespaceToken:
327 range.consumeWhitespace(); 327 range.consumeWhitespace();
328 continue; 328 continue;
329 case AtKeywordToken: 329 case AtKeywordToken:
330 rule = consumeAtRule(range, allowedRules); 330 rule = consumeAtRule(range, allowedRules);
331 break; 331 break;
332 case CDOToken: 332 case CDOToken:
333 case CDCToken: 333 case CDCToken:
334 if (ruleListType == TopLevelRuleList) { 334 if (ruleListType == TopLevelRuleList) {
335 range.consume(); 335 range.consume();
336 continue; 336 continue;
337 } 337 }
338 // fallthrough 338 // fallthrough
339 default: 339 default:
340 rule = consumeQualifiedRule(range, allowedRules); 340 rule = consumeQualifiedRule(range, allowedRules);
341 break; 341 break;
342 } 342 }
343 if (!seenRule) { 343 if (!seenRule) {
344 seenRule = true; 344 seenRule = true;
345 firstRuleValid = rule; 345 firstRuleValid = rule;
346 } 346 }
347 if (rule) { 347 if (rule) {
348 allowedRules = computeNewAllowedRules(allowedRules, rule.get()); 348 allowedRules = computeNewAllowedRules(allowedRules, rule);
349 callback(rule.release()); 349 callback(rule);
350 } 350 }
351 } 351 }
352 352
353 return firstRuleValid; 353 return firstRuleValid;
354 } 354 }
355 355
356 RawPtr<StyleRuleBase> CSSParserImpl::consumeAtRule(CSSParserTokenRange& range, A llowedRulesType allowedRules) 356 StyleRuleBase* CSSParserImpl::consumeAtRule(CSSParserTokenRange& range, AllowedR ulesType allowedRules)
357 { 357 {
358 ASSERT(range.peek().type() == AtKeywordToken); 358 ASSERT(range.peek().type() == AtKeywordToken);
359 const CSSParserString& name = range.consume().value(); 359 const CSSParserString& name = range.consume().value();
360 const CSSParserToken* preludeStart = &range.peek(); 360 const CSSParserToken* preludeStart = &range.peek();
361 while (!range.atEnd() && range.peek().type() != LeftBraceToken && range.peek ().type() != SemicolonToken) 361 while (!range.atEnd() && range.peek().type() != LeftBraceToken && range.peek ().type() != SemicolonToken)
362 range.consumeComponentValue(); 362 range.consumeComponentValue();
363 363
364 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek() ); 364 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek() );
365 CSSAtRuleID id = cssAtRuleID(name); 365 CSSAtRuleID id = cssAtRuleID(name);
366 if (id != CSSAtRuleInvalid && m_context.useCounter()) 366 if (id != CSSAtRuleInvalid && m_context.useCounter())
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 return consumeKeyframesRule(true, prelude, block); 402 return consumeKeyframesRule(true, prelude, block);
403 case CSSAtRuleKeyframes: 403 case CSSAtRuleKeyframes:
404 return consumeKeyframesRule(false, prelude, block); 404 return consumeKeyframesRule(false, prelude, block);
405 case CSSAtRulePage: 405 case CSSAtRulePage:
406 return consumePageRule(prelude, block); 406 return consumePageRule(prelude, block);
407 default: 407 default:
408 return nullptr; // Parse error, unrecognised at-rule with block 408 return nullptr; // Parse error, unrecognised at-rule with block
409 } 409 }
410 } 410 }
411 411
412 RawPtr<StyleRuleBase> CSSParserImpl::consumeQualifiedRule(CSSParserTokenRange& r ange, AllowedRulesType allowedRules) 412 StyleRuleBase* CSSParserImpl::consumeQualifiedRule(CSSParserTokenRange& range, A llowedRulesType allowedRules)
413 { 413 {
414 const CSSParserToken* preludeStart = &range.peek(); 414 const CSSParserToken* preludeStart = &range.peek();
415 while (!range.atEnd() && range.peek().type() != LeftBraceToken) 415 while (!range.atEnd() && range.peek().type() != LeftBraceToken)
416 range.consumeComponentValue(); 416 range.consumeComponentValue();
417 417
418 if (range.atEnd()) 418 if (range.atEnd())
419 return nullptr; // Parse error, EOF instead of qualified rule block 419 return nullptr; // Parse error, EOF instead of qualified rule block
420 420
421 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek() ); 421 CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek() );
422 CSSParserTokenRange block = range.consumeBlock(); 422 CSSParserTokenRange block = range.consumeBlock();
(...skipping 19 matching lines...) Expand all
442 return AtomicString(); 442 return AtomicString();
443 443
444 CSSParserTokenRange contents = range.consumeBlock(); 444 CSSParserTokenRange contents = range.consumeBlock();
445 const CSSParserToken& uri = contents.consumeIncludingWhitespace(); 445 const CSSParserToken& uri = contents.consumeIncludingWhitespace();
446 ASSERT(uri.type() == StringToken); 446 ASSERT(uri.type() == StringToken);
447 if (!contents.atEnd()) 447 if (!contents.atEnd())
448 return AtomicString(); 448 return AtomicString();
449 return uri.value(); 449 return uri.value();
450 } 450 }
451 451
452 RawPtr<StyleRuleCharset> CSSParserImpl::consumeCharsetRule(CSSParserTokenRange p relude) 452 StyleRuleCharset* CSSParserImpl::consumeCharsetRule(CSSParserTokenRange prelude)
453 { 453 {
454 prelude.consumeWhitespace(); 454 prelude.consumeWhitespace();
455 const CSSParserToken& string = prelude.consumeIncludingWhitespace(); 455 const CSSParserToken& string = prelude.consumeIncludingWhitespace();
456 if (string.type() != StringToken || !prelude.atEnd()) 456 if (string.type() != StringToken || !prelude.atEnd())
457 return nullptr; // Parse error, expected a single string 457 return nullptr; // Parse error, expected a single string
458 return StyleRuleCharset::create(); 458 return StyleRuleCharset::create();
459 } 459 }
460 460
461 RawPtr<StyleRuleImport> CSSParserImpl::consumeImportRule(CSSParserTokenRange pre lude) 461 StyleRuleImport* CSSParserImpl::consumeImportRule(CSSParserTokenRange prelude)
462 { 462 {
463 prelude.consumeWhitespace(); 463 prelude.consumeWhitespace();
464 AtomicString uri(consumeStringOrURI(prelude)); 464 AtomicString uri(consumeStringOrURI(prelude));
465 if (uri.isNull()) 465 if (uri.isNull())
466 return nullptr; // Parse error, expected string or URI 466 return nullptr; // Parse error, expected string or URI
467 467
468 if (m_observerWrapper) { 468 if (m_observerWrapper) {
469 unsigned endOffset = m_observerWrapper->endOffset(prelude); 469 unsigned endOffset = m_observerWrapper->endOffset(prelude);
470 m_observerWrapper->observer().startRuleHeader(StyleRule::Import, m_obser verWrapper->startOffset(prelude)); 470 m_observerWrapper->observer().startRuleHeader(StyleRule::Import, m_obser verWrapper->startOffset(prelude));
471 m_observerWrapper->observer().endRuleHeader(endOffset); 471 m_observerWrapper->observer().endRuleHeader(endOffset);
472 m_observerWrapper->observer().startRuleBody(endOffset); 472 m_observerWrapper->observer().startRuleBody(endOffset);
473 m_observerWrapper->observer().endRuleBody(endOffset); 473 m_observerWrapper->observer().endRuleBody(endOffset);
474 } 474 }
475 475
476 return StyleRuleImport::create(uri, MediaQueryParser::parseMediaQuerySet(pre lude)); 476 return StyleRuleImport::create(uri, MediaQueryParser::parseMediaQuerySet(pre lude));
477 } 477 }
478 478
479 RawPtr<StyleRuleNamespace> CSSParserImpl::consumeNamespaceRule(CSSParserTokenRan ge prelude) 479 StyleRuleNamespace* CSSParserImpl::consumeNamespaceRule(CSSParserTokenRange prel ude)
480 { 480 {
481 prelude.consumeWhitespace(); 481 prelude.consumeWhitespace();
482 AtomicString namespacePrefix; 482 AtomicString namespacePrefix;
483 if (prelude.peek().type() == IdentToken) 483 if (prelude.peek().type() == IdentToken)
484 namespacePrefix = prelude.consumeIncludingWhitespace().value(); 484 namespacePrefix = prelude.consumeIncludingWhitespace().value();
485 485
486 AtomicString uri(consumeStringOrURI(prelude)); 486 AtomicString uri(consumeStringOrURI(prelude));
487 prelude.consumeWhitespace(); 487 prelude.consumeWhitespace();
488 if (uri.isNull() || !prelude.atEnd()) 488 if (uri.isNull() || !prelude.atEnd())
489 return nullptr; // Parse error, expected string or URI 489 return nullptr; // Parse error, expected string or URI
490 490
491 return StyleRuleNamespace::create(namespacePrefix, uri); 491 return StyleRuleNamespace::create(namespacePrefix, uri);
492 } 492 }
493 493
494 RawPtr<StyleRuleMedia> CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelu de, CSSParserTokenRange block) 494 StyleRuleMedia* CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelude, CSS ParserTokenRange block)
495 { 495 {
496 HeapVector<Member<StyleRuleBase>> rules; 496 HeapVector<Member<StyleRuleBase>> rules;
497 497
498 if (m_observerWrapper) { 498 if (m_observerWrapper) {
499 CSSParserTokenRange preludeWithoutWhitespace = prelude; 499 CSSParserTokenRange preludeWithoutWhitespace = prelude;
500 preludeWithoutWhitespace.consumeWhitespace(); 500 preludeWithoutWhitespace.consumeWhitespace();
501 m_observerWrapper->observer().startRuleHeader(StyleRule::Media, m_observ erWrapper->startOffset(preludeWithoutWhitespace)); 501 m_observerWrapper->observer().startRuleHeader(StyleRule::Media, m_observ erWrapper->startOffset(preludeWithoutWhitespace));
502 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (preludeWithoutWhitespace)); 502 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (preludeWithoutWhitespace));
503 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(block)); 503 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(block));
504 } 504 }
505 505
506 consumeRuleList(block, RegularRuleList, [&rules](RawPtr<StyleRuleBase> rule) { 506 consumeRuleList(block, RegularRuleList, [&rules](StyleRuleBase* rule) {
507 rules.append(rule); 507 rules.append(rule);
508 }); 508 });
509 509
510 if (m_observerWrapper) 510 if (m_observerWrapper)
511 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b lock)); 511 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b lock));
512 512
513 return StyleRuleMedia::create(MediaQueryParser::parseMediaQuerySet(prelude), rules); 513 return StyleRuleMedia::create(MediaQueryParser::parseMediaQuerySet(prelude), rules);
514 } 514 }
515 515
516 RawPtr<StyleRuleSupports> CSSParserImpl::consumeSupportsRule(CSSParserTokenRange prelude, CSSParserTokenRange block) 516 StyleRuleSupports* CSSParserImpl::consumeSupportsRule(CSSParserTokenRange prelud e, CSSParserTokenRange block)
517 { 517 {
518 CSSSupportsParser::SupportsResult supported = CSSSupportsParser::supportsCon dition(prelude, *this); 518 CSSSupportsParser::SupportsResult supported = CSSSupportsParser::supportsCon dition(prelude, *this);
519 if (supported == CSSSupportsParser::Invalid) 519 if (supported == CSSSupportsParser::Invalid)
520 return nullptr; // Parse error, invalid @supports condition 520 return nullptr; // Parse error, invalid @supports condition
521 521
522 if (m_observerWrapper) { 522 if (m_observerWrapper) {
523 m_observerWrapper->observer().startRuleHeader(StyleRule::Supports, m_obs erverWrapper->startOffset(prelude)); 523 m_observerWrapper->observer().startRuleHeader(StyleRule::Supports, m_obs erverWrapper->startOffset(prelude));
524 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (prelude)); 524 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (prelude));
525 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(block)); 525 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(block));
526 } 526 }
527 527
528 HeapVector<Member<StyleRuleBase>> rules; 528 HeapVector<Member<StyleRuleBase>> rules;
529 consumeRuleList(block, RegularRuleList, [&rules](RawPtr<StyleRuleBase> rule) { 529 consumeRuleList(block, RegularRuleList, [&rules](StyleRuleBase* rule) {
530 rules.append(rule); 530 rules.append(rule);
531 }); 531 });
532 532
533 if (m_observerWrapper) 533 if (m_observerWrapper)
534 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b lock)); 534 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b lock));
535 535
536 return StyleRuleSupports::create(prelude.serialize().stripWhiteSpace(), supp orted, rules); 536 return StyleRuleSupports::create(prelude.serialize().stripWhiteSpace(), supp orted, rules);
537 } 537 }
538 538
539 RawPtr<StyleRuleViewport> CSSParserImpl::consumeViewportRule(CSSParserTokenRange prelude, CSSParserTokenRange block) 539 StyleRuleViewport* CSSParserImpl::consumeViewportRule(CSSParserTokenRange prelud e, CSSParserTokenRange block)
540 { 540 {
541 // Allow @viewport rules from UA stylesheets even if the feature is disabled . 541 // Allow @viewport rules from UA stylesheets even if the feature is disabled .
542 if (!RuntimeEnabledFeatures::cssViewportEnabled() && !isUASheetBehavior(m_co ntext.mode())) 542 if (!RuntimeEnabledFeatures::cssViewportEnabled() && !isUASheetBehavior(m_co ntext.mode()))
543 return nullptr; 543 return nullptr;
544 544
545 prelude.consumeWhitespace(); 545 prelude.consumeWhitespace();
546 if (!prelude.atEnd()) 546 if (!prelude.atEnd())
547 return nullptr; // Parser error; @viewport prelude should be empty 547 return nullptr; // Parser error; @viewport prelude should be empty
548 548
549 if (m_observerWrapper) { 549 if (m_observerWrapper) {
550 unsigned endOffset = m_observerWrapper->endOffset(prelude); 550 unsigned endOffset = m_observerWrapper->endOffset(prelude);
551 m_observerWrapper->observer().startRuleHeader(StyleRule::Viewport, m_obs erverWrapper->startOffset(prelude)); 551 m_observerWrapper->observer().startRuleHeader(StyleRule::Viewport, m_obs erverWrapper->startOffset(prelude));
552 m_observerWrapper->observer().endRuleHeader(endOffset); 552 m_observerWrapper->observer().endRuleHeader(endOffset);
553 m_observerWrapper->observer().startRuleBody(endOffset); 553 m_observerWrapper->observer().startRuleBody(endOffset);
554 m_observerWrapper->observer().endRuleBody(endOffset); 554 m_observerWrapper->observer().endRuleBody(endOffset);
555 } 555 }
556 556
557 consumeDeclarationList(block, StyleRule::Viewport); 557 consumeDeclarationList(block, StyleRule::Viewport);
558 return StyleRuleViewport::create(createStylePropertySet(m_parsedProperties, CSSViewportRuleMode)); 558 return StyleRuleViewport::create(createStylePropertySet(m_parsedProperties, CSSViewportRuleMode));
559 } 559 }
560 560
561 RawPtr<StyleRuleFontFace> CSSParserImpl::consumeFontFaceRule(CSSParserTokenRange prelude, CSSParserTokenRange block) 561 StyleRuleFontFace* CSSParserImpl::consumeFontFaceRule(CSSParserTokenRange prelud e, CSSParserTokenRange block)
562 { 562 {
563 prelude.consumeWhitespace(); 563 prelude.consumeWhitespace();
564 if (!prelude.atEnd()) 564 if (!prelude.atEnd())
565 return nullptr; // Parse error; @font-face prelude should be empty 565 return nullptr; // Parse error; @font-face prelude should be empty
566 566
567 if (m_observerWrapper) { 567 if (m_observerWrapper) {
568 unsigned endOffset = m_observerWrapper->endOffset(prelude); 568 unsigned endOffset = m_observerWrapper->endOffset(prelude);
569 m_observerWrapper->observer().startRuleHeader(StyleRule::FontFace, m_obs erverWrapper->startOffset(prelude)); 569 m_observerWrapper->observer().startRuleHeader(StyleRule::FontFace, m_obs erverWrapper->startOffset(prelude));
570 m_observerWrapper->observer().endRuleHeader(endOffset); 570 m_observerWrapper->observer().endRuleHeader(endOffset);
571 m_observerWrapper->observer().startRuleBody(endOffset); 571 m_observerWrapper->observer().startRuleBody(endOffset);
572 m_observerWrapper->observer().endRuleBody(endOffset); 572 m_observerWrapper->observer().endRuleBody(endOffset);
573 } 573 }
574 574
575 if (m_styleSheet) 575 if (m_styleSheet)
576 m_styleSheet->setHasFontFaceRule(true); 576 m_styleSheet->setHasFontFaceRule(true);
577 577
578 consumeDeclarationList(block, StyleRule::FontFace); 578 consumeDeclarationList(block, StyleRule::FontFace);
579 return StyleRuleFontFace::create(createStylePropertySet(m_parsedProperties, m_context.mode())); 579 return StyleRuleFontFace::create(createStylePropertySet(m_parsedProperties, m_context.mode()));
580 } 580 }
581 581
582 RawPtr<StyleRuleKeyframes> CSSParserImpl::consumeKeyframesRule(bool webkitPrefix ed, CSSParserTokenRange prelude, CSSParserTokenRange block) 582 StyleRuleKeyframes* CSSParserImpl::consumeKeyframesRule(bool webkitPrefixed, CSS ParserTokenRange prelude, CSSParserTokenRange block)
583 { 583 {
584 prelude.consumeWhitespace(); 584 prelude.consumeWhitespace();
585 CSSParserTokenRange rangeCopy = prelude; // For inspector callbacks 585 CSSParserTokenRange rangeCopy = prelude; // For inspector callbacks
586 const CSSParserToken& nameToken = prelude.consumeIncludingWhitespace(); 586 const CSSParserToken& nameToken = prelude.consumeIncludingWhitespace();
587 if (!prelude.atEnd()) 587 if (!prelude.atEnd())
588 return nullptr; // Parse error; expected single non-whitespace token in @keyframes header 588 return nullptr; // Parse error; expected single non-whitespace token in @keyframes header
589 589
590 String name; 590 String name;
591 if (nameToken.type() == IdentToken) { 591 if (nameToken.type() == IdentToken) {
592 name = nameToken.value(); 592 name = nameToken.value();
593 } else if (nameToken.type() == StringToken && webkitPrefixed) { 593 } else if (nameToken.type() == StringToken && webkitPrefixed) {
594 if (m_context.useCounter()) 594 if (m_context.useCounter())
595 m_context.useCounter()->count(UseCounter::QuotedKeyframesRule); 595 m_context.useCounter()->count(UseCounter::QuotedKeyframesRule);
596 name = nameToken.value(); 596 name = nameToken.value();
597 } else { 597 } else {
598 return nullptr; // Parse error; expected ident token in @keyframes heade r 598 return nullptr; // Parse error; expected ident token in @keyframes heade r
599 } 599 }
600 600
601 if (m_observerWrapper) { 601 if (m_observerWrapper) {
602 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframes, m_ob serverWrapper->startOffset(rangeCopy)); 602 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframes, m_ob serverWrapper->startOffset(rangeCopy));
603 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (prelude)); 603 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (prelude));
604 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(block)); 604 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(block));
605 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b lock)); 605 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(b lock));
606 } 606 }
607 607
608 RawPtr<StyleRuleKeyframes> keyframeRule = StyleRuleKeyframes::create(); 608 StyleRuleKeyframes* keyframeRule = StyleRuleKeyframes::create();
609 consumeRuleList(block, KeyframesRuleList, [keyframeRule](RawPtr<StyleRuleBas e> keyframe) { 609 consumeRuleList(block, KeyframesRuleList, [keyframeRule](StyleRuleBase* keyf rame) {
610 keyframeRule->parserAppendKeyframe(toStyleRuleKeyframe(keyframe.get())); 610 keyframeRule->parserAppendKeyframe(toStyleRuleKeyframe(keyframe));
611 }); 611 });
612 keyframeRule->setName(name); 612 keyframeRule->setName(name);
613 keyframeRule->setVendorPrefixed(webkitPrefixed); 613 keyframeRule->setVendorPrefixed(webkitPrefixed);
614 return keyframeRule.release(); 614 return keyframeRule;
615 } 615 }
616 616
617 RawPtr<StyleRulePage> CSSParserImpl::consumePageRule(CSSParserTokenRange prelude , CSSParserTokenRange block) 617 StyleRulePage* CSSParserImpl::consumePageRule(CSSParserTokenRange prelude, CSSPa rserTokenRange block)
618 { 618 {
619 CSSSelectorList selectorList = parsePageSelector(prelude, m_styleSheet); 619 CSSSelectorList selectorList = parsePageSelector(prelude, m_styleSheet);
620 if (!selectorList.isValid()) 620 if (!selectorList.isValid())
621 return nullptr; // Parse error, invalid @page selector 621 return nullptr; // Parse error, invalid @page selector
622 622
623 if (m_observerWrapper) { 623 if (m_observerWrapper) {
624 unsigned endOffset = m_observerWrapper->endOffset(prelude); 624 unsigned endOffset = m_observerWrapper->endOffset(prelude);
625 m_observerWrapper->observer().startRuleHeader(StyleRule::Page, m_observe rWrapper->startOffset(prelude)); 625 m_observerWrapper->observer().startRuleHeader(StyleRule::Page, m_observe rWrapper->startOffset(prelude));
626 m_observerWrapper->observer().endRuleHeader(endOffset); 626 m_observerWrapper->observer().endRuleHeader(endOffset);
627 } 627 }
628 628
629 consumeDeclarationList(block, StyleRule::Style); 629 consumeDeclarationList(block, StyleRule::Style);
630 630
631 return StyleRulePage::create(std::move(selectorList), createStylePropertySet (m_parsedProperties, m_context.mode())); 631 return StyleRulePage::create(std::move(selectorList), createStylePropertySet (m_parsedProperties, m_context.mode()));
632 } 632 }
633 633
634 void CSSParserImpl::consumeApplyRule(CSSParserTokenRange prelude) 634 void CSSParserImpl::consumeApplyRule(CSSParserTokenRange prelude)
635 { 635 {
636 ASSERT(RuntimeEnabledFeatures::cssApplyAtRulesEnabled()); 636 ASSERT(RuntimeEnabledFeatures::cssApplyAtRulesEnabled());
637 637
638 prelude.consumeWhitespace(); 638 prelude.consumeWhitespace();
639 const CSSParserToken& ident = prelude.consumeIncludingWhitespace(); 639 const CSSParserToken& ident = prelude.consumeIncludingWhitespace();
640 if (!prelude.atEnd() || !CSSVariableParser::isValidVariableName(ident)) 640 if (!prelude.atEnd() || !CSSVariableParser::isValidVariableName(ident))
641 return; // Parse error, expected a single custom property name 641 return; // Parse error, expected a single custom property name
642 m_parsedProperties.append(CSSProperty( 642 m_parsedProperties.append(CSSProperty(
643 CSSPropertyApplyAtRule, 643 CSSPropertyApplyAtRule,
644 CSSCustomIdentValue::create(ident.value()))); 644 CSSCustomIdentValue::create(ident.value())));
645 } 645 }
646 646
647 RawPtr<StyleRuleKeyframe> CSSParserImpl::consumeKeyframeStyleRule(CSSParserToken Range prelude, CSSParserTokenRange block) 647 StyleRuleKeyframe* CSSParserImpl::consumeKeyframeStyleRule(CSSParserTokenRange p relude, CSSParserTokenRange block)
648 { 648 {
649 OwnPtr<Vector<double>> keyList = consumeKeyframeKeyList(prelude); 649 OwnPtr<Vector<double>> keyList = consumeKeyframeKeyList(prelude);
650 if (!keyList) 650 if (!keyList)
651 return nullptr; 651 return nullptr;
652 652
653 if (m_observerWrapper) { 653 if (m_observerWrapper) {
654 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframe, m_obs erverWrapper->startOffset(prelude)); 654 m_observerWrapper->observer().startRuleHeader(StyleRule::Keyframe, m_obs erverWrapper->startOffset(prelude));
655 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (prelude)); 655 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset (prelude));
656 } 656 }
657 657
(...skipping 15 matching lines...) Expand all
673 CSSParserTokenRange selector = selectors.makeSubRange(selectorStart, &se lectors.peek()); 673 CSSParserTokenRange selector = selectors.makeSubRange(selectorStart, &se lectors.peek());
674 selectors.consumeIncludingWhitespace(); 674 selectors.consumeIncludingWhitespace();
675 675
676 wrapper.observer().observeSelector(wrapper.startOffset(selector), wrappe r.endOffset(selector)); 676 wrapper.observer().observeSelector(wrapper.startOffset(selector), wrappe r.endOffset(selector));
677 } 677 }
678 678
679 wrapper.observer().endRuleHeader(wrapper.endOffset(originalRange)); 679 wrapper.observer().endRuleHeader(wrapper.endOffset(originalRange));
680 } 680 }
681 681
682 682
683 RawPtr<StyleRule> CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, C SSParserTokenRange block) 683 StyleRule* CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, CSSParse rTokenRange block)
684 { 684 {
685 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c ontext, m_styleSheet); 685 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c ontext, m_styleSheet);
686 if (!selectorList.isValid()) 686 if (!selectorList.isValid())
687 return nullptr; // Parse error, invalid selector list 687 return nullptr; // Parse error, invalid selector list
688 688
689 if (m_observerWrapper) 689 if (m_observerWrapper)
690 observeSelectors(*m_observerWrapper, prelude); 690 observeSelectors(*m_observerWrapper, prelude);
691 691
692 consumeDeclarationList(block, StyleRule::Style); 692 consumeDeclarationList(block, StyleRule::Style);
693 693
(...skipping 26 matching lines...) Expand all
720 range.consumeComponentValue(); 720 range.consumeComponentValue();
721 721
722 consumeDeclaration(range.makeSubRange(declarationStart, &range.peek( )), ruleType); 722 consumeDeclaration(range.makeSubRange(declarationStart, &range.peek( )), ruleType);
723 723
724 if (useObserver) 724 if (useObserver)
725 m_observerWrapper->skipCommentsBefore(range, false); 725 m_observerWrapper->skipCommentsBefore(range, false);
726 break; 726 break;
727 } 727 }
728 case AtKeywordToken: { 728 case AtKeywordToken: {
729 AllowedRulesType allowedRules = ruleType == StyleRule::Style && Runt imeEnabledFeatures::cssApplyAtRulesEnabled() ? ApplyRules : NoRules; 729 AllowedRulesType allowedRules = ruleType == StyleRule::Style && Runt imeEnabledFeatures::cssApplyAtRulesEnabled() ? ApplyRules : NoRules;
730 RawPtr<StyleRuleBase> rule = consumeAtRule(range, allowedRules); 730 StyleRuleBase* rule = consumeAtRule(range, allowedRules);
731 ASSERT_UNUSED(rule, !rule); 731 ASSERT_UNUSED(rule, !rule);
732 break; 732 break;
733 } 733 }
734 default: // Parse error, unexpected token in declaration list 734 default: // Parse error, unexpected token in declaration list
735 while (!range.atEnd() && range.peek().type() != SemicolonToken) 735 while (!range.atEnd() && range.peek().type() != SemicolonToken)
736 range.consumeComponentValue(); 736 range.consumeComponentValue();
737 break; 737 break;
738 } 738 }
739 } 739 }
740 740
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 787
788 if (m_observerWrapper && (ruleType == StyleRule::Style || ruleType == StyleR ule::Keyframe)) { 788 if (m_observerWrapper && (ruleType == StyleRule::Style || ruleType == StyleR ule::Keyframe)) {
789 m_observerWrapper->observer().observeProperty( 789 m_observerWrapper->observer().observeProperty(
790 m_observerWrapper->startOffset(rangeCopy), m_observerWrapper->endOff set(rangeCopy), 790 m_observerWrapper->startOffset(rangeCopy), m_observerWrapper->endOff set(rangeCopy),
791 important, m_parsedProperties.size() != propertiesCount); 791 important, m_parsedProperties.size() != propertiesCount);
792 } 792 }
793 } 793 }
794 794
795 void CSSParserImpl::consumeVariableValue(CSSParserTokenRange range, const Atomic String& variableName, bool important) 795 void CSSParserImpl::consumeVariableValue(CSSParserTokenRange range, const Atomic String& variableName, bool important)
796 { 796 {
797 if (RawPtr<CSSCustomPropertyDeclaration> value = CSSVariableParser::parseDec larationValue(variableName, range)) 797 if (CSSCustomPropertyDeclaration* value = CSSVariableParser::parseDeclaratio nValue(variableName, range))
798 m_parsedProperties.append(CSSProperty(CSSPropertyVariable, value.release (), important)); 798 m_parsedProperties.append(CSSProperty(CSSPropertyVariable, value, import ant));
799 } 799 }
800 800
801 void CSSParserImpl::consumeDeclarationValue(CSSParserTokenRange range, CSSProper tyID unresolvedProperty, bool important, StyleRule::RuleType ruleType) 801 void CSSParserImpl::consumeDeclarationValue(CSSParserTokenRange range, CSSProper tyID unresolvedProperty, bool important, StyleRule::RuleType ruleType)
802 { 802 {
803 CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_contex t, m_parsedProperties, ruleType); 803 CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_contex t, m_parsedProperties, ruleType);
804 } 804 }
805 805
806 PassOwnPtr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList(CSSParserTokenR ange range) 806 PassOwnPtr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList(CSSParserTokenR ange range)
807 { 807 {
808 OwnPtr<Vector<double>> result = adoptPtr(new Vector<double>); 808 OwnPtr<Vector<double>> result = adoptPtr(new Vector<double>);
809 while (true) { 809 while (true) {
810 range.consumeWhitespace(); 810 range.consumeWhitespace();
811 const CSSParserToken& token = range.consumeIncludingWhitespace(); 811 const CSSParserToken& token = range.consumeIncludingWhitespace();
812 if (token.type() == PercentageToken && token.numericValue() >= 0 && toke n.numericValue() <= 100) 812 if (token.type() == PercentageToken && token.numericValue() >= 0 && toke n.numericValue() <= 100)
813 result->append(token.numericValue() / 100); 813 result->append(token.numericValue() / 100);
814 else if (token.type() == IdentToken && token.valueEqualsIgnoringASCIICas e("from")) 814 else if (token.type() == IdentToken && token.valueEqualsIgnoringASCIICas e("from"))
815 result->append(0); 815 result->append(0);
816 else if (token.type() == IdentToken && token.valueEqualsIgnoringASCIICas e("to")) 816 else if (token.type() == IdentToken && token.valueEqualsIgnoringASCIICas e("to"))
817 result->append(1); 817 result->append(1);
818 else 818 else
819 return nullptr; // Parser error, invalid value in keyframe selector 819 return nullptr; // Parser error, invalid value in keyframe selector
820 if (range.atEnd()) 820 if (range.atEnd())
821 return result.release(); 821 return result.release();
822 if (range.consume().type() != CommaToken) 822 if (range.consume().type() != CommaToken)
823 return nullptr; // Parser error 823 return nullptr; // Parser error
824 } 824 }
825 } 825 }
826 826
827 } // namespace blink 827 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698