Index: Source/core/css/resolver/StyleResolver.cpp |
diff --git a/Source/core/css/resolver/StyleResolver.cpp b/Source/core/css/resolver/StyleResolver.cpp |
index 6600d1a17906d718c148f5e5ffad61cd46cc0def..1050228dee1659bd0fd76ba0c1d70ea1fffa3cd8 100644 |
--- a/Source/core/css/resolver/StyleResolver.cpp |
+++ b/Source/core/css/resolver/StyleResolver.cpp |
@@ -414,40 +414,24 @@ static inline ScopedStyleResolver* scopedResolverFor(const Element* element) |
return treeScope->scopedStyleResolver(); |
} |
-void StyleResolver::matchAuthorRulesForShadowHost(Element* element, ElementRuleCollector& collector, bool includeEmptyRules, WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8>& resolversInShadowTree) |
-{ |
- CascadeOrder cascadeOrder = 0; |
- for (int j = resolversInShadowTree.size() - 1; j >= 0; --j) |
- resolversInShadowTree.at(j)->collectMatchingShadowHostRules(collector, includeEmptyRules, cascadeOrder++); |
- |
- if (ScopedStyleResolver* resolver = scopedResolverFor(element)) |
- resolver->collectMatchingAuthorRules(collector, includeEmptyRules, cascadeOrder); |
-} |
- |
void StyleResolver::matchAuthorRules(Element* element, ElementRuleCollector& collector, bool includeEmptyRules) |
{ |
collector.clearMatchedRules(); |
collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().matchedProperties.size() - 1; |
- if (document().styleEngine()->onlyDocumentHasStyles()) { |
- ScopedStyleResolver* resolver = document().scopedStyleResolver(); |
- // If we have no resolver for a document, the document has no styles. |
- // We don't need to see any rules (including treeboundary crossing ones). |
- if (!resolver) |
- return; |
- resolver->collectMatchingAuthorRules(collector, includeEmptyRules); |
- m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, collector, includeEmptyRules); |
- collector.sortAndTransferMatchedRules(); |
- return; |
- } |
- |
+ CascadeOrder cascadeOrder = 0; |
WillBeHeapVector<RawPtrWillBeMember<ScopedStyleResolver>, 8> resolversInShadowTree; |
collectScopedResolversForHostedShadowTrees(element, resolversInShadowTree); |
- if (!resolversInShadowTree.isEmpty()) |
- matchAuthorRulesForShadowHost(element, collector, includeEmptyRules, resolversInShadowTree); |
- else if (ScopedStyleResolver* resolver = scopedResolverFor(element)) |
- resolver->collectMatchingAuthorRules(collector, includeEmptyRules, resolver->treeScope().rootNode().isShadowRoot() ? 0 : 1); |
+ // Apply :host and :host-context rules from inner scopes. |
+ for (int j = resolversInShadowTree.size() - 1; j >= 0; --j) |
+ resolversInShadowTree.at(j)->collectMatchingShadowHostRules(collector, includeEmptyRules, ++cascadeOrder); |
+ |
+ // Apply normal rules from element scope. |
+ if (ScopedStyleResolver* resolver = scopedResolverFor(element)) |
+ resolver->collectMatchingAuthorRules(collector, includeEmptyRules, ++cascadeOrder); |
+ |
+ // Apply /deep/ and ::shadow rules from outer scopes, and ::content from inner. |
m_treeBoundaryCrossingRules.collectTreeBoundaryCrossingRules(element, collector, includeEmptyRules); |
collector.sortAndTransferMatchedRules(); |
} |