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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 public: | 104 public: |
105 explicit StyleResolver(Document&); | 105 explicit StyleResolver(Document&); |
106 virtual ~StyleResolver(); | 106 virtual ~StyleResolver(); |
107 | 107 |
108 // FIXME: StyleResolver should not be keeping tree-walk state. | 108 // FIXME: StyleResolver should not be keeping tree-walk state. |
109 // These should move to some global tree-walk state, or should be contained
in a | 109 // These should move to some global tree-walk state, or should be contained
in a |
110 // TreeWalkContext or similar which is passed in to StyleResolver methods wh
en available. | 110 // TreeWalkContext or similar which is passed in to StyleResolver methods wh
en available. |
111 // Using these during tree walk will allow style selector to optimize child
and descendant selector lookups. | 111 // Using these during tree walk will allow style selector to optimize child
and descendant selector lookups. |
112 void pushParentElement(Element&); | 112 void pushParentElement(Element&); |
113 void popParentElement(Element&); | 113 void popParentElement(Element&); |
114 void pushParentShadowRoot(const ShadowRoot&); | |
115 void popParentShadowRoot(const ShadowRoot&); | |
116 | 114 |
117 PassRefPtr<RenderStyle> styleForElement(Element*, RenderStyle* parentStyle =
0, StyleSharingBehavior = AllowStyleSharing, | 115 PassRefPtr<RenderStyle> styleForElement(Element*, RenderStyle* parentStyle =
0, StyleSharingBehavior = AllowStyleSharing, |
118 RuleMatchingBehavior = MatchAllRules); | 116 RuleMatchingBehavior = MatchAllRules); |
119 | 117 |
120 PassRefPtr<RenderStyle> styleForKeyframe(Element*, const RenderStyle&, Rende
rStyle* parentStyle, const StyleKeyframe*, const AtomicString& animationName); | 118 PassRefPtr<RenderStyle> styleForKeyframe(Element*, const RenderStyle&, Rende
rStyle* parentStyle, const StyleKeyframe*, const AtomicString& animationName); |
121 static PassRefPtrWillBeRawPtr<AnimatableValue> createAnimatableValueSnapshot
(Element&, CSSPropertyID, CSSValue&); | 119 static PassRefPtrWillBeRawPtr<AnimatableValue> createAnimatableValueSnapshot
(Element&, CSSPropertyID, CSSValue&); |
122 static PassRefPtrWillBeRawPtr<AnimatableValue> createAnimatableValueSnapshot
(StyleResolverState&, CSSPropertyID, CSSValue&); | 120 static PassRefPtrWillBeRawPtr<AnimatableValue> createAnimatableValueSnapshot
(StyleResolverState&, CSSPropertyID, CSSValue&); |
123 | 121 |
124 PassRefPtr<RenderStyle> pseudoStyleForElement(Element*, const PseudoStyleReq
uest&, RenderStyle* parentStyle); | 122 PassRefPtr<RenderStyle> pseudoStyleForElement(Element*, const PseudoStyleReq
uest&, RenderStyle* parentStyle); |
125 | 123 |
126 PassRefPtr<RenderStyle> styleForPage(int pageIndex); | 124 PassRefPtr<RenderStyle> styleForPage(int pageIndex); |
127 PassRefPtr<RenderStyle> defaultStyleForElement(); | 125 PassRefPtr<RenderStyle> defaultStyleForElement(); |
128 PassRefPtr<RenderStyle> styleForText(Text*); | 126 PassRefPtr<RenderStyle> styleForText(Text*); |
129 | 127 |
130 static PassRefPtr<RenderStyle> styleForDocument(Document&); | 128 static PassRefPtr<RenderStyle> styleForDocument(Document&); |
131 | 129 |
132 // FIXME: This only has 5 callers and should be removed. Callers should be e
xplicit about | 130 // FIXME: This only has 5 callers and should be removed. Callers should be e
xplicit about |
133 // their dependency on Document* instead of grabbing one through StyleResolv
er. | 131 // their dependency on Document* instead of grabbing one through StyleResolv
er. |
134 Document& document() { return m_document; } | 132 Document& document() { return m_document; } |
135 | 133 |
136 // FIXME: It could be better to call appendAuthorStyleSheets() directly afte
r we factor StyleResolver further. | 134 // FIXME: It could be better to call appendAuthorStyleSheets() directly afte
r we factor StyleResolver further. |
137 // https://bugs.webkit.org/show_bug.cgi?id=108890 | 135 // https://bugs.webkit.org/show_bug.cgi?id=108890 |
138 void appendAuthorStyleSheets(const WillBeHeapVector<RefPtrWillBeMember<CSSSt
yleSheet> >&); | 136 void appendAuthorStyleSheets(const WillBeHeapVector<RefPtrWillBeMember<CSSSt
yleSheet> >&); |
139 void resetAuthorStyle(const ContainerNode*); | 137 void resetAuthorStyle(TreeScope&); |
140 void finishAppendAuthorStyleSheets(); | 138 void finishAppendAuthorStyleSheets(); |
141 | 139 |
142 void processScopedRules(const RuleSet& authorRules, CSSStyleSheet*, Containe
rNode& scope); | 140 void processScopedRules(const RuleSet& authorRules, CSSStyleSheet*, Containe
rNode& scope); |
143 | 141 |
144 void lazyAppendAuthorStyleSheets(unsigned firstNew, const WillBeHeapVector<R
efPtrWillBeMember<CSSStyleSheet> >&); | 142 void lazyAppendAuthorStyleSheets(unsigned firstNew, const WillBeHeapVector<R
efPtrWillBeMember<CSSStyleSheet> >&); |
145 void removePendingAuthorStyleSheets(const WillBeHeapVector<RefPtrWillBeMembe
r<CSSStyleSheet> >&); | 143 void removePendingAuthorStyleSheets(const WillBeHeapVector<RefPtrWillBeMembe
r<CSSStyleSheet> >&); |
146 void appendPendingAuthorStyleSheets(); | 144 void appendPendingAuthorStyleSheets(); |
147 bool hasPendingAuthorStyleSheets() const { return m_pendingStyleSheets.size(
) > 0 || m_needCollectFeatures; } | 145 bool hasPendingAuthorStyleSheets() const { return m_pendingStyleSheets.size(
) > 0 || m_needCollectFeatures; } |
148 | 146 |
149 SelectorFilter& selectorFilter() { return m_selectorFilter; } | 147 SelectorFilter& selectorFilter() { return m_selectorFilter; } |
150 | 148 |
151 bool styleTreeHasOnlyScopedResolverForDocument() const { return m_styleTree.
hasOnlyScopedResolverForDocument(); } | 149 bool styleTreeHasOnlyScopedResolverForDocument() const { return m_scopedStyl
eResolvers.size() == 1; } |
152 | 150 |
153 void styleTreeResolveScopedKeyframesRules(const Element* element, WillBeHeap
Vector<RawPtrWillBeMember<ScopedStyleResolver>, 8>& resolvers) | 151 void styleTreeResolveScopedKeyframesRules(const Element* element, WillBeHeap
Vector<RawPtrWillBeMember<ScopedStyleResolver>, 8>& resolvers) |
154 { | 152 { |
155 m_styleTree.resolveScopedKeyframesRules(element, resolvers); | 153 m_styleTree.resolveScopedKeyframesRules(element, resolvers); |
156 } | 154 } |
157 | 155 |
158 // These methods will give back the set of rules that matched for a given el
ement (or a pseudo-element). | 156 // These methods will give back the set of rules that matched for a given el
ement (or a pseudo-element). |
159 enum CSSRuleFilter { | 157 enum CSSRuleFilter { |
160 UAAndUserCSSRules = 1 << 1, | 158 UAAndUserCSSRules = 1 << 1, |
161 AuthorCSSRules = 1 << 2, | 159 AuthorCSSRules = 1 << 2, |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 MediaQueryResultList m_viewportDependentMediaQueryResults; | 291 MediaQueryResultList m_viewportDependentMediaQueryResults; |
294 | 292 |
295 Document& m_document; | 293 Document& m_document; |
296 SelectorFilter m_selectorFilter; | 294 SelectorFilter m_selectorFilter; |
297 | 295 |
298 OwnPtrWillBeMember<ViewportStyleResolver> m_viewportStyleResolver; | 296 OwnPtrWillBeMember<ViewportStyleResolver> m_viewportStyleResolver; |
299 | 297 |
300 WillBeHeapListHashSet<RawPtrWillBeMember<CSSStyleSheet>, 16> m_pendingStyleS
heets; | 298 WillBeHeapListHashSet<RawPtrWillBeMember<CSSStyleSheet>, 16> m_pendingStyleS
heets; |
301 | 299 |
302 ScopedStyleTree m_styleTree; | 300 ScopedStyleTree m_styleTree; |
| 301 // FIXME: Probably this should move to StyleEngine eventually. |
| 302 WillBeHeapHashSet<RawPtrWillBeMember<const ScopedStyleResolver> > m_scopedSt
yleResolvers; |
303 | 303 |
304 // FIXME: The entire logic of collecting features on StyleResolver, as well
as transferring them | 304 // FIXME: The entire logic of collecting features on StyleResolver, as well
as transferring them |
305 // between various parts of machinery smells wrong. This needs to be better
somehow. | 305 // between various parts of machinery smells wrong. This needs to be better
somehow. |
306 RuleFeatureSet m_features; | 306 RuleFeatureSet m_features; |
307 OwnPtrWillBeMember<RuleSet> m_siblingRuleSet; | 307 OwnPtrWillBeMember<RuleSet> m_siblingRuleSet; |
308 OwnPtrWillBeMember<RuleSet> m_uncommonAttributeRuleSet; | 308 OwnPtrWillBeMember<RuleSet> m_uncommonAttributeRuleSet; |
309 | 309 |
310 // FIXME: watched selectors should be implemented using injected author styl
esheets: http://crbug.com/316960 | 310 // FIXME: watched selectors should be implemented using injected author styl
esheets: http://crbug.com/316960 |
311 OwnPtrWillBeMember<RuleSet> m_watchedSelectorsRules; | 311 OwnPtrWillBeMember<RuleSet> m_watchedSelectorsRules; |
312 TreeBoundaryCrossingRules m_treeBoundaryCrossingRules; | 312 TreeBoundaryCrossingRules m_treeBoundaryCrossingRules; |
313 | 313 |
314 bool m_needCollectFeatures; | 314 bool m_needCollectFeatures; |
315 | 315 |
316 StyleResourceLoader m_styleResourceLoader; | 316 StyleResourceLoader m_styleResourceLoader; |
317 | 317 |
318 unsigned m_styleSharingDepth; | 318 unsigned m_styleSharingDepth; |
319 Vector<OwnPtr<StyleSharingList>, styleSharingMaxDepth> m_styleSharingLists; | 319 Vector<OwnPtr<StyleSharingList>, styleSharingMaxDepth> m_styleSharingLists; |
320 | 320 |
321 OwnPtr<StyleResolverStats> m_styleResolverStats; | 321 OwnPtr<StyleResolverStats> m_styleResolverStats; |
322 OwnPtr<StyleResolverStats> m_styleResolverStatsTotals; | 322 OwnPtr<StyleResolverStats> m_styleResolverStatsTotals; |
323 unsigned m_styleResolverStatsSequence; | 323 unsigned m_styleResolverStatsSequence; |
324 | 324 |
325 // Use only for Internals::updateStyleAndReturnAffectedElementCount. | 325 // Use only for Internals::updateStyleAndReturnAffectedElementCount. |
326 unsigned m_accessCount; | 326 unsigned m_accessCount; |
327 }; | 327 }; |
328 | 328 |
329 } // namespace blink | 329 } // namespace blink |
330 | 330 |
331 #endif // StyleResolver_h | 331 #endif // StyleResolver_h |
OLD | NEW |