| Index: Source/core/css/ElementRuleCollector.cpp
|
| diff --git a/Source/core/css/ElementRuleCollector.cpp b/Source/core/css/ElementRuleCollector.cpp
|
| index 563860620a8c54b9e6d9d1a30f6985731f063224..d59f50d2c1bdea343800adcf00078765a1421af5 100644
|
| --- a/Source/core/css/ElementRuleCollector.cpp
|
| +++ b/Source/core/css/ElementRuleCollector.cpp
|
| @@ -141,14 +141,14 @@ void ElementRuleCollector::collectMatchingRules(const MatchRequest& matchRequest
|
| ASSERT(matchRequest.ruleSet);
|
| ASSERT(m_context.element());
|
|
|
| - Element* element = m_context.element();
|
| - const AtomicString& pseudoId = element->shadowPseudoId();
|
| + Element& element = *m_context.element();
|
| + const AtomicString& pseudoId = element.shadowPseudoId();
|
| if (!pseudoId.isEmpty()) {
|
| - ASSERT(element->isStyledElement());
|
| + ASSERT(element.isStyledElement());
|
| collectMatchingRulesForList(matchRequest.ruleSet->shadowPseudoElementRules(pseudoId.impl()), behaviorAtBoundary, ignoreCascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| }
|
|
|
| - if (element->isWebVTTElement())
|
| + if (element.isWebVTTElement())
|
| collectMatchingRulesForList(matchRequest.ruleSet->cuePseudoRules(), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| // Check whether other types of rules are applicable in the current tree scope. Criteria for this:
|
| // a) it's a UA rule
|
| @@ -157,23 +157,23 @@ void ElementRuleCollector::collectMatchingRules(const MatchRequest& matchRequest
|
| // d) the rules comes from a scoped style sheet within an active shadow root whose host is the given element
|
| // e) the rules can cross boundaries
|
| // b)-e) is checked in rulesApplicableInCurrentTreeScope.
|
| - if (!m_matchingUARules && !rulesApplicableInCurrentTreeScope(element, matchRequest.scope, behaviorAtBoundary, matchRequest.elementApplyAuthorStyles))
|
| + if (!m_matchingUARules && !rulesApplicableInCurrentTreeScope(&element, matchRequest.scope, behaviorAtBoundary, matchRequest.elementApplyAuthorStyles))
|
| return;
|
|
|
| // We need to collect the rules for id, class, tag, and everything else into a buffer and
|
| // then sort the buffer.
|
| - if (element->hasID())
|
| - collectMatchingRulesForList(matchRequest.ruleSet->idRules(element->idForStyleResolution().impl()), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| - if (element->isStyledElement() && element->hasClass()) {
|
| - for (size_t i = 0; i < element->classNames().size(); ++i)
|
| - collectMatchingRulesForList(matchRequest.ruleSet->classRules(element->classNames()[i].impl()), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| + if (element.hasID())
|
| + collectMatchingRulesForList(matchRequest.ruleSet->idRules(element.idForStyleResolution().impl()), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| + if (element.isStyledElement() && element.hasClass()) {
|
| + for (size_t i = 0; i < element.classNames().size(); ++i)
|
| + collectMatchingRulesForList(matchRequest.ruleSet->classRules(element.classNames()[i].impl()), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| }
|
|
|
| - if (element->isLink())
|
| + if (element.isLink())
|
| collectMatchingRulesForList(matchRequest.ruleSet->linkPseudoClassRules(), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| if (SelectorChecker::matchesFocusPseudoClass(element))
|
| collectMatchingRulesForList(matchRequest.ruleSet->focusPseudoClassRules(), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| - collectMatchingRulesForList(matchRequest.ruleSet->tagRules(element->localName().impl()), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->tagRules(element.localName().impl()), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| collectMatchingRulesForList(matchRequest.ruleSet->universalRules(), behaviorAtBoundary, cascadeScope, cascadeOrder, matchRequest, ruleRange);
|
| }
|
|
|
| @@ -266,13 +266,14 @@ inline bool ElementRuleCollector::ruleMatches(const RuleData& ruleData, const Co
|
| return false;
|
| // We know a sufficiently simple single part selector matches simply because we found it from the rule hash.
|
| // This is limited to HTML only so we don't need to check the namespace.
|
| + ASSERT(m_context.element());
|
| if (ruleData.hasRightmostSelectorMatchingHTMLBasedOnRuleHash() && m_context.element()->isHTMLElement()) {
|
| if (!ruleData.hasMultipartSelector())
|
| return true;
|
| }
|
| - if (ruleData.selector()->m_match == CSSSelector::Tag && !SelectorChecker::tagMatches(m_context.element(), ruleData.selector()->tagQName()))
|
| + if (ruleData.selector()->m_match == CSSSelector::Tag && !SelectorChecker::tagMatches(*m_context.element(), ruleData.selector()->tagQName()))
|
| return false;
|
| - SelectorCheckerFastPath selectorCheckerFastPath(ruleData.selector(), m_context.element());
|
| + SelectorCheckerFastPath selectorCheckerFastPath(ruleData.selector(), *m_context.element());
|
| if (!selectorCheckerFastPath.matchesRightmostAttributeSelector())
|
| return false;
|
|
|
|
|