| Index: Source/core/css/resolver/ScopedStyleResolver.cpp
|
| diff --git a/Source/core/css/resolver/ScopedStyleResolver.cpp b/Source/core/css/resolver/ScopedStyleResolver.cpp
|
| index 53c76a3b7236141a25b8844b33c0e6340f1f1326..71a446fa012a5f660b9cae2e23456f266b51ed6c 100644
|
| --- a/Source/core/css/resolver/ScopedStyleResolver.cpp
|
| +++ b/Source/core/css/resolver/ScopedStyleResolver.cpp
|
| @@ -41,9 +41,8 @@
|
|
|
| namespace WebCore {
|
|
|
| -ScopedStyleResolver* ScopedStyleTree::ensureScopedStyleResolver(const ContainerNode* scopingNode)
|
| +ScopedStyleResolver* ScopedStyleTree::ensureScopedStyleResolver(const ContainerNode& scopingNode)
|
| {
|
| - ASSERT(scopingNode);
|
| bool isNewEntry;
|
| ScopedStyleResolver* scopedStyleResolver = addScopedStyleResolver(scopingNode, isNewEntry);
|
| if (isNewEntry)
|
| @@ -51,24 +50,24 @@ ScopedStyleResolver* ScopedStyleTree::ensureScopedStyleResolver(const ContainerN
|
| return scopedStyleResolver;
|
| }
|
|
|
| -ScopedStyleResolver* ScopedStyleTree::scopedStyleResolverFor(const ContainerNode* scopingNode)
|
| +ScopedStyleResolver* ScopedStyleTree::scopedStyleResolverFor(const ContainerNode& scopingNode)
|
| {
|
| - if (!scopingNode->hasScopedHTMLStyleChild()
|
| - && !(scopingNode->isElementNode() && toElement(scopingNode)->shadow())
|
| - && !scopingNode->isDocumentNode()
|
| - && !scopingNode->isShadowRoot())
|
| + if (!scopingNode.hasScopedHTMLStyleChild()
|
| + && !(scopingNode.isElementNode() && toElement(scopingNode).shadow())
|
| + && !scopingNode.isDocumentNode()
|
| + && !scopingNode.isShadowRoot())
|
| return 0;
|
| - HashMap<const ContainerNode*, OwnPtr<ScopedStyleResolver> >::iterator it = m_authorStyles.find(scopingNode);
|
| + HashMap<const ContainerNode*, OwnPtr<ScopedStyleResolver> >::iterator it = m_authorStyles.find(&scopingNode);
|
| return it != m_authorStyles.end() ? it->value.get() : 0;
|
| }
|
|
|
| -ScopedStyleResolver* ScopedStyleTree::addScopedStyleResolver(const ContainerNode* scopingNode, bool& isNewEntry)
|
| +ScopedStyleResolver* ScopedStyleTree::addScopedStyleResolver(const ContainerNode& scopingNode, bool& isNewEntry)
|
| {
|
| - HashMap<const ContainerNode*, OwnPtr<ScopedStyleResolver> >::AddResult addResult = m_authorStyles.add(scopingNode, nullptr);
|
| + HashMap<const ContainerNode*, OwnPtr<ScopedStyleResolver> >::AddResult addResult = m_authorStyles.add(&scopingNode, nullptr);
|
|
|
| if (addResult.isNewEntry) {
|
| addResult.iterator->value = ScopedStyleResolver::create(scopingNode);
|
| - if (!scopingNode || scopingNode->isDocumentNode())
|
| + if (scopingNode.isDocumentNode())
|
| m_scopedResolverForDocument = addResult.iterator->value.get();
|
| }
|
| isNewEntry = addResult.isNewEntry;
|
| @@ -78,21 +77,20 @@ ScopedStyleResolver* ScopedStyleTree::addScopedStyleResolver(const ContainerNode
|
| void ScopedStyleTree::setupScopedStylesTree(ScopedStyleResolver* target)
|
| {
|
| ASSERT(target);
|
| - ASSERT(target->scopingNode());
|
|
|
| - const ContainerNode* scopingNode = target->scopingNode();
|
| + const ContainerNode& scopingNode = target->scopingNode();
|
|
|
| // Since StyleResolver creates RuleSets according to styles' document
|
| // order, a parent of the given ScopedRuleData has been already
|
| // prepared.
|
| - for (const ContainerNode* node = scopingNode->parentOrShadowHostNode(); node; node = node->parentOrShadowHostNode()) {
|
| - if (ScopedStyleResolver* scopedResolver = scopedStyleResolverFor(node)) {
|
| + for (const ContainerNode* node = scopingNode.parentOrShadowHostNode(); node; node = node->parentOrShadowHostNode()) {
|
| + if (ScopedStyleResolver* scopedResolver = scopedStyleResolverFor(*node)) {
|
| target->setParent(scopedResolver);
|
| break;
|
| }
|
| if (node->isDocumentNode()) {
|
| bool dummy;
|
| - ScopedStyleResolver* scopedResolver = addScopedStyleResolver(node, dummy);
|
| + ScopedStyleResolver* scopedResolver = addScopedStyleResolver(*node, dummy);
|
| target->setParent(scopedResolver);
|
| setupScopedStylesTree(scopedResolver);
|
| break;
|
| @@ -106,7 +104,7 @@ void ScopedStyleTree::setupScopedStylesTree(ScopedStyleResolver* target)
|
| for (HashMap<const ContainerNode*, OwnPtr<ScopedStyleResolver> >::iterator it = m_authorStyles.begin(); it != m_authorStyles.end(); ++it) {
|
| if (it->value == target)
|
| continue;
|
| - if (it->value->parent() == target->parent() && scopingNode->containsIncludingShadowDOM(it->key))
|
| + if (it->value->parent() == target->parent() && scopingNode.containsIncludingShadowDOM(it->key))
|
| it->value->setParent(target);
|
| }
|
| }
|
| @@ -133,7 +131,7 @@ void ScopedStyleTree::collectScopedResolversForHostedShadowTrees(const Element*
|
| // Adding scoped resolver for active shadow roots for shadow host styling.
|
| for (ShadowRoot* shadowRoot = shadow->youngestShadowRoot(); shadowRoot; shadowRoot = shadowRoot->olderShadowRoot()) {
|
| if (shadowRoot->hasScopedHTMLStyleChild()) {
|
| - if (ScopedStyleResolver* resolver = scopedStyleResolverFor(shadowRoot))
|
| + if (ScopedStyleResolver* resolver = scopedStyleResolverFor(*shadowRoot))
|
| resolvers.append(resolver);
|
| }
|
| if (!shadowRoot->containsShadowElements())
|
| @@ -156,7 +154,7 @@ void ScopedStyleTree::resolveScopedKeyframesRules(const Element* element, Vector
|
| inline ScopedStyleResolver* ScopedStyleTree::enclosingScopedStyleResolverFor(const ContainerNode* scopingNode)
|
| {
|
| for (; scopingNode; scopingNode = scopingNode->parentOrShadowHostNode()) {
|
| - if (ScopedStyleResolver* scopedStyleResolver = scopedStyleResolverFor(scopingNode))
|
| + if (ScopedStyleResolver* scopedStyleResolver = scopedStyleResolverFor(*scopingNode))
|
| return scopedStyleResolver;
|
| }
|
| return 0;
|
| @@ -168,30 +166,30 @@ void ScopedStyleTree::resolveStyleCache(const ContainerNode* scopingNode)
|
| m_cache.nodeForScopedStyles = scopingNode;
|
| }
|
|
|
| -void ScopedStyleTree::pushStyleCache(const ContainerNode* scopingNode, const ContainerNode* parent)
|
| +void ScopedStyleTree::pushStyleCache(const ContainerNode& scopingNode, const ContainerNode* parent)
|
| {
|
| if (m_authorStyles.isEmpty())
|
| return;
|
|
|
| if (!cacheIsValid(parent)) {
|
| - resolveStyleCache(scopingNode);
|
| + resolveStyleCache(&scopingNode);
|
| return;
|
| }
|
|
|
| ScopedStyleResolver* scopedResolver = scopedStyleResolverFor(scopingNode);
|
| if (scopedResolver)
|
| m_cache.scopedResolver = scopedResolver;
|
| - m_cache.nodeForScopedStyles = scopingNode;
|
| + m_cache.nodeForScopedStyles = &scopingNode;
|
| }
|
|
|
| -void ScopedStyleTree::popStyleCache(const ContainerNode* scopingNode)
|
| +void ScopedStyleTree::popStyleCache(const ContainerNode& scopingNode)
|
| {
|
| - if (!cacheIsValid(scopingNode))
|
| + if (!cacheIsValid(&scopingNode))
|
| return;
|
|
|
| - if (m_cache.scopedResolver && m_cache.scopedResolver->scopingNode() == scopingNode)
|
| + if (m_cache.scopedResolver && &m_cache.scopedResolver->scopingNode() == &scopingNode)
|
| m_cache.scopedResolver = m_cache.scopedResolver->parent();
|
| - m_cache.nodeForScopedStyles = scopingNode->parentOrShadowHostNode();
|
| + m_cache.nodeForScopedStyles = scopingNode.parentOrShadowHostNode();
|
| }
|
|
|
| void ScopedStyleTree::collectFeaturesTo(RuleFeatureSet& features)
|
| @@ -214,7 +212,7 @@ void ScopedStyleTree::remove(const ContainerNode* scopingNode)
|
| if (!scopingNode || scopingNode->isDocumentNode())
|
| return;
|
|
|
| - ScopedStyleResolver* resolverRemoved = scopedStyleResolverFor(scopingNode);
|
| + ScopedStyleResolver* resolverRemoved = scopedStyleResolverFor(*scopingNode);
|
| if (!resolverRemoved)
|
| return;
|
|
|
| @@ -251,7 +249,7 @@ void ScopedStyleResolver::addRulesFromSheet(StyleSheetContents* sheet, const Med
|
| {
|
| if (!m_authorStyle)
|
| m_authorStyle = RuleSet::create();
|
| - m_authorStyle->addRulesFromSheet(sheet, medium, resolver, m_scopingNode);
|
| + m_authorStyle->addRulesFromSheet(sheet, medium, resolver, &m_scopingNode);
|
| }
|
|
|
| inline RuleSet* ScopedStyleResolver::ensureAtHostRuleSetFor(const ShadowRoot* shadowRoot)
|
| @@ -357,10 +355,10 @@ void ScopedStyleResolver::matchHostRules(ElementRuleCollector& collector, bool i
|
| // FIXME: Determine tree position.
|
| CascadeScope cascadeScope = ignoreCascadeScope;
|
|
|
| - if (m_atHostRules.isEmpty() || !m_scopingNode->isElementNode())
|
| + if (m_atHostRules.isEmpty() || !m_scopingNode.isElementNode())
|
| return;
|
|
|
| - ElementShadow* shadow = toElement(m_scopingNode)->shadow();
|
| + ElementShadow* shadow = toElement(m_scopingNode).shadow();
|
| if (!shadow)
|
| return;
|
|
|
| @@ -383,7 +381,7 @@ void ScopedStyleResolver::matchHostRules(ElementRuleCollector& collector, bool i
|
| collector.setBehaviorAtBoundary(static_cast<SelectorChecker::BehaviorAtBoundary>(SelectorChecker::DoesNotCrossBoundary | SelectorChecker::ScopeContainsLastMatchedElement));
|
| for (; shadowRoot; shadowRoot = shadowRoot->youngerShadowRoot()) {
|
| if (RuleSet* ruleSet = atHostRuleSetFor(shadowRoot))
|
| - collector.collectMatchingRules(MatchRequest(ruleSet, includeEmptyRules, m_scopingNode), ruleRange, cascadeScope);
|
| + collector.collectMatchingRules(MatchRequest(ruleSet, includeEmptyRules, &m_scopingNode), ruleRange, cascadeScope);
|
| }
|
|
|
| collector.sortAndTransferMatchedRules();
|
| @@ -402,14 +400,14 @@ void ScopedStyleResolver::collectMatchingAuthorRules(ElementRuleCollector& colle
|
| if (!m_authorStyle)
|
| return;
|
|
|
| - const ContainerNode* scopingNode = m_scopingNode;
|
| + const ContainerNode* scopingNode = &m_scopingNode;
|
| unsigned behaviorAtBoundary = SelectorChecker::DoesNotCrossBoundary;
|
|
|
| if (!applyAuthorStyles)
|
| behaviorAtBoundary |= SelectorChecker::ScopeContainsLastMatchedElement;
|
|
|
| - if (m_scopingNode->isShadowRoot()) {
|
| - scopingNode = toShadowRoot(m_scopingNode)->host();
|
| + if (m_scopingNode.isShadowRoot()) {
|
| + scopingNode = toShadowRoot(m_scopingNode).host();
|
| behaviorAtBoundary |= SelectorChecker::ScopeIsShadowHost;
|
| }
|
|
|
| @@ -423,7 +421,7 @@ void ScopedStyleResolver::collectMatchingAuthorRules(ElementRuleCollector& colle
|
| void ScopedStyleResolver::matchPageRules(PageRuleCollector& collector)
|
| {
|
| // Only consider the global author RuleSet for @page rules, as per the HTML5 spec.
|
| - ASSERT(m_scopingNode->isDocumentNode());
|
| + ASSERT(m_scopingNode.isDocumentNode());
|
| collector.matchPageRules(m_authorStyle.get());
|
| }
|
|
|
|
|