Index: Source/core/css/RuleFeature.h |
diff --git a/Source/core/css/RuleFeature.h b/Source/core/css/RuleFeature.h |
index a609342c466053a52ee7e630a4913309fefb2862..8c3edfbc779f6b40af3cfef34bc77bcc1746d72f 100644 |
--- a/Source/core/css/RuleFeature.h |
+++ b/Source/core/css/RuleFeature.h |
@@ -29,10 +29,13 @@ |
namespace WebCore { |
+class Document; |
+class ShadowRoot; |
class StyleRule; |
class CSSSelector; |
class CSSSelectorList; |
class RuleData; |
+class SpaceSplitString; |
struct RuleFeature { |
RuleFeature(StyleRule* rule, unsigned selectorIndex, bool hasDocumentSecurityOrigin) |
@@ -48,7 +51,7 @@ struct RuleFeature { |
class RuleFeatureSet { |
public: |
- RuleFeatureSet() { } |
+ RuleFeatureSet(); |
void add(const RuleFeatureSet&); |
void clear(); |
@@ -79,6 +82,11 @@ public: |
return m_metadata.idsInRules.contains(idValue); |
} |
+ void scheduleStyleInvalidationForClassChange(const SpaceSplitString& changedClasses, Element*); |
+ void scheduleStyleInvalidationForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, Element*); |
+ |
+ void computeStyleInvalidation(Document&); |
+ |
int hasIdsInSelectors() const |
{ |
return m_metadata.idsInRules.size() > 0; |
@@ -93,6 +101,8 @@ public: |
private: |
typedef HashMap<AtomicString, RefPtr<DescendantInvalidationSet> > InvalidationSetMap; |
+ typedef Vector<DescendantInvalidationSet*> InvalidationList; |
+ typedef HashMap<Element*, InvalidationList*> PendingInvalidationMap; |
struct FeatureMetadata { |
FeatureMetadata() |
: usesFirstLineRules(false) |
@@ -110,13 +120,28 @@ private: |
HashSet<AtomicString> attrsInRules; |
}; |
+ // These return true if setNeedsStyleRecalc() should be run on the Element, as a fallback. |
+ bool computeInvalidationSetsForClassChange(const SpaceSplitString& changedClasses, Element*); |
+ bool computeInvalidationSetsForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, Element*); |
+ |
void collectFeaturesFromSelector(const CSSSelector&, FeatureMetadata&); |
void collectFeaturesFromSelectorList(const CSSSelectorList*, FeatureMetadata&); |
+ |
DescendantInvalidationSet& ensureClassInvalidationSet(const AtomicString& className); |
bool updateClassInvalidationSets(const CSSSelector&); |
- InvalidationSetMap m_classInvalidationSets; |
+ void addClassToInvalidationSet(const AtomicString& className, Element*); |
+ |
+ bool invalidateStyleForClassChange(Element*, Vector<AtomicString>&, bool foundInvalidationSet); |
+ bool invalidateStyleForClassChangeOnChildren(Element*, Vector<AtomicString>& invalidationClasses, bool foundInvalidationSet); |
+ |
+ InvalidationList& ensurePendingInvalidationList(Element*); |
+ |
FeatureMetadata m_metadata; |
+ InvalidationSetMap m_classInvalidationSets; |
+ PendingInvalidationMap m_pendingInvalidationMap; |
+ |
+ bool m_targetedStyleRecalcEnabled; |
}; |
} // namespace WebCore |