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

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

Issue 2024373002: Replace CSSParserString with StringView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Match arguments to equalStringView. Created 4 years, 6 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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 "tokenCount", scope.tokenCount(), 183 "tokenCount", scope.tokenCount(),
184 "length", string.length()); 184 "length", string.length());
185 } 185 }
186 186
187 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl eSheetContents* styleSheet) 187 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl eSheetContents* styleSheet)
188 { 188 {
189 // We only support a small subset of the css-page spec. 189 // We only support a small subset of the css-page spec.
190 range.consumeWhitespace(); 190 range.consumeWhitespace();
191 AtomicString typeSelector; 191 AtomicString typeSelector;
192 if (range.peek().type() == IdentToken) 192 if (range.peek().type() == IdentToken)
193 typeSelector = range.consume().value(); 193 typeSelector = AtomicString(range.consume().value().toString());
194 194
195 AtomicString pseudo; 195 AtomicString pseudo;
196 if (range.peek().type() == ColonToken) { 196 if (range.peek().type() == ColonToken) {
197 range.consume(); 197 range.consume();
198 if (range.peek().type() != IdentToken) 198 if (range.peek().type() != IdentToken)
199 return CSSSelectorList(); 199 return CSSSelectorList();
200 pseudo = range.consume().value(); 200 pseudo = AtomicString(range.consume().value().toString());
201 } 201 }
202 202
203 range.consumeWhitespace(); 203 range.consumeWhitespace();
204 if (!range.atEnd()) 204 if (!range.atEnd())
205 return CSSSelectorList(); // Parse error; extra tokens in @page selector 205 return CSSSelectorList(); // Parse error; extra tokens in @page selector
206 206
207 OwnPtr<CSSParserSelector> selector; 207 OwnPtr<CSSParserSelector> selector;
208 if (!typeSelector.isNull() && pseudo.isNull()) { 208 if (!typeSelector.isNull() && pseudo.isNull()) {
209 selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelecto r, styleSheet->defaultNamespace())); 209 selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelecto r, styleSheet->defaultNamespace()));
210 } else { 210 } else {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 callback(rule); 349 callback(rule);
350 } 350 }
351 } 351 }
352 352
353 return firstRuleValid; 353 return firstRuleValid;
354 } 354 }
355 355
356 StyleRuleBase* CSSParserImpl::consumeAtRule(CSSParserTokenRange& range, AllowedR ulesType 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 StringView 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())
367 countAtRule(m_context.useCounter(), id); 367 countAtRule(m_context.useCounter(), id);
368 368
369 if (range.atEnd() || range.peek().type() == SemicolonToken) { 369 if (range.atEnd() || range.peek().type() == SemicolonToken) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 ASSERT_NOT_REACHED(); 429 ASSERT_NOT_REACHED();
430 return nullptr; 430 return nullptr;
431 } 431 }
432 432
433 // This may still consume tokens if it fails 433 // This may still consume tokens if it fails
434 static AtomicString consumeStringOrURI(CSSParserTokenRange& range) 434 static AtomicString consumeStringOrURI(CSSParserTokenRange& range)
435 { 435 {
436 const CSSParserToken& token = range.peek(); 436 const CSSParserToken& token = range.peek();
437 437
438 if (token.type() == StringToken || token.type() == UrlToken) 438 if (token.type() == StringToken || token.type() == UrlToken)
439 return range.consumeIncludingWhitespace().value(); 439 return AtomicString(range.consumeIncludingWhitespace().value().toString( ));
440 440
441 if (token.type() != FunctionToken || !token.valueEqualsIgnoringASCIICase("ur l")) 441 if (token.type() != FunctionToken || !token.valueEqualsIgnoringASCIICase("ur l"))
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 AtomicString(uri.value().toString());
450 } 450 }
451 451
452 StyleRuleCharset* CSSParserImpl::consumeCharsetRule(CSSParserTokenRange prelude) 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 }
(...skipping 14 matching lines...) Expand all
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 StyleRuleNamespace* CSSParserImpl::consumeNamespaceRule(CSSParserTokenRange prel ude) 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 = AtomicString(prelude.consumeIncludingWhitespace().valu e().toString());
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 StyleRuleMedia* CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelude, CSS ParserTokenRange block) 494 StyleRuleMedia* CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelude, CSS ParserTokenRange block)
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 StyleRuleKeyframes* CSSParserImpl::consumeKeyframesRule(bool webkitPrefixed, CSS ParserTokenRange 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().toString();
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().toString();
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 }
(...skipping 27 matching lines...) Expand all
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().toString())));
645 } 645 }
646 646
647 StyleRuleKeyframe* CSSParserImpl::consumeKeyframeStyleRule(CSSParserTokenRange p relude, 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));
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 while (last->type() == WhitespaceToken) 765 while (last->type() == WhitespaceToken)
766 --last; 766 --last;
767 if (last->type() == DelimiterToken && last->delimiter() == '!') { 767 if (last->type() == DelimiterToken && last->delimiter() == '!') {
768 important = true; 768 important = true;
769 declarationValueEnd = last; 769 declarationValueEnd = last;
770 } 770 }
771 } 771 }
772 772
773 size_t propertiesCount = m_parsedProperties.size(); 773 size_t propertiesCount = m_parsedProperties.size();
774 if (RuntimeEnabledFeatures::cssVariablesEnabled() && unresolvedProperty == C SSPropertyInvalid && CSSVariableParser::isValidVariableName(token)) { 774 if (RuntimeEnabledFeatures::cssVariablesEnabled() && unresolvedProperty == C SSPropertyInvalid && CSSVariableParser::isValidVariableName(token)) {
775 AtomicString variableName = token.value(); 775 AtomicString variableName = AtomicString(token.value().toString());
776 consumeVariableValue(range.makeSubRange(&range.peek(), declarationValueE nd), variableName, important); 776 consumeVariableValue(range.makeSubRange(&range.peek(), declarationValueE nd), variableName, important);
777 } 777 }
778 778
779 if (important && (ruleType == StyleRule::FontFace || ruleType == StyleRule:: Keyframe)) 779 if (important && (ruleType == StyleRule::FontFace || ruleType == StyleRule:: Keyframe))
780 return; 780 return;
781 781
782 if (unresolvedProperty != CSSPropertyInvalid) { 782 if (unresolvedProperty != CSSPropertyInvalid) {
783 if (m_styleSheet && m_styleSheet->singleOwnerDocument()) 783 if (m_styleSheet && m_styleSheet->singleOwnerDocument())
784 Deprecation::warnOnDeprecatedProperties(m_styleSheet->singleOwnerDoc ument()->frame(), unresolvedProperty); 784 Deprecation::warnOnDeprecatedProperties(m_styleSheet->singleOwnerDoc ument()->frame(), unresolvedProperty);
785 consumeDeclarationValue(range.makeSubRange(&range.peek(), declarationVal ueEnd), unresolvedProperty, important, ruleType); 785 consumeDeclarationValue(range.makeSubRange(&range.peek(), declarationVal ueEnd), unresolvedProperty, important, ruleType);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
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; 821 return result;
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