OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 // Note that we may get invoked for some random elements in some wacky cases
during style resolve. | 367 // Note that we may get invoked for some random elements in some wacky cases
during style resolve. |
368 // Pause maintaining the stack in this case. | 368 // Pause maintaining the stack in this case. |
369 if (m_selectorFilter.parentStackIsConsistent(&parent)) | 369 if (m_selectorFilter.parentStackIsConsistent(&parent)) |
370 m_selectorFilter.popParent(); | 370 m_selectorFilter.popParent(); |
371 } | 371 } |
372 | 372 |
373 StyleResolver::~StyleResolver() | 373 StyleResolver::~StyleResolver() |
374 { | 374 { |
375 } | 375 } |
376 | 376 |
377 static inline bool applyAuthorStylesOf(const Element* element) | |
378 { | |
379 return element->treeScope().applyAuthorStyles(); | |
380 } | |
381 | |
382 void StyleResolver::matchAuthorRulesForShadowHost(Element* element, ElementRuleC
ollector& collector, bool includeEmptyRules, WillBeHeapVector<RawPtrWillBeMember
<ScopedStyleResolver>, 8>& resolvers, WillBeHeapVector<RawPtrWillBeMember<Scoped
StyleResolver>, 8>& resolversInShadowTree) | 377 void StyleResolver::matchAuthorRulesForShadowHost(Element* element, ElementRuleC
ollector& collector, bool includeEmptyRules, WillBeHeapVector<RawPtrWillBeMember
<ScopedStyleResolver>, 8>& resolvers, WillBeHeapVector<RawPtrWillBeMember<Scoped
StyleResolver>, 8>& resolversInShadowTree) |
383 { | 378 { |
384 collector.clearMatchedRules(); | 379 collector.clearMatchedRules(); |
385 collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().
matchedProperties.size() - 1; | 380 collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().
matchedProperties.size() - 1; |
386 | 381 |
387 CascadeScope cascadeScope = 0; | 382 CascadeScope cascadeScope = 0; |
388 CascadeOrder cascadeOrder = 0; | 383 CascadeOrder cascadeOrder = 0; |
389 bool applyAuthorStyles = applyAuthorStylesOf(element); | |
390 | 384 |
391 for (int j = resolversInShadowTree.size() - 1; j >= 0; --j) | 385 for (int j = resolversInShadowTree.size() - 1; j >= 0; --j) |
392 resolversInShadowTree.at(j)->collectMatchingAuthorRules(collector, inclu
deEmptyRules, applyAuthorStyles, cascadeScope, cascadeOrder++); | 386 resolversInShadowTree.at(j)->collectMatchingAuthorRules(collector, inclu
deEmptyRules, cascadeScope, cascadeOrder++); |
393 | 387 |
394 if (resolvers.isEmpty() || resolvers.first()->treeScope() != element->treeSc
ope()) | 388 if (resolvers.isEmpty() || resolvers.first()->treeScope() != element->treeSc
ope()) |
395 ++cascadeScope; | 389 ++cascadeScope; |
396 cascadeOrder += resolvers.size(); | 390 cascadeOrder += resolvers.size(); |
397 for (unsigned i = 0; i < resolvers.size(); ++i) | 391 for (unsigned i = 0; i < resolvers.size(); ++i) |
398 resolvers.at(i)->collectMatchingAuthorRules(collector, includeEmptyRules
, applyAuthorStyles, cascadeScope++, --cascadeOrder); | 392 resolvers.at(i)->collectMatchingAuthorRules(collector, includeEmptyRules
, cascadeScope++, --cascadeOrder); |
399 | 393 |
400 m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, collec
tor, includeEmptyRules); | 394 m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, collec
tor, includeEmptyRules); |
401 collector.sortAndTransferMatchedRules(); | 395 collector.sortAndTransferMatchedRules(); |
402 } | 396 } |
403 | 397 |
404 void StyleResolver::matchAuthorRules(Element* element, ElementRuleCollector& col
lector, bool includeEmptyRules) | 398 void StyleResolver::matchAuthorRules(Element* element, ElementRuleCollector& col
lector, bool includeEmptyRules) |
405 { | 399 { |
406 collector.clearMatchedRules(); | 400 collector.clearMatchedRules(); |
407 collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().
matchedProperties.size() - 1; | 401 collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().
matchedProperties.size() - 1; |
408 | 402 |
409 bool applyAuthorStyles = applyAuthorStylesOf(element); | |
410 if (document().styleEngine()->hasOnlyScopedResolverForDocument()) { | 403 if (document().styleEngine()->hasOnlyScopedResolverForDocument()) { |
411 document().scopedStyleResolver()->collectMatchingAuthorRules(collector,
includeEmptyRules, applyAuthorStyles, ignoreCascadeScope); | 404 document().scopedStyleResolver()->collectMatchingAuthorRules(collector,
includeEmptyRules, ignoreCascadeScope); |
412 m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, co
llector, includeEmptyRules); | 405 m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, co
llector, includeEmptyRules); |
413 collector.sortAndTransferMatchedRules(); | 406 collector.sortAndTransferMatchedRules(); |
414 return; | 407 return; |
415 } | 408 } |
416 | 409 |
417 WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8> resolvers; | 410 WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8> resolvers; |
418 resolveScopedStyles(element, resolvers); | 411 resolveScopedStyles(element, resolvers); |
419 | 412 |
420 WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8> resolversInShad
owTree; | 413 WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8> resolversInShad
owTree; |
421 collectScopedResolversForHostedShadowTrees(element, resolversInShadowTree); | 414 collectScopedResolversForHostedShadowTrees(element, resolversInShadowTree); |
422 if (!resolversInShadowTree.isEmpty()) { | 415 if (!resolversInShadowTree.isEmpty()) { |
423 matchAuthorRulesForShadowHost(element, collector, includeEmptyRules, res
olvers, resolversInShadowTree); | 416 matchAuthorRulesForShadowHost(element, collector, includeEmptyRules, res
olvers, resolversInShadowTree); |
424 return; | 417 return; |
425 } | 418 } |
426 | 419 |
427 if (resolvers.isEmpty()) | 420 if (resolvers.isEmpty()) |
428 return; | 421 return; |
429 | 422 |
430 CascadeScope cascadeScope = 0; | 423 CascadeScope cascadeScope = 0; |
431 CascadeOrder cascadeOrder = resolvers.size(); | 424 CascadeOrder cascadeOrder = resolvers.size(); |
432 for (unsigned i = 0; i < resolvers.size(); ++i, --cascadeOrder) { | 425 for (unsigned i = 0; i < resolvers.size(); ++i, --cascadeOrder) { |
433 ScopedStyleResolver* resolver = resolvers.at(i); | 426 ScopedStyleResolver* resolver = resolvers.at(i); |
434 // FIXME: Need to clarify how to treat style scoped. | 427 // FIXME: Need to clarify how to treat style scoped. |
435 resolver->collectMatchingAuthorRules(collector, includeEmptyRules, apply
AuthorStyles, cascadeScope++, resolver->treeScope() == element->treeScope() && r
esolver->treeScope().rootNode().isShadowRoot() ? 0 : cascadeOrder); | 428 resolver->collectMatchingAuthorRules(collector, includeEmptyRules, casca
deScope++, resolver->treeScope() == element->treeScope() && resolver->treeScope(
).rootNode().isShadowRoot() ? 0 : cascadeOrder); |
436 } | 429 } |
437 | 430 |
438 m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, collec
tor, includeEmptyRules); | 431 m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, collec
tor, includeEmptyRules); |
439 collector.sortAndTransferMatchedRules(); | 432 collector.sortAndTransferMatchedRules(); |
440 } | 433 } |
441 | 434 |
442 void StyleResolver::matchUARules(ElementRuleCollector& collector) | 435 void StyleResolver::matchUARules(ElementRuleCollector& collector) |
443 { | 436 { |
444 collector.setMatchingUARules(true); | 437 collector.setMatchingUARules(true); |
445 | 438 |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 for (ShadowRoot* shadowRoot = shadow->youngestShadowRoot(); shadowRoot; shad
owRoot = shadowRoot->olderShadowRoot()) { | 1024 for (ShadowRoot* shadowRoot = shadow->youngestShadowRoot(); shadowRoot; shad
owRoot = shadowRoot->olderShadowRoot()) { |
1032 if (shadowRoot->numberOfStyles() > 0) { | 1025 if (shadowRoot->numberOfStyles() > 0) { |
1033 if (ScopedStyleResolver* resolver = shadowRoot->scopedStyleResolver(
)) | 1026 if (ScopedStyleResolver* resolver = shadowRoot->scopedStyleResolver(
)) |
1034 resolvers.append(resolver); | 1027 resolvers.append(resolver); |
1035 } | 1028 } |
1036 } | 1029 } |
1037 } | 1030 } |
1038 | 1031 |
1039 void StyleResolver::styleTreeResolveScopedKeyframesRules(const Element* element,
WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8>& resolvers) | 1032 void StyleResolver::styleTreeResolveScopedKeyframesRules(const Element* element,
WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8>& resolvers) |
1040 { | 1033 { |
1041 Document& document = element->document(); | |
1042 TreeScope& treeScope = element->treeScope(); | 1034 TreeScope& treeScope = element->treeScope(); |
1043 bool applyAuthorStyles = treeScope.applyAuthorStyles(); | |
1044 | 1035 |
1045 // Add resolvers for shadow roots hosted by the given element. | 1036 // Add resolvers for shadow roots hosted by the given element. |
1046 collectScopedResolversForHostedShadowTrees(element, resolvers); | 1037 collectScopedResolversForHostedShadowTrees(element, resolvers); |
1047 | 1038 |
1048 // Add resolvers while walking up DOM tree from the given element. | 1039 // Add resolvers while walking up DOM tree from the given element. |
1049 for (ScopedStyleResolver* scopedResolver = scopedResolverFor(element); scope
dResolver; scopedResolver = scopedResolver->parent()) { | 1040 for (ScopedStyleResolver* scopedResolver = scopedResolverFor(element); scope
dResolver; scopedResolver = scopedResolver->parent()) { |
1050 if (scopedResolver->treeScope() == treeScope || (applyAuthorStyles && sc
opedResolver->treeScope() == document)) | 1041 if (scopedResolver->treeScope() == treeScope) |
1051 resolvers.append(scopedResolver); | 1042 resolvers.append(scopedResolver); |
1052 } | 1043 } |
1053 } | 1044 } |
1054 | 1045 |
1055 template <StyleResolver::StyleApplicationPass pass> | 1046 template <StyleResolver::StyleApplicationPass pass> |
1056 void StyleResolver::applyAnimatedProperties(StyleResolverState& state, const Wil
lBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >& activeInterpo
lations) | 1047 void StyleResolver::applyAnimatedProperties(StyleResolverState& state, const Wil
lBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >& activeInterpo
lations) |
1057 { | 1048 { |
1058 for (WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >::c
onst_iterator iter = activeInterpolations.begin(); iter != activeInterpolations.
end(); ++iter) { | 1049 for (WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> >::c
onst_iterator iter = activeInterpolations.begin(); iter != activeInterpolations.
end(); ++iter) { |
1059 CSSPropertyID property = iter->key; | 1050 CSSPropertyID property = iter->key; |
1060 if (!isPropertyForPass<pass>(property)) | 1051 if (!isPropertyForPass<pass>(property)) |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1592 visitor->trace(m_uncommonAttributeRuleSet); | 1583 visitor->trace(m_uncommonAttributeRuleSet); |
1593 visitor->trace(m_watchedSelectorsRules); | 1584 visitor->trace(m_watchedSelectorsRules); |
1594 visitor->trace(m_treeBoundaryCrossingRules); | 1585 visitor->trace(m_treeBoundaryCrossingRules); |
1595 visitor->trace(m_styleSharingLists); | 1586 visitor->trace(m_styleSharingLists); |
1596 visitor->trace(m_pendingStyleSheets); | 1587 visitor->trace(m_pendingStyleSheets); |
1597 visitor->trace(m_document); | 1588 visitor->trace(m_document); |
1598 #endif | 1589 #endif |
1599 } | 1590 } |
1600 | 1591 |
1601 } // namespace blink | 1592 } // namespace blink |
OLD | NEW |