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

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

Issue 1636453002: Use ASCII case-insensitive matching for ident-likes in the CSS parser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Consistent indentation in test. Created 4 years, 11 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/CSSSelectorParser.h" 5 #include "core/css/parser/CSSSelectorParser.h"
6 6
7 #include "core/css/CSSSelectorList.h" 7 #include "core/css/CSSSelectorList.h"
8 #include "core/css/StyleSheetContents.h" 8 #include "core/css/StyleSheetContents.h"
9 #include "core/frame/UseCounter.h" 9 #include "core/frame/UseCounter.h"
10 #include "platform/RuntimeEnabledFeatures.h" 10 #include "platform/RuntimeEnabledFeatures.h"
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 if (delimiter == '~') 567 if (delimiter == '~')
568 return CSSSelector::IndirectAdjacent; 568 return CSSSelector::IndirectAdjacent;
569 return CSSSelector::Child; 569 return CSSSelector::Child;
570 } 570 }
571 571
572 // Match /deep/ 572 // Match /deep/
573 if (delimiter != '/') 573 if (delimiter != '/')
574 return fallbackResult; 574 return fallbackResult;
575 range.consume(); 575 range.consume();
576 const CSSParserToken& ident = range.consume(); 576 const CSSParserToken& ident = range.consume();
577 if (ident.type() != IdentToken || !ident.valueEqualsIgnoringCase("deep")) 577 if (ident.type() != IdentToken || !ident.valueEqualsIgnoringASCIICase("deep" ))
578 m_failedParsing = true; 578 m_failedParsing = true;
579 const CSSParserToken& slash = range.consumeIncludingWhitespace(); 579 const CSSParserToken& slash = range.consumeIncludingWhitespace();
580 if (slash.type() != DelimiterToken || slash.delimiter() != '/') 580 if (slash.type() != DelimiterToken || slash.delimiter() != '/')
581 m_failedParsing = true; 581 m_failedParsing = true;
582 return CSSSelector::ShadowDeep; 582 return CSSSelector::ShadowDeep;
583 } 583 }
584 584
585 CSSSelector::Match CSSSelectorParser::consumeAttributeMatch(CSSParserTokenRange& range) 585 CSSSelector::Match CSSSelectorParser::consumeAttributeMatch(CSSParserTokenRange& range)
586 { 586 {
587 const CSSParserToken& token = range.consumeIncludingWhitespace(); 587 const CSSParserToken& token = range.consumeIncludingWhitespace();
(...skipping 15 matching lines...) Expand all
603 m_failedParsing = true; 603 m_failedParsing = true;
604 return CSSSelector::AttributeExact; 604 return CSSSelector::AttributeExact;
605 } 605 }
606 } 606 }
607 607
608 CSSSelector::AttributeMatchType CSSSelectorParser::consumeAttributeFlags(CSSPars erTokenRange& range) 608 CSSSelector::AttributeMatchType CSSSelectorParser::consumeAttributeFlags(CSSPars erTokenRange& range)
609 { 609 {
610 if (range.peek().type() != IdentToken) 610 if (range.peek().type() != IdentToken)
611 return CSSSelector::CaseSensitive; 611 return CSSSelector::CaseSensitive;
612 const CSSParserToken& flag = range.consumeIncludingWhitespace(); 612 const CSSParserToken& flag = range.consumeIncludingWhitespace();
613 if (flag.valueEqualsIgnoringCase("i")) 613 if (flag.valueEqualsIgnoringASCIICase("i"))
614 return CSSSelector::CaseInsensitive; 614 return CSSSelector::CaseInsensitive;
615 m_failedParsing = true; 615 m_failedParsing = true;
616 return CSSSelector::CaseSensitive; 616 return CSSSelector::CaseSensitive;
617 } 617 }
618 618
619 bool CSSSelectorParser::consumeANPlusB(CSSParserTokenRange& range, std::pair<int , int>& result) 619 bool CSSSelectorParser::consumeANPlusB(CSSParserTokenRange& range, std::pair<int , int>& result)
620 { 620 {
621 const CSSParserToken& token = range.consume(); 621 const CSSParserToken& token = range.consume();
622 if (token.type() == NumberToken && token.numericValueType() == IntegerValueT ype) { 622 if (token.type() == NumberToken && token.numericValueType() == IntegerValueT ype) {
623 result = std::make_pair(0, static_cast<int>(token.numericValue())); 623 result = std::make_pair(0, static_cast<int>(token.numericValue()));
624 return true; 624 return true;
625 } 625 }
626 if (token.type() == IdentToken) { 626 if (token.type() == IdentToken) {
627 if (token.valueEqualsIgnoringCase("odd")) { 627 if (token.valueEqualsIgnoringASCIICase("odd")) {
628 result = std::make_pair(2, 1); 628 result = std::make_pair(2, 1);
629 return true; 629 return true;
630 } 630 }
631 if (token.valueEqualsIgnoringCase("even")) { 631 if (token.valueEqualsIgnoringASCIICase("even")) {
632 result = std::make_pair(2, 0); 632 result = std::make_pair(2, 0);
633 return true; 633 return true;
634 } 634 }
635 } 635 }
636 636
637 // The 'n' will end up as part of an ident or dimension. For a valid <an+b>, 637 // The 'n' will end up as part of an ident or dimension. For a valid <an+b>,
638 // this will store a string of the form 'n', 'n-', or 'n-123'. 638 // this will store a string of the form 'n', 'n-', or 'n-123'.
639 String nString; 639 String nString;
640 640
641 if (token.type() == DelimiterToken && token.delimiter() == '+' && range.peek ().type() == IdentToken) { 641 if (token.type() == DelimiterToken && token.delimiter() == '+' && range.peek ().type() == IdentToken) {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 765
766 if (!splitAfter || !splitAfter->tagHistory()) 766 if (!splitAfter || !splitAfter->tagHistory())
767 return compoundSelector; 767 return compoundSelector;
768 768
769 OwnPtr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory(); 769 OwnPtr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory();
770 secondCompound->appendTagHistory(secondCompound->pseudoType() == CSSSelector ::PseudoSlotted ? CSSSelector::ShadowSlot : CSSSelector::ShadowPseudo, compoundS elector); 770 secondCompound->appendTagHistory(secondCompound->pseudoType() == CSSSelector ::PseudoSlotted ? CSSSelector::ShadowSlot : CSSSelector::ShadowPseudo, compoundS elector);
771 return secondCompound.release(); 771 return secondCompound.release();
772 } 772 }
773 773
774 } // namespace blink 774 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698