diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/css/DocumentRuleSets.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/css/DocumentRuleSets.h')
-rw-r--r-- | Source/WebCore/css/DocumentRuleSets.h | 68 |
1 files changed, 48 insertions, 20 deletions
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 <wtf/OwnPtr.h> +#include <memory> +#include <wtf/HashMap.h> #include <wtf/RefPtr.h> #include <wtf/Vector.h> @@ -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<const CSSSelector*> attributeSelectors; + std::unique_ptr<RuleSet> 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<RefPtr<CSSStyleSheet>>&, MediaQueryEvaluator*, InspectorCSSOMWrappers&, bool isViewSource, StyleResolver*); + void appendAuthorStyleSheets(const Vector<RefPtr<CSSStyleSheet>>&, MediaQueryEvaluator*, InspectorCSSOMWrappers&, StyleResolver*); - void collectFeatures(bool isViewSource, StyleScopeResolver*); + RuleFeatureSet& mutableFeatures(); private: + void collectFeatures() const; void collectRulesFromUserStyleSheets(const Vector<RefPtr<CSSStyleSheet>>&, RuleSet& userStyle, const MediaQueryEvaluator&, StyleResolver&); - OwnPtr<RuleSet> m_authorStyle; - OwnPtr<RuleSet> m_userStyle; - RuleFeatureSet m_features; - OwnPtr<RuleSet> m_siblingRuleSet; - OwnPtr<RuleSet> m_uncommonAttributeRuleSet; + + bool m_isAuthorStyleDefined { false }; + std::unique_ptr<RuleSet> m_authorStyle; + std::unique_ptr<RuleSet> m_userStyle; + + mutable RuleFeatureSet m_features; + mutable unsigned m_defaultStyleVersionOnFeatureCollection { 0 }; + mutable std::unique_ptr<RuleSet> m_siblingRuleSet; + mutable std::unique_ptr<RuleSet> m_uncommonAttributeRuleSet; + mutable HashMap<AtomicString, std::unique_ptr<RuleSet>> m_ancestorClassRuleSets; + mutable HashMap<AtomicString, std::unique_ptr<AttributeRules>> 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 |