Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Unified Diff: Source/core/css/TreeBoundaryCrossingRules.cpp

Issue 931143002: Start moving tree-boundary-crossing rules to ScopedStyleResolver. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/TreeBoundaryCrossingRules.h ('k') | Source/core/css/resolver/ScopedStyleResolver.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/TreeBoundaryCrossingRules.cpp
diff --git a/Source/core/css/TreeBoundaryCrossingRules.cpp b/Source/core/css/TreeBoundaryCrossingRules.cpp
index f47d769f29aead924e2dc19cb165dcd0baa8c655..cbc10ff507833f947e37b1881273dd0812b41cfa 100644
--- a/Source/core/css/TreeBoundaryCrossingRules.cpp
+++ b/Source/core/css/TreeBoundaryCrossingRules.cpp
@@ -30,44 +30,15 @@
#include "core/css/TreeBoundaryCrossingRules.h"
#include "core/css/ElementRuleCollector.h"
-#include "core/css/RuleFeature.h"
-#include "core/dom/StyleEngine.h"
-#include "core/dom/shadow/ShadowRoot.h"
+#include "core/css/resolver/ScopedStyleResolver.h"
namespace blink {
-static void addRules(RuleSet* ruleSet, const WillBeHeapVector<MinimalRuleData>& rules)
-{
- for (unsigned i = 0; i < rules.size(); ++i) {
- const MinimalRuleData& info = rules[i];
- ruleSet->addRule(info.m_rule, info.m_selectorIndex, info.m_flags);
- }
-}
-
-void TreeBoundaryCrossingRules::addTreeBoundaryCrossingRules(const RuleSet& authorRules, CSSStyleSheet* parentStyleSheet, unsigned parentIndex, ContainerNode& scopingNode)
-{
- if (authorRules.treeBoundaryCrossingRules().isEmpty() && (scopingNode.isDocumentNode() || authorRules.shadowDistributedRules().isEmpty()))
- return;
- OwnPtrWillBeRawPtr<RuleSet> ruleSetForScope = RuleSet::create();
- addRules(ruleSetForScope.get(), authorRules.treeBoundaryCrossingRules());
- if (!scopingNode.isDocumentNode())
- addRules(ruleSetForScope.get(), authorRules.shadowDistributedRules());
-
- if (!m_treeBoundaryCrossingRuleSetMap.contains(&scopingNode)) {
- m_treeBoundaryCrossingRuleSetMap.add(&scopingNode, adoptPtrWillBeNoop(new CSSStyleSheetRuleSubSet()));
- m_scopingNodes.add(&scopingNode);
- }
- CSSStyleSheetRuleSubSet* ruleSubSet = m_treeBoundaryCrossingRuleSetMap.get(&scopingNode);
- ruleSubSet->append(RuleSubSet::create(parentStyleSheet, parentIndex, ruleSetForScope.release()));
-}
-
void TreeBoundaryCrossingRules::collectTreeBoundaryCrossingRules(Element* element, ElementRuleCollector& collector, bool includeEmptyRules)
{
- if (m_treeBoundaryCrossingRuleSetMap.isEmpty())
+ if (m_scopingNodes.isEmpty())
return;
- RuleRange ruleRange = collector.matchedResult().ranges.authorRuleRange();
-
// When comparing rules declared in outer treescopes, outer's rules win.
CascadeOrder outerCascadeOrder = size() + size();
// When comparing rules declared in inner treescopes, inner's rules win.
@@ -75,51 +46,36 @@ void TreeBoundaryCrossingRules::collectTreeBoundaryCrossingRules(Element* elemen
ASSERT(!collector.scopeContainsLastMatchedElement());
collector.setScopeContainsLastMatchedElement(true);
+
for (const auto& scope : m_scopingNodes) {
- const ContainerNode* scopingNode = toContainerNode(scope);
- CSSStyleSheetRuleSubSet* ruleSubSet = m_treeBoundaryCrossingRuleSetMap.get(scopingNode);
- bool isInnerTreeScope = element->treeScope().isInclusiveAncestorOf(scopingNode->treeScope());
+ bool isInnerTreeScope = element->treeScope().isInclusiveAncestorOf(scope->treeScope());
CascadeOrder cascadeOrder = isInnerTreeScope ? innerCascadeOrder : outerCascadeOrder;
- for (const auto& rules : *ruleSubSet) {
- MatchRequest request(rules->ruleSet.get(), includeEmptyRules, scopingNode, rules->parentStyleSheet, rules->parentIndex);
- collector.collectMatchingRules(request, ruleRange, cascadeOrder, true);
- }
+
+ scope->treeScope().scopedStyleResolver()->collectMatchingTreeBoundaryCrossingRules(collector, includeEmptyRules, cascadeOrder);
+
++innerCascadeOrder;
--outerCascadeOrder;
}
- collector.setScopeContainsLastMatchedElement(false);
-}
-void TreeBoundaryCrossingRules::reset(const ContainerNode* scopingNode)
-{
- m_treeBoundaryCrossingRuleSetMap.remove(scopingNode);
- m_scopingNodes.remove(scopingNode);
+ collector.setScopeContainsLastMatchedElement(false);
}
-void TreeBoundaryCrossingRules::collectFeaturesFromRuleSubSet(CSSStyleSheetRuleSubSet* ruleSubSet, RuleFeatureSet& features)
+void TreeBoundaryCrossingRules::addScope(ContainerNode& scopingNode)
{
- for (const auto& rules : *ruleSubSet)
- features.add(rules->ruleSet->features());
+ m_scopingNodes.add(&scopingNode);
}
-void TreeBoundaryCrossingRules::collectFeaturesTo(RuleFeatureSet& features)
+void TreeBoundaryCrossingRules::removeScope(const ContainerNode& scopingNode)
{
- for (const auto& value : m_treeBoundaryCrossingRuleSetMap.values())
- collectFeaturesFromRuleSubSet(value.get(), features);
+ m_scopingNodes.remove(&scopingNode);
}
void TreeBoundaryCrossingRules::trace(Visitor* visitor)
{
#if ENABLE(OILPAN)
- visitor->trace(m_treeBoundaryCrossingRuleSetMap);
visitor->trace(m_scopingNodes);
#endif
}
-void TreeBoundaryCrossingRules::RuleSubSet::trace(Visitor* visitor)
-{
- visitor->trace(ruleSet);
-}
-
} // namespace blink
« no previous file with comments | « Source/core/css/TreeBoundaryCrossingRules.h ('k') | Source/core/css/resolver/ScopedStyleResolver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698