| 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 21 matching lines...) Expand all Loading... |
| 32 #include "core/css/SelectorFilter.h" | 32 #include "core/css/SelectorFilter.h" |
| 33 #include "core/css/SiblingTraversalStrategies.h" | 33 #include "core/css/SiblingTraversalStrategies.h" |
| 34 #include "core/css/resolver/MatchedPropertiesCache.h" | 34 #include "core/css/resolver/MatchedPropertiesCache.h" |
| 35 #include "core/css/resolver/ScopedStyleResolver.h" | 35 #include "core/css/resolver/ScopedStyleResolver.h" |
| 36 #include "core/css/resolver/StyleBuilder.h" | 36 #include "core/css/resolver/StyleBuilder.h" |
| 37 #include "core/css/resolver/StyleResolverState.h" | 37 #include "core/css/resolver/StyleResolverState.h" |
| 38 #include "core/css/resolver/StyleResourceLoader.h" | 38 #include "core/css/resolver/StyleResourceLoader.h" |
| 39 #include "wtf/Deque.h" | 39 #include "wtf/Deque.h" |
| 40 #include "wtf/HashMap.h" | 40 #include "wtf/HashMap.h" |
| 41 #include "wtf/HashSet.h" | 41 #include "wtf/HashSet.h" |
| 42 #include "wtf/ListHashSet.h" |
| 42 #include "wtf/RefPtr.h" | 43 #include "wtf/RefPtr.h" |
| 43 #include "wtf/Vector.h" | 44 #include "wtf/Vector.h" |
| 44 | 45 |
| 45 namespace WebCore { | 46 namespace WebCore { |
| 46 | 47 |
| 47 class CSSAnimationUpdate; | 48 class CSSAnimationUpdate; |
| 48 class CSSFontSelector; | 49 class CSSFontSelector; |
| 49 class CSSRuleList; | 50 class CSSRuleList; |
| 50 class CSSSelector; | 51 class CSSSelector; |
| 51 class CSSStyleSheet; | 52 class CSSStyleSheet; |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 // their dependency on Document* instead of grabbing one through StyleResolv
er. | 209 // their dependency on Document* instead of grabbing one through StyleResolv
er. |
| 209 Document& document() { return m_document; } | 210 Document& document() { return m_document; } |
| 210 | 211 |
| 211 // FIXME: It could be better to call m_ruleSets.appendAuthorStyleSheets() di
rectly after we factor StyleRsolver further. | 212 // FIXME: It could be better to call m_ruleSets.appendAuthorStyleSheets() di
rectly after we factor StyleRsolver further. |
| 212 // https://bugs.webkit.org/show_bug.cgi?id=108890 | 213 // https://bugs.webkit.org/show_bug.cgi?id=108890 |
| 213 void appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyle
Sheet> >&); | 214 void appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyle
Sheet> >&); |
| 214 void resetAuthorStyle(const ContainerNode*); | 215 void resetAuthorStyle(const ContainerNode*); |
| 215 void resetAtHostRules(const ContainerNode*); | 216 void resetAtHostRules(const ContainerNode*); |
| 216 void finishAppendAuthorStyleSheets(); | 217 void finishAppendAuthorStyleSheets(); |
| 217 | 218 |
| 219 void lazyAppendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSS
tyleSheet> >&); |
| 220 void removePendingAuthorStyleSheets(const Vector<RefPtr<CSSStyleSheet> >&); |
| 221 void appendPendingAuthorStyleSheets(); |
| 222 bool hasPendingAuthorStyleSheets() const { return m_pendingStyleSheets.size(
) > 0 || m_needCollectFeatures; } |
| 223 |
| 218 DocumentRuleSets& ruleSets() { return m_ruleSets; } | 224 DocumentRuleSets& ruleSets() { return m_ruleSets; } |
| 219 const DocumentRuleSets& ruleSets() const { return m_ruleSets; } | 225 const DocumentRuleSets& ruleSets() const { return m_ruleSets; } |
| 220 SelectorFilter& selectorFilter() { return m_selectorFilter; } | 226 SelectorFilter& selectorFilter() { return m_selectorFilter; } |
| 221 | 227 |
| 222 void setBuildScopedStyleTreeInDocumentOrder(bool enabled) { m_styleTree.setB
uildInDocumentOrder(enabled); } | 228 void setBuildScopedStyleTreeInDocumentOrder(bool enabled) { m_styleTree.setB
uildInDocumentOrder(enabled); } |
| 223 bool buildScopedStyleTreeInDocumentOrder() const { return m_styleTree.buildI
nDocumentOrder(); } | 229 bool buildScopedStyleTreeInDocumentOrder() const { return m_styleTree.buildI
nDocumentOrder(); } |
| 224 | 230 |
| 225 ScopedStyleResolver* ensureScopedStyleResolver(const ContainerNode* scope) | 231 ScopedStyleResolver* ensureScopedStyleResolver(const ContainerNode* scope) |
| 226 { | 232 { |
| 227 return m_styleTree.ensureScopedStyleResolver(scope ? *scope : document()
); | 233 return m_styleTree.ensureScopedStyleResolver(scope ? *scope : document()
); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 256 // FIXME: Rename to reflect the purpose, like didChangeFontSize or something
. | 262 // FIXME: Rename to reflect the purpose, like didChangeFontSize or something
. |
| 257 void invalidateMatchedPropertiesCache(); | 263 void invalidateMatchedPropertiesCache(); |
| 258 | 264 |
| 259 // Exposed for RenderStyle::isStyleAvilable(). | 265 // Exposed for RenderStyle::isStyleAvilable(). |
| 260 static RenderStyle* styleNotYetAvailable() { return s_styleNotYetAvailable;
} | 266 static RenderStyle* styleNotYetAvailable() { return s_styleNotYetAvailable;
} |
| 261 | 267 |
| 262 // FIXME: StyleResolver should not have this member or method. | 268 // FIXME: StyleResolver should not have this member or method. |
| 263 InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWr
appers; } | 269 InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWr
appers; } |
| 264 | 270 |
| 265 const RuleFeatureSet& ruleFeatureSet() const { return m_features; } | 271 const RuleFeatureSet& ruleFeatureSet() const { return m_features; } |
| 272 const RuleFeatureSet& ensureRuleFeatureSet() |
| 273 { |
| 274 if (hasPendingAuthorStyleSheets()) |
| 275 appendPendingAuthorStyleSheets(); // slow path. |
| 276 return m_features; |
| 277 } |
| 266 | 278 |
| 267 StyleSharingList& styleSharingList() { return m_styleSharingList; } | 279 StyleSharingList& styleSharingList() { return m_styleSharingList; } |
| 268 | 280 |
| 269 bool hasRulesForId(const AtomicString&) const; | 281 bool hasRulesForId(const AtomicString&) const; |
| 270 | 282 |
| 271 void addToStyleSharingList(Element*); | 283 void addToStyleSharingList(Element*); |
| 272 void clearStyleSharingList(); | 284 void clearStyleSharingList(); |
| 273 | 285 |
| 274 #ifdef STYLE_STATS | 286 #ifdef STYLE_STATS |
| 275 ALWAYS_INLINE static StyleSharingStats& styleSharingStats() { return m_style
SharingStats; } | 287 ALWAYS_INLINE static StyleSharingStats& styleSharingStats() { return m_style
SharingStats; } |
| 276 #endif | 288 #endif |
| 277 | 289 |
| 278 private: | 290 private: |
| 279 // FontSelectorClient implementation. | 291 // FontSelectorClient implementation. |
| 280 virtual void fontsNeedUpdate(FontSelector*); | 292 virtual void fontsNeedUpdate(FontSelector*); |
| 281 | 293 |
| 282 private: | 294 private: |
| 283 // FIXME: This should probably go away, folded into FontBuilder. | 295 // FIXME: This should probably go away, folded into FontBuilder. |
| 284 void updateFont(StyleResolverState&); | 296 void updateFont(StyleResolverState&); |
| 285 | 297 |
| 286 void matchUARules(ElementRuleCollector&, RuleSet*); | 298 void matchUARules(ElementRuleCollector&, RuleSet*); |
| 287 void matchAuthorRules(Element*, ElementRuleCollector&, bool includeEmptyRule
s); | 299 void matchAuthorRules(Element*, ElementRuleCollector&, bool includeEmptyRule
s); |
| 288 void collectShadowDistributedRules(ElementRuleCollector&, bool includeEmptyR
ules); | 300 void collectShadowDistributedRules(ElementRuleCollector&, bool includeEmptyR
ules); |
| 289 void matchAuthorRulesForShadowHost(Element*, ElementRuleCollector&, bool inc
ludeEmptyRules, Vector<ScopedStyleResolver*, 8>& resolvers, Vector<ScopedStyleRe
solver*, 8>& resolversInShadowTree); | 301 void matchAuthorRulesForShadowHost(Element*, ElementRuleCollector&, bool inc
ludeEmptyRules, Vector<ScopedStyleResolver*, 8>& resolvers, Vector<ScopedStyleRe
solver*, 8>& resolversInShadowTree); |
| 290 void matchHostRules(Element*, ScopedStyleResolver*, ElementRuleCollector&, b
ool includeEmptyRules); | 302 void matchHostRules(Element*, ScopedStyleResolver*, ElementRuleCollector&, b
ool includeEmptyRules); |
| 291 void matchAllRules(StyleResolverState&, ElementRuleCollector&, bool matchAut
horAndUserStyles, bool includeSMILProperties); | 303 void matchAllRules(StyleResolverState&, ElementRuleCollector&, bool matchAut
horAndUserStyles, bool includeSMILProperties); |
| 292 void matchUARules(ElementRuleCollector&); | 304 void matchUARules(ElementRuleCollector&); |
| 293 void matchUserRules(ElementRuleCollector&, bool includeEmptyRules); | 305 void matchUserRules(ElementRuleCollector&, bool includeEmptyRules); |
| 294 void collectFeatures(); | 306 void collectFeatures(); |
| 307 void resetRuleFeatures(); |
| 295 | 308 |
| 296 bool fastRejectSelector(const RuleData&) const; | 309 bool fastRejectSelector(const RuleData&) const; |
| 297 | 310 |
| 298 void applyMatchedProperties(StyleResolverState&, const MatchResult&); | 311 void applyMatchedProperties(StyleResolverState&, const MatchResult&); |
| 299 | 312 |
| 300 enum StyleApplicationPass { | 313 enum StyleApplicationPass { |
| 301 VariableDefinitions, | 314 VariableDefinitions, |
| 302 AnimationProperties, | 315 AnimationProperties, |
| 303 HighPriorityProperties, | 316 HighPriorityProperties, |
| 304 LowPriorityProperties | 317 LowPriorityProperties |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 | 353 |
| 341 Document& m_document; | 354 Document& m_document; |
| 342 SelectorFilter m_selectorFilter; | 355 SelectorFilter m_selectorFilter; |
| 343 | 356 |
| 344 bool m_matchAuthorAndUserStyles; | 357 bool m_matchAuthorAndUserStyles; |
| 345 | 358 |
| 346 RefPtr<CSSFontSelector> m_fontSelector; | 359 RefPtr<CSSFontSelector> m_fontSelector; |
| 347 | 360 |
| 348 RefPtr<ViewportStyleResolver> m_viewportStyleResolver; | 361 RefPtr<ViewportStyleResolver> m_viewportStyleResolver; |
| 349 | 362 |
| 363 ListHashSet<CSSStyleSheet*, 16> m_pendingStyleSheets; |
| 364 |
| 350 ScopedStyleTree m_styleTree; | 365 ScopedStyleTree m_styleTree; |
| 351 | 366 |
| 352 // FIXME: The entire logic of collecting features on StyleResolver, as well
astransferring them | 367 // FIXME: The entire logic of collecting features on StyleResolver, as well
astransferring them |
| 353 // between various parts of machinery smells wrong. This needs to be better
somehow. | 368 // between various parts of machinery smells wrong. This needs to be better
somehow. |
| 354 RuleFeatureSet m_features; | 369 RuleFeatureSet m_features; |
| 355 OwnPtr<RuleSet> m_siblingRuleSet; | 370 OwnPtr<RuleSet> m_siblingRuleSet; |
| 356 OwnPtr<RuleSet> m_uncommonAttributeRuleSet; | 371 OwnPtr<RuleSet> m_uncommonAttributeRuleSet; |
| 372 bool m_needCollectFeatures; |
| 357 | 373 |
| 358 InspectorCSSOMWrappers m_inspectorCSSOMWrappers; | 374 InspectorCSSOMWrappers m_inspectorCSSOMWrappers; |
| 359 | 375 |
| 360 StyleResourceLoader m_styleResourceLoader; | 376 StyleResourceLoader m_styleResourceLoader; |
| 361 | 377 |
| 362 StyleSharingList m_styleSharingList; | 378 StyleSharingList m_styleSharingList; |
| 363 | 379 |
| 364 #ifdef STYLE_STATS | 380 #ifdef STYLE_STATS |
| 365 static StyleSharingStats m_styleSharingStats; | 381 static StyleSharingStats m_styleSharingStats; |
| 366 #endif | 382 #endif |
| (...skipping 10 matching lines...) Expand all Loading... |
| 377 PseudoId ignoreDynamicPseudo = NOPSEUDO; | 393 PseudoId ignoreDynamicPseudo = NOPSEUDO; |
| 378 if (selectorChecker.match(selectorCheckingContext, ignoreDynamicPseudo,
DOMSiblingTraversalStrategy()) == SelectorChecker::SelectorMatches) | 394 if (selectorChecker.match(selectorCheckingContext, ignoreDynamicPseudo,
DOMSiblingTraversalStrategy()) == SelectorChecker::SelectorMatches) |
| 379 return true; | 395 return true; |
| 380 } | 396 } |
| 381 return false; | 397 return false; |
| 382 } | 398 } |
| 383 | 399 |
| 384 } // namespace WebCore | 400 } // namespace WebCore |
| 385 | 401 |
| 386 #endif // StyleResolver_h | 402 #endif // StyleResolver_h |
| OLD | NEW |