diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/css/css_selector.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/css/css_selector.cc | 67 |
1 files changed, 30 insertions, 37 deletions
diff --git a/chromium/third_party/blink/renderer/core/css/css_selector.cc b/chromium/third_party/blink/renderer/core/css/css_selector.cc index 58b9234b3a3..8b651b9b6d0 100644 --- a/chromium/third_party/blink/renderer/core/css/css_selector.cc +++ b/chromium/third_party/blink/renderer/core/css/css_selector.cc @@ -44,8 +44,6 @@ namespace blink { -using namespace HTMLNames; - struct SameSizeAsCSSSelector { unsigned bitfields; void* pointers[1]; @@ -118,7 +116,7 @@ inline unsigned CSSSelector::SpecificityForOneSelector() const { // FIXME: PseudoAny should base the specificity on the sub-selectors. // See http://lists.w3.org/Archives/Public/www-style/2010Sep/0530.html case kPseudoAny: - case kPseudoMatches: + case kPseudoIs: default: break; } @@ -217,8 +215,8 @@ PseudoId CSSSelector::GetPseudoId(PseudoType type) { case kPseudoLink: case kPseudoVisited: case kPseudoAny: - case kPseudoMatches: - case kPseudoIS: + case kPseudoIs: + case kPseudoWhere: case kPseudoAnyLink: case kPseudoWebkitAnyLink: case kPseudoAutofill: @@ -399,9 +397,8 @@ const static NameToPseudoStruct kPseudoTypeWithArgumentsMap[] = { {"cue", CSSSelector::kPseudoCue}, {"host", CSSSelector::kPseudoHost}, {"host-context", CSSSelector::kPseudoHostContext}, - {"is", CSSSelector::kPseudoIS}, + {"is", CSSSelector::kPseudoIs}, {"lang", CSSSelector::kPseudoLang}, - {"matches", CSSSelector::kPseudoMatches}, {"not", CSSSelector::kPseudoNot}, {"nth-child", CSSSelector::kPseudoNthChild}, {"nth-last-child", CSSSelector::kPseudoNthLastChild}, @@ -409,24 +406,7 @@ const static NameToPseudoStruct kPseudoTypeWithArgumentsMap[] = { {"nth-of-type", CSSSelector::kPseudoNthOfType}, {"part", CSSSelector::kPseudoPart}, {"slotted", CSSSelector::kPseudoSlotted}, -}; - -class NameToPseudoCompare { - public: - NameToPseudoCompare(const AtomicString& key) : key_(key) { - DCHECK(key_.Is8Bit()); - } - - bool operator()(const NameToPseudoStruct& entry, const NameToPseudoStruct&) { - DCHECK(entry.string); - const char* key = reinterpret_cast<const char*>(key_.Characters8()); - // If strncmp returns 0, then either the keys are equal, or |key_| sorts - // before |entry|. - return strncmp(entry.string, key, key_.length()) < 0; - } - - private: - const AtomicString& key_; + {"where", CSSSelector::kPseudoWhere}, }; static CSSSelector::PseudoType NameToPseudoType(const AtomicString& name, @@ -445,10 +425,17 @@ static CSSSelector::PseudoType NameToPseudoType(const AtomicString& name, pseudo_type_map_end = kPseudoTypeWithoutArgumentsMap + arraysize(kPseudoTypeWithoutArgumentsMap); } - NameToPseudoStruct dummy_key = {nullptr, CSSSelector::kPseudoUnknown}; - const NameToPseudoStruct* match = - std::lower_bound(pseudo_type_map, pseudo_type_map_end, dummy_key, - NameToPseudoCompare(name)); + const NameToPseudoStruct* match = std::lower_bound( + pseudo_type_map, pseudo_type_map_end, name, + [](const NameToPseudoStruct& entry, const AtomicString& name) -> bool { + DCHECK(name.Is8Bit()); + DCHECK(entry.string); + // If strncmp returns 0, then either the keys are equal, or |name| sorts + // before |entry|. + return strncmp(entry.string, + reinterpret_cast<const char*>(name.Characters8()), + name.length()) < 0; + }); if (match == pseudo_type_map_end || match->string != name.GetString()) return CSSSelector::kPseudoUnknown; @@ -619,12 +606,12 @@ void CSSSelector::UpdatePseudoType(const AtomicString& value, case kPseudoIncrement: case kPseudoIndeterminate: case kPseudoInvalid: - case kPseudoIS: + case kPseudoWhere: case kPseudoLang: case kPseudoLastChild: case kPseudoLastOfType: case kPseudoLink: - case kPseudoMatches: + case kPseudoIs: case kPseudoNoButton: case kPseudoNot: case kPseudoNthChild: @@ -770,8 +757,8 @@ const CSSSelector* CSSSelector::SerializeCompound( case kPseudoHost: case kPseudoHostContext: case kPseudoAny: - case kPseudoMatches: - case kPseudoIS: + case kPseudoIs: + case kPseudoWhere: break; default: break; @@ -1049,6 +1036,12 @@ bool CSSSelector::MatchesPseudoElement() const { return false; } +bool CSSSelector::IsTreeAbidingPseudoElement() const { + return Match() == CSSSelector::kPseudoElement && + (GetPseudoType() == kPseudoBefore || GetPseudoType() == kPseudoAfter || + GetPseudoType() == kPseudoPlaceholder); +} + template <typename Functor> static bool ForAnyInTagHistory(const Functor& functor, const CSSSelector& selector) { @@ -1102,17 +1095,17 @@ bool CSSSelector::NeedsUpdatedDistribution() const { *this); } -bool CSSSelector::HasPseudoMatches() const { +bool CSSSelector::HasPseudoIs() const { for (const CSSSelector* s = this; s; s = s->TagHistory()) { - if (s->GetPseudoType() == CSSSelector::kPseudoMatches) + if (s->GetPseudoType() == CSSSelector::kPseudoIs) return true; } return false; } -bool CSSSelector::HasPseudoIS() const { +bool CSSSelector::HasPseudoWhere() const { for (const CSSSelector* s = this; s; s = s->TagHistory()) { - if (s->GetPseudoType() == CSSSelector::kPseudoIS) + if (s->GetPseudoType() == CSSSelector::kPseudoWhere) return true; } return false; |