| Index: third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
|
| index 3db00727628a82c90aec6f6fd3cce8b0228264cb..f8b451a9ae24d3de8a09fec0994cd2134cf69783 100644
|
| --- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
|
| +++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
|
| @@ -297,28 +297,6 @@ void StyleResolver::resetRuleFeatures() {
|
| m_needCollectFeatures = true;
|
| }
|
|
|
| -void StyleResolver::addTreeBoundaryCrossingScope(ContainerNode& scope) {
|
| - m_treeBoundaryCrossingScopes.add(&scope);
|
| -}
|
| -
|
| -void StyleResolver::resetAuthorStyle(TreeScope& treeScope) {
|
| - m_treeBoundaryCrossingScopes.remove(&treeScope.rootNode());
|
| -
|
| - ScopedStyleResolver* resolver = treeScope.scopedStyleResolver();
|
| - if (!resolver)
|
| - return;
|
| -
|
| - resetRuleFeatures();
|
| -
|
| - if (treeScope.rootNode().isDocumentNode()) {
|
| - resolver->resetAuthorStyle();
|
| - return;
|
| - }
|
| -
|
| - // resolver is going to be freed below.
|
| - treeScope.clearScopedStyleResolver();
|
| -}
|
| -
|
| static RuleSet* makeRuleSet(const HeapVector<RuleFeature>& rules) {
|
| size_t size = rules.size();
|
| if (!size)
|
| @@ -394,20 +372,16 @@ void StyleResolver::clearStyleSharingList() {
|
| static inline ScopedStyleResolver* scopedResolverFor(const Element& element) {
|
| // Ideally, returning element->treeScope().scopedStyleResolver() should be
|
| // enough, but ::cue and custom pseudo elements like ::-webkit-meter-bar
|
| - // pierce through a shadow dom boundary, yet they are not part of
|
| - // m_treeBoundaryCrossingScopes. The assumption here is that these rules only
|
| - // pierce through one boundary and that the scope of these elements do not
|
| - // have a style resolver due to the fact that VTT scopes and UA shadow trees
|
| - // don't have <style> elements. This is backed up by the ASSERTs below.
|
| - //
|
| - // FIXME: Make ::cue and custom pseudo elements part of boundary crossing
|
| - // rules when moving those rules to ScopedStyleResolver as part of issue
|
| - // 401359.
|
| + // pierce through a shadow dom boundary, yet they are not part of boundary
|
| + // crossing rules. The assumption here is that these rules only pierce through
|
| + // one boundary and that the scope of these elements do not have a style
|
| + // resolver due to the fact that VTT scopes and UA shadow trees don't have
|
| + // <style> elements. This is backed up by the DCHECKs below.
|
|
|
| TreeScope* treeScope = &element.treeScope();
|
| if (ScopedStyleResolver* resolver = treeScope->scopedStyleResolver()) {
|
| - ASSERT(element.shadowPseudoId().isEmpty());
|
| - ASSERT(!element.isVTTElement());
|
| + DCHECK(element.shadowPseudoId().isEmpty());
|
| + DCHECK(!element.isVTTElement());
|
| return resolver;
|
| }
|
|
|
| @@ -525,8 +499,10 @@ void StyleResolver::matchScopedRules(const Element& element,
|
|
|
| bool matchElementScopeDone = !elementScopeResolver && !element.inlineStyle();
|
|
|
| - for (auto it = m_treeBoundaryCrossingScopes.rbegin();
|
| - it != m_treeBoundaryCrossingScopes.rend(); ++it) {
|
| + const auto& treeBoundaryCrossingScopes =
|
| + document().styleEngine().treeBoundaryCrossingScopes();
|
| + for (auto it = treeBoundaryCrossingScopes.rbegin();
|
| + it != treeBoundaryCrossingScopes.rend(); ++it) {
|
| const TreeScope& scope = (*it)->containingTreeScope();
|
| ScopedStyleResolver* resolver = scope.scopedStyleResolver();
|
| ASSERT(resolver);
|
| @@ -687,15 +663,17 @@ void StyleResolver::matchAllRules(StyleResolverState& state,
|
| void StyleResolver::collectTreeBoundaryCrossingRulesV0CascadeOrder(
|
| const Element& element,
|
| ElementRuleCollector& collector) {
|
| - if (m_treeBoundaryCrossingScopes.isEmpty())
|
| + const auto& treeBoundaryCrossingScopes =
|
| + document().styleEngine().treeBoundaryCrossingScopes();
|
| + if (treeBoundaryCrossingScopes.isEmpty())
|
| return;
|
|
|
| // When comparing rules declared in outer treescopes, outer's rules win.
|
| - CascadeOrder outerCascadeOrder = m_treeBoundaryCrossingScopes.size() * 2;
|
| + CascadeOrder outerCascadeOrder = treeBoundaryCrossingScopes.size() * 2;
|
| // When comparing rules declared in inner treescopes, inner's rules win.
|
| - CascadeOrder innerCascadeOrder = m_treeBoundaryCrossingScopes.size();
|
| + CascadeOrder innerCascadeOrder = treeBoundaryCrossingScopes.size();
|
|
|
| - for (const auto& scopingNode : m_treeBoundaryCrossingScopes) {
|
| + for (const auto& scopingNode : treeBoundaryCrossingScopes) {
|
| // Skip rule collection for element when tree boundary crossing rules of
|
| // scopingNode's scope can never apply to it.
|
| bool isInnerTreeScope = element.containingTreeScope().isInclusiveAncestorOf(
|
| @@ -1941,7 +1919,6 @@ DEFINE_TRACE(StyleResolver) {
|
| visitor->trace(m_siblingRuleSet);
|
| visitor->trace(m_uncommonAttributeRuleSet);
|
| visitor->trace(m_watchedSelectorsRules);
|
| - visitor->trace(m_treeBoundaryCrossingScopes);
|
| visitor->trace(m_styleSharingLists);
|
| visitor->trace(m_pendingStyleSheets);
|
| visitor->trace(m_document);
|
|
|