summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/css/css_selector.cc
diff options
context:
space:
mode:
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.cc67
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;