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; |