Index: third_party/WebKit/Source/core/css/RuleFeature.h |
diff --git a/third_party/WebKit/Source/core/css/RuleFeature.h b/third_party/WebKit/Source/core/css/RuleFeature.h |
index eb4637caf1878c4c32596feaed361e8e828c8262..56bb24bf31a0026a819ee8f6a8589cfa7e825036 100644 |
--- a/third_party/WebKit/Source/core/css/RuleFeature.h |
+++ b/third_party/WebKit/Source/core/css/RuleFeature.h |
@@ -80,13 +80,13 @@ public: |
bool hasSelectorForAttribute(const AtomicString& attributeName) const |
{ |
- ASSERT(!attributeName.isEmpty()); |
+ DCHECK(!attributeName.isEmpty()); |
return m_attributeInvalidationSets.contains(attributeName); |
} |
bool hasSelectorForClass(const AtomicString& classValue) const |
{ |
- ASSERT(!classValue.isEmpty()); |
+ DCHECK(!classValue.isEmpty()); |
return m_classInvalidationSets.contains(classValue); |
} |
@@ -117,7 +117,7 @@ public: |
bool isAlive() const { return m_isAlive; } |
protected: |
- InvalidationSet* invalidationSetForSelector(const CSSSelector&, InvalidationType); |
+ InvalidationSet* invalidationSetForSimpleSelector(const CSSSelector&, InvalidationType); |
private: |
// Each map entry is either a DescendantInvalidationSet or SiblingInvalidationSet. |
@@ -152,15 +152,17 @@ private: |
struct InvalidationSetFeatures { |
DISALLOW_NEW(); |
+ void add(const InvalidationSetFeatures& other); |
+ bool hasFeatures() const; |
+ |
Vector<AtomicString> classes; |
Vector<AtomicString> attributes; |
Vector<AtomicString> ids; |
Vector<AtomicString> tagNames; |
- unsigned maxDirectAdjacentSelectors = UINT_MAX; |
+ unsigned maxDirectAdjacentSelectors = 0; |
bool customPseudoElement = false; |
bool hasBeforeOrAfter = false; |
bool treeBoundaryCrossing = false; |
- bool adjacent = false; |
bool insertionPointCrossing = false; |
bool forceSubtree = false; |
bool contentPseudoCrossing = false; |
@@ -168,15 +170,26 @@ private: |
bool hasNthPseudo = false; |
}; |
- static bool extractInvalidationSetFeature(const CSSSelector&, InvalidationSetFeatures&); |
+ static void extractInvalidationSetFeature(const CSSSelector&, InvalidationSetFeatures&); |
enum UseFeaturesType { UseFeatures, ForceSubtree }; |
enum PositionType { Subject, Ancestor }; |
- std::pair<const CSSSelector*, UseFeaturesType> extractInvalidationSetFeatures(const CSSSelector&, InvalidationSetFeatures&, PositionType, CSSSelector::PseudoType = CSSSelector::PseudoUnknown); |
+ |
+ void extractInvalidationSetFeaturesFromSimpleSelector(const CSSSelector&, InvalidationSetFeatures&); |
+ const CSSSelector* extractInvalidationSetFeaturesFromCompound(const CSSSelector&, InvalidationSetFeatures&, PositionType, CSSSelector::PseudoType = CSSSelector::PseudoUnknown); |
+ const CSSSelector* extractInvalidationSetFeaturesFromSelectorList(const CSSSelector&, InvalidationSetFeatures&, PositionType); |
+ void updateFeaturesFromCombinator(const CSSSelector&, |
+ const CSSSelector* lastCompoundSelectorInAdjacentChain, |
+ InvalidationSetFeatures& lastCompoundInAdjacentChainFeatures, |
+ InvalidationSetFeatures*& siblingFeatures, |
+ InvalidationSetFeatures& descendantFeatures); |
void addFeaturesToInvalidationSet(InvalidationSet&, const InvalidationSetFeatures&); |
- void addFeaturesToInvalidationSets(const CSSSelector*, InvalidationSetFeatures* siblingFeatures, InvalidationSetFeatures& descendantFeatures); |
+ void addFeaturesToInvalidationSets(const CSSSelector&, InvalidationSetFeatures& descendantFeatures); |
+ const CSSSelector* addFeaturesToInvalidationSetsForCompoundSelector(const CSSSelector&, InvalidationSetFeatures* siblingFeatures, InvalidationSetFeatures& descendantFeatures); |
+ void addFeaturesToInvalidationSetsForSimpleSelector(const CSSSelector&, InvalidationSetFeatures* siblingFeatures, InvalidationSetFeatures& descendantFeatures); |
+ void addFeaturesToInvalidationSetsForSelectorList(const CSSSelector&, InvalidationSetFeatures* siblingFeatures, InvalidationSetFeatures& descendantFeatures); |
void addFeaturesToUniversalSiblingInvalidationSet(const InvalidationSetFeatures& siblingFeatures, const InvalidationSetFeatures& descendantFeatures); |
void addClassToInvalidationSet(const AtomicString& className, Element&); |