From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- Source/WebCore/css/DocumentRuleSets.h | 68 ++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 20 deletions(-) (limited to 'Source/WebCore/css/DocumentRuleSets.h') diff --git a/Source/WebCore/css/DocumentRuleSets.h b/Source/WebCore/css/DocumentRuleSets.h index 00a271938..7cdb889a1 100644 --- a/Source/WebCore/css/DocumentRuleSets.h +++ b/Source/WebCore/css/DocumentRuleSets.h @@ -20,13 +20,13 @@ * */ -#ifndef DocumentRuleSets_h -#define DocumentRuleSets_h +#pragma once +#include "CSSDefaultStyleSheets.h" #include "RuleFeature.h" #include "RuleSet.h" - -#include +#include +#include #include #include @@ -34,38 +34,66 @@ namespace WebCore { class CSSStyleRule; class CSSStyleSheet; -class DocumentStyleSheetCollection; +class ExtensionStyleSheets; class InspectorCSSOMWrappers; class MediaQueryEvaluator; -class RuleSet; -class StyleScopeResolver; class DocumentRuleSets { public: DocumentRuleSets(); ~DocumentRuleSets(); - RuleSet* authorStyle() const { return m_authorStyle.get(); } + + bool isAuthorStyleDefined() const { return m_isAuthorStyleDefined; } + RuleSet& authorStyle() const { return *m_authorStyle.get(); } RuleSet* userStyle() const { return m_userStyle.get(); } - RuleFeatureSet& features() { return m_features; } - const RuleFeatureSet& features() const { return m_features; } + const RuleFeatureSet& features() const; RuleSet* sibling() const { return m_siblingRuleSet.get(); } RuleSet* uncommonAttribute() const { return m_uncommonAttributeRuleSet.get(); } + RuleSet* ancestorClassRules(const AtomicString& className) const; + + struct AttributeRules { + WTF_MAKE_FAST_ALLOCATED; + public: + Vector attributeSelectors; + std::unique_ptr ruleSet; + }; + const AttributeRules* ancestorAttributeRulesForHTML(const AtomicString&) const; - void initUserStyle(DocumentStyleSheetCollection&, const MediaQueryEvaluator&, StyleResolver&); + void initUserStyle(ExtensionStyleSheets&, const MediaQueryEvaluator&, StyleResolver&); void resetAuthorStyle(); - void appendAuthorStyleSheets(unsigned firstNew, const Vector>&, MediaQueryEvaluator*, InspectorCSSOMWrappers&, bool isViewSource, StyleResolver*); + void appendAuthorStyleSheets(const Vector>&, MediaQueryEvaluator*, InspectorCSSOMWrappers&, StyleResolver*); - void collectFeatures(bool isViewSource, StyleScopeResolver*); + RuleFeatureSet& mutableFeatures(); private: + void collectFeatures() const; void collectRulesFromUserStyleSheets(const Vector>&, RuleSet& userStyle, const MediaQueryEvaluator&, StyleResolver&); - OwnPtr m_authorStyle; - OwnPtr m_userStyle; - RuleFeatureSet m_features; - OwnPtr m_siblingRuleSet; - OwnPtr m_uncommonAttributeRuleSet; + + bool m_isAuthorStyleDefined { false }; + std::unique_ptr m_authorStyle; + std::unique_ptr m_userStyle; + + mutable RuleFeatureSet m_features; + mutable unsigned m_defaultStyleVersionOnFeatureCollection { 0 }; + mutable std::unique_ptr m_siblingRuleSet; + mutable std::unique_ptr m_uncommonAttributeRuleSet; + mutable HashMap> m_ancestorClassRuleSets; + mutable HashMap> m_ancestorAttributeRuleSetsForHTML; }; -} // namespace WebCore +inline const RuleFeatureSet& DocumentRuleSets::features() const +{ + if (m_defaultStyleVersionOnFeatureCollection < CSSDefaultStyleSheets::defaultStyleVersion) + collectFeatures(); + return m_features; +} + +// FIXME: There should be just the const version. +inline RuleFeatureSet& DocumentRuleSets::mutableFeatures() +{ + if (m_defaultStyleVersionOnFeatureCollection < CSSDefaultStyleSheets::defaultStyleVersion) + collectFeatures(); + return m_features; +} -#endif // DocumentRuleSets_h +} // namespace WebCore -- cgit v1.2.1