Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: third_party/WebKit/Source/core/css/RuleSet.h

Issue 1913833002: Current work-in-progress crbug.com/567021 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More assert fixes Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp ('k') | third_party/WebKit/Source/core/css/RuleSet.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698