Index: Source/core/css/resolver/StyleResolver.h |
diff --git a/Source/core/css/resolver/StyleResolver.h b/Source/core/css/resolver/StyleResolver.h |
index 76bd3075b0e4371cc3b8ddf042f85b2a8c3a2202..08aeedd6a69ef2c7b3a3d7b1615c70fbcf4d1d47 100644 |
--- a/Source/core/css/resolver/StyleResolver.h |
+++ b/Source/core/css/resolver/StyleResolver.h |
@@ -39,6 +39,7 @@ |
#include "wtf/Deque.h" |
#include "wtf/HashMap.h" |
#include "wtf/HashSet.h" |
+#include "wtf/ListHashSet.h" |
#include "wtf/RefPtr.h" |
#include "wtf/Vector.h" |
@@ -215,6 +216,11 @@ public: |
void resetAtHostRules(const ContainerNode*); |
void finishAppendAuthorStyleSheets(); |
+ void lazyAppendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyleSheet> >&); |
+ void removePendingAuthorStyleSheets(const Vector<RefPtr<CSSStyleSheet> >&); |
+ void appendPendingAuthorStyleSheets(); |
+ bool hasPendingAuthorStyleSheets() const { return m_pendingStyleSheets.size() > 0 || m_needCollectFeatures; } |
+ |
DocumentRuleSets& ruleSets() { return m_ruleSets; } |
const DocumentRuleSets& ruleSets() const { return m_ruleSets; } |
SelectorFilter& selectorFilter() { return m_selectorFilter; } |
@@ -263,6 +269,12 @@ public: |
InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWrappers; } |
const RuleFeatureSet& ruleFeatureSet() const { return m_features; } |
+ const RuleFeatureSet& ensureRuleFeatureSet() |
+ { |
+ if (hasPendingAuthorStyleSheets()) |
+ appendPendingAuthorStyleSheets(); // slow path. |
+ return m_features; |
+ } |
StyleSharingList& styleSharingList() { return m_styleSharingList; } |
@@ -292,6 +304,7 @@ private: |
void matchUARules(ElementRuleCollector&); |
void matchUserRules(ElementRuleCollector&, bool includeEmptyRules); |
void collectFeatures(); |
+ void resetRuleFeatures(); |
bool fastRejectSelector(const RuleData&) const; |
@@ -347,6 +360,8 @@ private: |
RefPtr<ViewportStyleResolver> m_viewportStyleResolver; |
+ ListHashSet<CSSStyleSheet*, 16> m_pendingStyleSheets; |
+ |
ScopedStyleTree m_styleTree; |
// FIXME: The entire logic of collecting features on StyleResolver, as well astransferring them |
@@ -354,6 +369,7 @@ private: |
RuleFeatureSet m_features; |
OwnPtr<RuleSet> m_siblingRuleSet; |
OwnPtr<RuleSet> m_uncommonAttributeRuleSet; |
+ bool m_needCollectFeatures; |
InspectorCSSOMWrappers m_inspectorCSSOMWrappers; |