Index: Source/core/css/resolver/StyleResolver.cpp |
diff --git a/Source/core/css/resolver/StyleResolver.cpp b/Source/core/css/resolver/StyleResolver.cpp |
index 140773fb2dee03c3e1d0285b002a1039cccfd8ae..fc0612d5060e4cdb2806ead062a2a77149b81467 100644 |
--- a/Source/core/css/resolver/StyleResolver.cpp |
+++ b/Source/core/css/resolver/StyleResolver.cpp |
@@ -246,21 +246,21 @@ void StyleResolver::resetRuleFeatures() |
m_needCollectFeatures = true; |
} |
-void StyleResolver::addTreeBoundaryCrossingRules(const WillBeHeapVector<MinimalRuleData>& rules, ContainerNode* scope) |
+void StyleResolver::addTreeBoundaryCrossingRules(const WillBeHeapVector<MinimalRuleData>& rules, ContainerNode* scope, CSSStyleSheet* parentStyleSheet) |
{ |
for (unsigned i = 0; i < rules.size(); ++i) { |
const MinimalRuleData& info = rules[i]; |
- m_treeBoundaryCrossingRules.addRule(info.m_rule, info.m_selectorIndex, scope, info.m_flags); |
+ m_treeBoundaryCrossingRules.addRule(info.m_rule, info.m_selectorIndex, scope, parentStyleSheet, info.m_flags); |
} |
} |
-void StyleResolver::processScopedRules(const RuleSet& authorRules, const KURL& sheetBaseURL, ContainerNode* scope) |
+void StyleResolver::processScopedRules(const RuleSet& authorRules, CSSStyleSheet* parentStyleSheet, ContainerNode* scope) |
{ |
const WillBeHeapVector<RawPtrWillBeMember<StyleRuleKeyframes> > keyframesRules = authorRules.keyframesRules(); |
for (unsigned i = 0; i < keyframesRules.size(); ++i) |
ensureScopedStyleResolver(scope)->addKeyframeStyle(keyframesRules[i]); |
- addTreeBoundaryCrossingRules(authorRules.treeBoundaryCrossingRules(), scope); |
+ addTreeBoundaryCrossingRules(authorRules.treeBoundaryCrossingRules(), scope, parentStyleSheet); |
// FIXME(BUG 72461): We don't add @font-face rules of scoped style sheets for the moment. |
if (!scope || scope->isDocumentNode()) { |
@@ -270,7 +270,7 @@ void StyleResolver::processScopedRules(const RuleSet& authorRules, const KURL& s |
if (fontFaceRules.size()) |
invalidateMatchedPropertiesCache(); |
} else { |
- addTreeBoundaryCrossingRules(authorRules.shadowDistributedRules(), scope); |
+ addTreeBoundaryCrossingRules(authorRules.shadowDistributedRules(), scope, parentStyleSheet); |
} |
} |
@@ -282,7 +282,7 @@ void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode) |
if (!resolver) |
return; |
- treeBoundaryCrossingRules().reset(scopingNode); |
+ m_treeBoundaryCrossingRules.reset(scopingNode); |
resolver->resetAuthorStyle(); |
resetRuleFeatures(); |
@@ -420,7 +420,7 @@ inline void StyleResolver::collectTreeBoundaryCrossingRules(Element* element, El |
continue; |
} |
- RuleSet* ruleSet = m_treeBoundaryCrossingRules.ruleSetScopedBy(scopingNode); |
+ TreeBoundaryCrossingRules::CSSStyleSheetRuleSubSet* styleSheetsRuleSubSets = m_treeBoundaryCrossingRules.ruleSetScopedBy(scopingNode); |
unsigned boundaryBehavior = SelectorChecker::ScopeContainsLastMatchedElement; |
bool isInnerTreeScope = element->treeScope().isInclusiveAncestorOf(scopingNode->treeScope()); |
@@ -433,8 +433,10 @@ inline void StyleResolver::collectTreeBoundaryCrossingRules(Element* element, El |
} |
CascadeOrder cascadeOrder = isInnerTreeScope ? innerCascadeOrder : outerCascadeOrder; |
- |
- collector.collectMatchingRules(MatchRequest(ruleSet, includeEmptyRules, scopingNode), ruleRange, static_cast<SelectorChecker::BehaviorAtBoundary>(boundaryBehavior), ignoreCascadeScope, cascadeOrder); |
+ for (TreeBoundaryCrossingRules::CSSStyleSheetRuleSubSet::iterator it = styleSheetsRuleSubSets->begin(); it != styleSheetsRuleSubSets->end(); ++it) { |
+ RuleSet* ruleSet = it->value.get(); |
+ collector.collectMatchingRules(MatchRequest(ruleSet, includeEmptyRules, scopingNode, it->key), ruleRange, static_cast<SelectorChecker::BehaviorAtBoundary>(boundaryBehavior), ignoreCascadeScope, cascadeOrder); |
+ } |
++innerCascadeOrder; |
--outerCascadeOrder; |
} |