| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 unsigned c; | 128 unsigned c; |
| 129 unsigned d[4]; | 129 unsigned d[4]; |
| 130 }; | 130 }; |
| 131 | 131 |
| 132 static_assert(sizeof(RuleData) == sizeof(SameSizeAsRuleData), "RuleData should s
tay small"); | 132 static_assert(sizeof(RuleData) == sizeof(SameSizeAsRuleData), "RuleData should s
tay small"); |
| 133 | 133 |
| 134 class CORE_EXPORT RuleSet : public GarbageCollectedFinalized<RuleSet> { | 134 class CORE_EXPORT RuleSet : public GarbageCollectedFinalized<RuleSet> { |
| 135 WTF_MAKE_NONCOPYABLE(RuleSet); | 135 WTF_MAKE_NONCOPYABLE(RuleSet); |
| 136 public: | 136 public: |
| 137 static RuleSet* create() { return new RuleSet; } | 137 static RuleSet* create() { return new RuleSet; } |
| 138 static RuleSet* emptyRuleSet(); |
| 138 | 139 |
| 139 void addRulesFromSheet(StyleSheetContents*, const MediaQueryEvaluator&, AddR
uleFlags = RuleHasNoSpecialState); | 140 void addRulesFromSheet(StyleSheetContents*, const MediaQueryEvaluator&, AddR
uleFlags = RuleHasNoSpecialState); |
| 140 void addStyleRule(StyleRule*, AddRuleFlags); | 141 void addStyleRule(StyleRule*, AddRuleFlags); |
| 141 void addRule(StyleRule*, unsigned selectorIndex, AddRuleFlags); | 142 void addRule(StyleRule*, unsigned selectorIndex, AddRuleFlags); |
| 142 | 143 |
| 143 const RuleFeatureSet& features() const { return m_features; } | 144 const RuleFeatureSet& features() const { return m_features; } |
| 144 | 145 |
| 145 const HeapTerminatedArray<RuleData>* idRules(const AtomicString& key) const
{ ASSERT(!m_pendingRules); return m_idRules.get(key); } | 146 const HeapTerminatedArray<RuleData>* idRules(const AtomicString& key) const
{ ASSERT(!m_pendingRules); return m_idRules.get(key); } |
| 146 const HeapTerminatedArray<RuleData>* classRules(const AtomicString& key) con
st { ASSERT(!m_pendingRules); return m_classRules.get(key); } | 147 const HeapTerminatedArray<RuleData>* classRules(const AtomicString& key) con
st { ASSERT(!m_pendingRules); return m_classRules.get(key); } |
| 147 const HeapTerminatedArray<RuleData>* tagRules(const AtomicString& key) const
{ ASSERT(!m_pendingRules); return m_tagRules.get(key); } | 148 const HeapTerminatedArray<RuleData>* tagRules(const AtomicString& key) const
{ ASSERT(!m_pendingRules); return m_tagRules.get(key); } |
| 148 const HeapTerminatedArray<RuleData>* shadowPseudoElementRules(const AtomicSt
ring& key) const { ASSERT(!m_pendingRules); return m_shadowPseudoElementRules.ge
t(key); } | 149 const HeapTerminatedArray<RuleData>* shadowPseudoElementRules(const AtomicSt
ring& key) const { ASSERT(!m_pendingRules); return m_shadowPseudoElementRules.ge
t(key); } |
| 149 const HeapVector<RuleData>* linkPseudoClassRules() const { ASSERT(!m_pending
Rules); return &m_linkPseudoClassRules; } | 150 const HeapVector<RuleData>* linkPseudoClassRules() const { ASSERT(!m_pending
Rules); return &m_linkPseudoClassRules; } |
| 150 const HeapVector<RuleData>* cuePseudoRules() const { ASSERT(!m_pendingRules)
; return &m_cuePseudoRules; } | 151 const HeapVector<RuleData>* cuePseudoRules() const { ASSERT(!m_pendingRules)
; return &m_cuePseudoRules; } |
| 151 const HeapVector<RuleData>* focusPseudoClassRules() const { ASSERT(!m_pendin
gRules); return &m_focusPseudoClassRules; } | 152 const HeapVector<RuleData>* focusPseudoClassRules() const { ASSERT(!m_pendin
gRules); return &m_focusPseudoClassRules; } |
| 152 const HeapVector<RuleData>* universalRules() const { ASSERT(!m_pendingRules)
; return &m_universalRules; } | 153 const HeapVector<RuleData>* universalRules() const { ASSERT(!m_pendingRules)
; return &m_universalRules; } |
| 153 const HeapVector<RuleData>* shadowHostRules() const { ASSERT(!m_pendingRules
); return &m_shadowHostRules; } | 154 const HeapVector<RuleData>* shadowHostRules() const { ASSERT(!m_pendingRules
); return &m_shadowHostRules; } |
| 154 const HeapVector<Member<StyleRulePage>>& pageRules() const { ASSERT(!m_pendi
ngRules); return m_pageRules; } | 155 const HeapVector<Member<StyleRulePage>>& pageRules() const { ASSERT(!m_pendi
ngRules); return m_pageRules; } |
| 155 const HeapVector<Member<StyleRuleViewport>>& viewportRules() const { ASSERT(
!m_pendingRules); return m_viewportRules; } | |
| 156 const HeapVector<Member<StyleRuleFontFace>>& fontFaceRules() const { return
m_fontFaceRules; } | 156 const HeapVector<Member<StyleRuleFontFace>>& fontFaceRules() const { return
m_fontFaceRules; } |
| 157 const HeapVector<Member<StyleRuleKeyframes>>& keyframesRules() const { retur
n m_keyframesRules; } | 157 const HeapVector<Member<StyleRuleKeyframes>>& keyframesRules() const { retur
n m_keyframesRules; } |
| 158 const HeapVector<MinimalRuleData>& deepCombinatorOrShadowPseudoRules() const
{ return m_deepCombinatorOrShadowPseudoRules; } | 158 const HeapVector<MinimalRuleData>& deepCombinatorOrShadowPseudoRules() const
{ return m_deepCombinatorOrShadowPseudoRules; } |
| 159 const HeapVector<MinimalRuleData>& contentPseudoElementRules() const { retur
n m_contentPseudoElementRules; } | 159 const HeapVector<MinimalRuleData>& contentPseudoElementRules() const { retur
n m_contentPseudoElementRules; } |
| 160 const HeapVector<MinimalRuleData>& slottedPseudoElementRules() const { retur
n m_slottedPseudoElementRules; } | 160 const HeapVector<MinimalRuleData>& slottedPseudoElementRules() const { retur
n m_slottedPseudoElementRules; } |
| 161 const MediaQueryResultList& viewportDependentMediaQueryResults() const { ret
urn m_viewportDependentMediaQueryResults; } | |
| 162 const MediaQueryResultList& deviceDependentMediaQueryResults() const { retur
n m_deviceDependentMediaQueryResults; } | |
| 163 | 161 |
| 164 unsigned ruleCount() const { return m_ruleCount; } | 162 unsigned ruleCount() const { return m_ruleCount; } |
| 165 | 163 |
| 166 void compactRulesIfNeeded() | 164 void compactRulesIfNeeded() |
| 167 { | 165 { |
| 168 if (!m_pendingRules) | 166 if (!m_pendingRules) |
| 169 return; | 167 return; |
| 170 compactRules(); | 168 compactRules(); |
| 171 } | 169 } |
| 172 | 170 |
| 173 #ifndef NDEBUG | 171 #ifndef NDEBUG |
| 174 void show() const; | 172 void show() const; |
| 175 #endif | 173 #endif |
| 176 | 174 |
| 177 DECLARE_TRACE(); | 175 DECLARE_TRACE(); |
| 178 | 176 |
| 179 private: | 177 private: |
| 180 using PendingRuleMap = HeapHashMap<AtomicString, Member<HeapLinkedStack<Rule
Data>>>; | 178 using PendingRuleMap = HeapHashMap<AtomicString, Member<HeapLinkedStack<Rule
Data>>>; |
| 181 using CompactRuleMap = HeapHashMap<AtomicString, Member<HeapTerminatedArray<
RuleData>>>; | 179 using CompactRuleMap = HeapHashMap<AtomicString, Member<HeapTerminatedArray<
RuleData>>>; |
| 182 | 180 |
| 183 RuleSet() | 181 RuleSet() |
| 184 : m_ruleCount(0) | 182 : m_ruleCount(0) |
| 185 { | 183 { |
| 186 } | 184 } |
| 187 | 185 |
| 188 void addToRuleSet(const AtomicString& key, PendingRuleMap&, const RuleData&)
; | 186 void addToRuleSet(const AtomicString& key, PendingRuleMap&, const RuleData&)
; |
| 189 void addPageRule(StyleRulePage*); | 187 void addPageRule(StyleRulePage*); |
| 190 void addViewportRule(StyleRuleViewport*); | |
| 191 void addFontFaceRule(StyleRuleFontFace*); | 188 void addFontFaceRule(StyleRuleFontFace*); |
| 192 void addKeyframesRule(StyleRuleKeyframes*); | 189 void addKeyframesRule(StyleRuleKeyframes*); |
| 193 | 190 |
| 194 void addChildRules(const HeapVector<Member<StyleRuleBase>>&, const MediaQuer
yEvaluator& medium, AddRuleFlags); | 191 void addChildRules(const HeapVector<Member<StyleRuleBase>>&, const MediaQuer
yEvaluator& medium, AddRuleFlags); |
| 195 bool findBestRuleSetAndAdd(const CSSSelector&, RuleData&); | 192 bool findBestRuleSetAndAdd(const CSSSelector&, RuleData&); |
| 196 | 193 |
| 197 void compactRules(); | 194 void compactRules(); |
| 198 static void compactPendingRules(PendingRuleMap&, CompactRuleMap&); | 195 static void compactPendingRules(PendingRuleMap&, CompactRuleMap&); |
| 199 | 196 |
| 200 class PendingRuleMaps : public GarbageCollected<PendingRuleMaps> { | 197 class PendingRuleMaps : public GarbageCollected<PendingRuleMaps> { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 223 CompactRuleMap m_classRules; | 220 CompactRuleMap m_classRules; |
| 224 CompactRuleMap m_tagRules; | 221 CompactRuleMap m_tagRules; |
| 225 CompactRuleMap m_shadowPseudoElementRules; | 222 CompactRuleMap m_shadowPseudoElementRules; |
| 226 HeapVector<RuleData> m_linkPseudoClassRules; | 223 HeapVector<RuleData> m_linkPseudoClassRules; |
| 227 HeapVector<RuleData> m_cuePseudoRules; | 224 HeapVector<RuleData> m_cuePseudoRules; |
| 228 HeapVector<RuleData> m_focusPseudoClassRules; | 225 HeapVector<RuleData> m_focusPseudoClassRules; |
| 229 HeapVector<RuleData> m_universalRules; | 226 HeapVector<RuleData> m_universalRules; |
| 230 HeapVector<RuleData> m_shadowHostRules; | 227 HeapVector<RuleData> m_shadowHostRules; |
| 231 RuleFeatureSet m_features; | 228 RuleFeatureSet m_features; |
| 232 HeapVector<Member<StyleRulePage>> m_pageRules; | 229 HeapVector<Member<StyleRulePage>> m_pageRules; |
| 233 HeapVector<Member<StyleRuleViewport>> m_viewportRules; | |
| 234 HeapVector<Member<StyleRuleFontFace>> m_fontFaceRules; | 230 HeapVector<Member<StyleRuleFontFace>> m_fontFaceRules; |
| 235 HeapVector<Member<StyleRuleKeyframes>> m_keyframesRules; | 231 HeapVector<Member<StyleRuleKeyframes>> m_keyframesRules; |
| 236 HeapVector<MinimalRuleData> m_deepCombinatorOrShadowPseudoRules; | 232 HeapVector<MinimalRuleData> m_deepCombinatorOrShadowPseudoRules; |
| 237 HeapVector<MinimalRuleData> m_contentPseudoElementRules; | 233 HeapVector<MinimalRuleData> m_contentPseudoElementRules; |
| 238 HeapVector<MinimalRuleData> m_slottedPseudoElementRules; | 234 HeapVector<MinimalRuleData> m_slottedPseudoElementRules; |
| 239 | 235 |
| 240 MediaQueryResultList m_viewportDependentMediaQueryResults; | |
| 241 MediaQueryResultList m_deviceDependentMediaQueryResults; | |
| 242 | |
| 243 unsigned m_ruleCount; | 236 unsigned m_ruleCount; |
| 244 Member<PendingRuleMaps> m_pendingRules; | 237 Member<PendingRuleMaps> m_pendingRules; |
| 245 | 238 |
| 246 #ifndef NDEBUG | 239 #ifndef NDEBUG |
| 247 HeapVector<RuleData> m_allRules; | 240 HeapVector<RuleData> m_allRules; |
| 248 #endif | 241 #endif |
| 249 }; | 242 }; |
| 250 | 243 |
| 251 } // namespace blink | 244 } // namespace blink |
| 252 | 245 |
| 253 #endif // RuleSet_h | 246 #endif // RuleSet_h |
| OLD | NEW |