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

Side by Side Diff: third_party/WebKit/Source/core/dom/StyleEngine.h

Issue 2451893003: Move Document global rule data to CSSGlobalRuleSet. (Closed)
Patch Set: Rebased. Created 4 years, 1 month 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 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All
7 * rights reserved. 7 * rights reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 10 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
(...skipping 16 matching lines...) Expand all
27 * 27 *
28 */ 28 */
29 29
30 #ifndef StyleEngine_h 30 #ifndef StyleEngine_h
31 #define StyleEngine_h 31 #define StyleEngine_h
32 32
33 #include "bindings/core/v8/ScriptWrappable.h" 33 #include "bindings/core/v8/ScriptWrappable.h"
34 #include "bindings/core/v8/TraceWrapperMember.h" 34 #include "bindings/core/v8/TraceWrapperMember.h"
35 #include "core/CoreExport.h" 35 #include "core/CoreExport.h"
36 #include "core/css/CSSFontSelectorClient.h" 36 #include "core/css/CSSFontSelectorClient.h"
37 #include "core/css/CSSGlobalRuleSet.h"
37 #include "core/css/invalidation/StyleInvalidator.h" 38 #include "core/css/invalidation/StyleInvalidator.h"
38 #include "core/css/resolver/StyleResolver.h" 39 #include "core/css/resolver/StyleResolver.h"
39 #include "core/css/resolver/StyleResolverStats.h" 40 #include "core/css/resolver/StyleResolverStats.h"
40 #include "core/dom/Document.h" 41 #include "core/dom/Document.h"
41 #include "core/dom/DocumentOrderedList.h" 42 #include "core/dom/DocumentOrderedList.h"
42 #include "core/dom/DocumentStyleSheetCollection.h" 43 #include "core/dom/DocumentStyleSheetCollection.h"
43 #include "core/dom/StyleEngineContext.h" 44 #include "core/dom/StyleEngineContext.h"
44 #include "platform/heap/Handle.h" 45 #include "platform/heap/Handle.h"
45 #include "wtf/Allocator.h" 46 #include "wtf/Allocator.h"
46 #include "wtf/AutoReset.h" 47 #include "wtf/AutoReset.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 void addStyleSheetCandidateNode(Node&); 102 void addStyleSheetCandidateNode(Node&);
102 void removeStyleSheetCandidateNode(Node&); 103 void removeStyleSheetCandidateNode(Node&);
103 void removeStyleSheetCandidateNode(Node&, TreeScope&); 104 void removeStyleSheetCandidateNode(Node&, TreeScope&);
104 void modifiedStyleSheetCandidateNode(Node&); 105 void modifiedStyleSheetCandidateNode(Node&);
105 void watchedSelectorsChanged(); 106 void watchedSelectorsChanged();
106 void initialViewportChanged(); 107 void initialViewportChanged();
107 void viewportRulesChanged(); 108 void viewportRulesChanged();
108 109
109 void injectAuthorSheet(StyleSheetContents* authorSheet); 110 void injectAuthorSheet(StyleSheetContents* authorSheet);
110 CSSStyleSheet& ensureInspectorStyleSheet(); 111 CSSStyleSheet& ensureInspectorStyleSheet();
112 RuleSet* watchedSelectorsRuleSet() {
113 return m_globalRuleSet.watchedSelectorsRuleSet();
114 }
111 115
112 void clearMediaQueryRuleSetStyleSheets(); 116 void clearMediaQueryRuleSetStyleSheets();
113 void updateStyleSheetsInImport(DocumentStyleSheetCollector& parentCollector); 117 void updateStyleSheetsInImport(DocumentStyleSheetCollector& parentCollector);
114 void updateActiveStyleSheets(StyleResolverUpdateMode); 118 void updateActiveStyleSheets(StyleResolverUpdateMode);
115 119
116 enum ActiveSheetsUpdate { DontUpdateActiveSheets, UpdateActiveSheets }; 120 enum ActiveSheetsUpdate { DontUpdateActiveSheets, UpdateActiveSheets };
117 String preferredStylesheetSetName() const { 121 String preferredStylesheetSetName() const {
118 return m_preferredStylesheetSetName; 122 return m_preferredStylesheetSetName;
119 } 123 }
120 String selectedStylesheetSetName() const { 124 String selectedStylesheetSetName() const {
(...skipping 15 matching lines...) Expand all
136 } 140 }
137 bool haveScriptBlockingStylesheetsLoaded() const { 141 bool haveScriptBlockingStylesheetsLoaded() const {
138 return !hasPendingScriptBlockingSheets() || m_ignorePendingStylesheets; 142 return !hasPendingScriptBlockingSheets() || m_ignorePendingStylesheets;
139 } 143 }
140 bool haveRenderBlockingStylesheetsLoaded() const { 144 bool haveRenderBlockingStylesheetsLoaded() const {
141 return !hasPendingRenderBlockingSheets() || m_ignorePendingStylesheets; 145 return !hasPendingRenderBlockingSheets() || m_ignorePendingStylesheets;
142 } 146 }
143 bool ignoringPendingStylesheets() const { return m_ignorePendingStylesheets; } 147 bool ignoringPendingStylesheets() const { return m_ignorePendingStylesheets; }
144 148
145 unsigned maxDirectAdjacentSelectors() const { 149 unsigned maxDirectAdjacentSelectors() const {
146 return m_maxDirectAdjacentSelectors; 150 return ruleFeatureSet().maxDirectAdjacentSelectors();
147 } 151 }
148 bool usesSiblingRules() const { return m_usesSiblingRules; } 152 bool usesSiblingRules() const { return ruleFeatureSet().usesSiblingRules(); }
149 bool usesFirstLineRules() const { return m_usesFirstLineRules; } 153 bool usesFirstLineRules() const {
154 return ruleFeatureSet().usesFirstLineRules();
155 }
150 bool usesWindowInactiveSelector() const { 156 bool usesWindowInactiveSelector() const {
151 return m_usesWindowInactiveSelector; 157 return ruleFeatureSet().usesWindowInactiveSelector();
152 } 158 }
153 159
154 bool usesRemUnits() const { return m_usesRemUnits; } 160 bool usesRemUnits() const { return m_usesRemUnits; }
155 void setUsesRemUnit(bool b) { m_usesRemUnits = b; } 161 void setUsesRemUnit(bool usesRemUnits) { m_usesRemUnits = usesRemUnits; }
156 162
157 void resetCSSFeatureFlags(const RuleFeatureSet&); 163 void resetCSSFeatureFlags(const RuleFeatureSet&);
158 164
159 void shadowRootRemovedFromDocument(ShadowRoot*); 165 void shadowRootRemovedFromDocument(ShadowRoot*);
160 void appendActiveAuthorStyleSheets();
161 void addTreeBoundaryCrossingScope(const TreeScope&); 166 void addTreeBoundaryCrossingScope(const TreeScope&);
162 const DocumentOrderedList& treeBoundaryCrossingScopes() const { 167 const DocumentOrderedList& treeBoundaryCrossingScopes() const {
163 return m_treeBoundaryCrossingScopes; 168 return m_treeBoundaryCrossingScopes;
164 } 169 }
165 void resetAuthorStyle(TreeScope&); 170 void resetAuthorStyle(TreeScope&);
166 171
167 StyleResolver* resolver() const { return m_resolver.get(); } 172 StyleResolver* resolver() const { return m_resolver; }
168 173
169 StyleResolver& ensureResolver() { 174 StyleResolver& ensureResolver() {
170 if (!m_resolver) { 175 if (!m_resolver) {
171 createResolver(); 176 createResolver();
172 } else if (m_resolver->hasPendingAuthorStyleSheets()) { 177 } else if (m_resolver->hasPendingAuthorStyleSheets()) {
173 viewportRulesChanged(); 178 viewportRulesChanged();
174 m_resolver->appendPendingAuthorStyleSheets(); 179 m_resolver->appendPendingAuthorStyleSheets();
180 finishAppendAuthorStyleSheets();
181 } else if (m_globalRuleSet.isDirty()) {
182 m_globalRuleSet.update(document());
175 } 183 }
176 return *m_resolver.get(); 184 return *m_resolver;
177 } 185 }
178 186
179 bool hasResolver() const { return m_resolver.get(); } 187 bool hasResolver() const { return m_resolver; }
180 void clearResolver(); 188 void clearResolver();
181 void clearMasterResolver(); 189 void clearMasterResolver();
182 190
183 StyleInvalidator& styleInvalidator() { return m_styleInvalidator; } 191 StyleInvalidator& styleInvalidator() { return m_styleInvalidator; }
184 192
185 CSSFontSelector* fontSelector() { return m_fontSelector.get(); } 193 CSSFontSelector* fontSelector() { return m_fontSelector; }
186 void setFontSelector(CSSFontSelector*); 194 void setFontSelector(CSSFontSelector*);
187 195
188 void removeFontFaceRules(const HeapVector<Member<const StyleRuleFontFace>>&); 196 void removeFontFaceRules(const HeapVector<Member<const StyleRuleFontFace>>&);
189 void clearFontCache(); 197 void clearFontCache();
190 // updateGenericFontFamilySettings is used from WebSettingsImpl. 198 // updateGenericFontFamilySettings is used from WebSettingsImpl.
191 void updateGenericFontFamilySettings(); 199 void updateGenericFontFamilySettings();
192 200
193 void didDetach(); 201 void didDetach();
194 bool shouldClearResolver() const; 202 bool shouldClearResolver() const;
195 void resolverChanged(StyleResolverUpdateMode); 203 void resolverChanged(StyleResolverUpdateMode);
196 204
197 CSSStyleSheet* createSheet(Element&, 205 CSSStyleSheet* createSheet(Element&,
198 const String& text, 206 const String& text,
199 TextPosition startPosition, 207 TextPosition startPosition,
200 StyleEngineContext&); 208 StyleEngineContext&);
201 209
202 void collectScopedStyleFeaturesTo(RuleFeatureSet&) const; 210 void collectScopedStyleFeaturesTo(RuleFeatureSet&) const;
203 void ensureFullscreenUAStyle(); 211 void ensureUAStyleForFullscreen();
212 void ensureUAStyleForElement(const Element&);
204 213
205 void platformColorsChanged(); 214 void platformColorsChanged();
206 215
216 bool hasRulesForId(const AtomicString& id) const;
207 void classChangedForElement(const SpaceSplitString& changedClasses, Element&); 217 void classChangedForElement(const SpaceSplitString& changedClasses, Element&);
208 void classChangedForElement(const SpaceSplitString& oldClasses, 218 void classChangedForElement(const SpaceSplitString& oldClasses,
209 const SpaceSplitString& newClasses, 219 const SpaceSplitString& newClasses,
210 Element&); 220 Element&);
211 void attributeChangedForElement(const QualifiedName& attributeName, Element&); 221 void attributeChangedForElement(const QualifiedName& attributeName, Element&);
212 void idChangedForElement(const AtomicString& oldId, 222 void idChangedForElement(const AtomicString& oldId,
213 const AtomicString& newId, 223 const AtomicString& newId,
214 Element&); 224 Element&);
215 void pseudoStateChangedForElement(CSSSelector::PseudoType, Element&); 225 void pseudoStateChangedForElement(CSSSelector::PseudoType, Element&);
216 void scheduleSiblingInvalidationsForElement(Element&, 226 void scheduleSiblingInvalidationsForElement(Element&,
217 ContainerNode& schedulingParent, 227 ContainerNode& schedulingParent,
218 unsigned minDirectAdjacent); 228 unsigned minDirectAdjacent);
219 void scheduleInvalidationsForInsertedSibling(Element* beforeElement, 229 void scheduleInvalidationsForInsertedSibling(Element* beforeElement,
220 Element& insertedElement); 230 Element& insertedElement);
221 void scheduleInvalidationsForRemovedSibling(Element* beforeElement, 231 void scheduleInvalidationsForRemovedSibling(Element* beforeElement,
222 Element& removedElement, 232 Element& removedElement,
223 Element& afterElement); 233 Element& afterElement);
224 void scheduleNthPseudoInvalidations(ContainerNode&); 234 void scheduleNthPseudoInvalidations(ContainerNode&);
225 void scheduleInvalidationsForRuleSets(TreeScope&, 235 void scheduleInvalidationsForRuleSets(TreeScope&,
226 const HeapVector<Member<RuleSet>>&); 236 const HeapVector<Member<RuleSet>>&);
227 237
228 unsigned styleForElementCount() const { return m_styleForElementCount; } 238 unsigned styleForElementCount() const { return m_styleForElementCount; }
229 void incStyleForElementCount() { m_styleForElementCount++; } 239 void incStyleForElementCount() { m_styleForElementCount++; }
230 240
231 StyleResolverStats* stats() { return m_styleResolverStats.get(); } 241 StyleResolverStats* stats() { return m_styleResolverStats.get(); }
232 void setStatsEnabled(bool); 242 void setStatsEnabled(bool);
233 243
244 PassRefPtr<ComputedStyle> findSharedStyle(const ElementResolveContext&);
245
234 DECLARE_VIRTUAL_TRACE(); 246 DECLARE_VIRTUAL_TRACE();
235 DECLARE_TRACE_WRAPPERS(); 247 DECLARE_TRACE_WRAPPERS();
236 248
237 private: 249 private:
238 // CSSFontSelectorClient implementation. 250 // CSSFontSelectorClient implementation.
239 void fontsNeedUpdate(CSSFontSelector*) override; 251 void fontsNeedUpdate(CSSFontSelector*) override;
240 252
241 private: 253 private:
242 StyleEngine(Document&); 254 StyleEngine(Document&);
243 255
244 TreeScopeStyleSheetCollection* ensureStyleSheetCollectionFor(TreeScope&); 256 TreeScopeStyleSheetCollection* ensureStyleSheetCollectionFor(TreeScope&);
245 TreeScopeStyleSheetCollection* styleSheetCollectionFor(TreeScope&); 257 TreeScopeStyleSheetCollection* styleSheetCollectionFor(TreeScope&);
246 bool shouldUpdateDocumentStyleSheetCollection(StyleResolverUpdateMode) const; 258 bool shouldUpdateDocumentStyleSheetCollection(StyleResolverUpdateMode) const;
247 bool shouldUpdateShadowTreeStyleSheetCollection( 259 bool shouldUpdateShadowTreeStyleSheetCollection(
248 StyleResolverUpdateMode) const; 260 StyleResolverUpdateMode) const;
249 261
250 void markDocumentDirty(); 262 void markDocumentDirty();
251 void markTreeScopeDirty(TreeScope&); 263 void markTreeScopeDirty(TreeScope&);
252 264
253 bool isMaster() const { return m_isMaster; } 265 bool isMaster() const { return m_isMaster; }
254 Document* master(); 266 Document* master();
255 Document& document() const { return *m_document; } 267 Document& document() const { return *m_document; }
256 268
257 typedef HeapHashSet<Member<TreeScope>> UnorderedTreeScopeSet; 269 typedef HeapHashSet<Member<TreeScope>> UnorderedTreeScopeSet;
258 270
259 void clearMediaQueryRuleSetOnTreeScopeStyleSheets(UnorderedTreeScopeSet&); 271 void clearMediaQueryRuleSetOnTreeScopeStyleSheets(UnorderedTreeScopeSet&);
272 const RuleFeatureSet& ruleFeatureSet() const {
273 return m_globalRuleSet.ruleFeatureSet();
274 }
260 275
261 void createResolver(); 276 void createResolver();
277 void appendActiveAuthorStyleSheets();
278 void finishAppendAuthorStyleSheets();
262 279
263 CSSStyleSheet* parseSheet(Element&, 280 CSSStyleSheet* parseSheet(Element&,
264 const String& text, 281 const String& text,
265 TextPosition startPosition); 282 TextPosition startPosition);
266 283
267 const DocumentStyleSheetCollection& documentStyleSheetCollection() const { 284 const DocumentStyleSheetCollection& documentStyleSheetCollection() const {
268 DCHECK(m_documentStyleSheetCollection); 285 DCHECK(m_documentStyleSheetCollection);
269 return *m_documentStyleSheetCollection; 286 return *m_documentStyleSheetCollection;
270 } 287 }
271 288
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 StyleSheetCollectionMap m_styleSheetCollectionMap; 323 StyleSheetCollectionMap m_styleSheetCollectionMap;
307 324
308 bool m_documentScopeDirty = true; 325 bool m_documentScopeDirty = true;
309 UnorderedTreeScopeSet m_dirtyTreeScopes; 326 UnorderedTreeScopeSet m_dirtyTreeScopes;
310 UnorderedTreeScopeSet m_activeTreeScopes; 327 UnorderedTreeScopeSet m_activeTreeScopes;
311 DocumentOrderedList m_treeBoundaryCrossingScopes; 328 DocumentOrderedList m_treeBoundaryCrossingScopes;
312 329
313 String m_preferredStylesheetSetName; 330 String m_preferredStylesheetSetName;
314 String m_selectedStylesheetSetName; 331 String m_selectedStylesheetSetName;
315 332
316 bool m_usesSiblingRules = false; 333 CSSGlobalRuleSet m_globalRuleSet;
317 bool m_usesFirstLineRules = false; 334
318 bool m_usesWindowInactiveSelector = false;
319 bool m_usesRemUnits = false; 335 bool m_usesRemUnits = false;
320 unsigned m_maxDirectAdjacentSelectors = 0;
321
322 bool m_ignorePendingStylesheets = false; 336 bool m_ignorePendingStylesheets = false;
323 bool m_didCalculateResolver = false; 337 bool m_didCalculateResolver = false;
324 338
325 Member<StyleResolver> m_resolver; 339 Member<StyleResolver> m_resolver;
326 Member<ViewportStyleResolver> m_viewportResolver; 340 Member<ViewportStyleResolver> m_viewportResolver;
327 StyleInvalidator m_styleInvalidator; 341 StyleInvalidator m_styleInvalidator;
328 342
329 Member<CSSFontSelector> m_fontSelector; 343 Member<CSSFontSelector> m_fontSelector;
330 344
331 HeapHashMap<AtomicString, WeakMember<StyleSheetContents>> m_textToSheetCache; 345 HeapHashMap<AtomicString, WeakMember<StyleSheetContents>> m_textToSheetCache;
332 HeapHashMap<WeakMember<StyleSheetContents>, AtomicString> m_sheetToTextCache; 346 HeapHashMap<WeakMember<StyleSheetContents>, AtomicString> m_sheetToTextCache;
333 347
334 std::unique_ptr<StyleResolverStats> m_styleResolverStats; 348 std::unique_ptr<StyleResolverStats> m_styleResolverStats;
335 unsigned m_styleForElementCount = 0; 349 unsigned m_styleForElementCount = 0;
336 350
337 friend class StyleEngineTest; 351 friend class StyleEngineTest;
338 }; 352 };
339 353
340 } // namespace blink 354 } // namespace blink
341 355
342 #endif 356 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Fullscreen.cpp ('k') | third_party/WebKit/Source/core/dom/StyleEngine.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698