| Index: Source/core/css/ElementRuleCollector.cpp
|
| diff --git a/Source/core/css/ElementRuleCollector.cpp b/Source/core/css/ElementRuleCollector.cpp
|
| index 162835e9c82978dbceee53248a7eafb0366ee09f..dd29dc4d12e408450b31f0c49036c98fdc583dcf 100644
|
| --- a/Source/core/css/ElementRuleCollector.cpp
|
| +++ b/Source/core/css/ElementRuleCollector.cpp
|
| @@ -61,7 +61,7 @@ ElementRuleCollector::~ElementRuleCollector()
|
| {
|
| }
|
|
|
| -MatchResult& ElementRuleCollector::matchedResult()
|
| +const MatchResult& ElementRuleCollector::matchedResult()
|
| {
|
| return m_result;
|
| }
|
| @@ -101,9 +101,6 @@ void ElementRuleCollector::addElementStyleProperties(const StylePropertySet* pro
|
| {
|
| if (!propertySet)
|
| return;
|
| - m_result.ranges.lastAuthorRule = m_result.matchedProperties.size();
|
| - if (m_result.ranges.firstAuthorRule == -1)
|
| - m_result.ranges.firstAuthorRule = m_result.ranges.lastAuthorRule;
|
| m_result.addMatchedProperties(propertySet);
|
| if (!isCacheable)
|
| m_result.isCacheable = false;
|
| @@ -125,7 +122,7 @@ static bool rulesApplicableInCurrentTreeScope(const Element* element, const Cont
|
| }
|
|
|
| template<typename RuleDataListType>
|
| -void ElementRuleCollector::collectMatchingRulesForList(const RuleDataListType* rules, CascadeOrder cascadeOrder, const MatchRequest& matchRequest, RuleRange& ruleRange)
|
| +void ElementRuleCollector::collectMatchingRulesForList(const RuleDataListType* rules, CascadeOrder cascadeOrder, const MatchRequest& matchRequest)
|
| {
|
| if (!rules)
|
| return;
|
| @@ -162,11 +159,11 @@ void ElementRuleCollector::collectMatchingRulesForList(const RuleDataListType* r
|
| if (m_pseudoStyleRequest.pseudoId != NOPSEUDO && m_pseudoStyleRequest.pseudoId != result.dynamicPseudo)
|
| continue;
|
|
|
| - didMatchRule(ruleData, result, cascadeOrder, matchRequest, ruleRange);
|
| + didMatchRule(ruleData, result, cascadeOrder, matchRequest);
|
| }
|
| }
|
|
|
| -void ElementRuleCollector::collectMatchingRules(const MatchRequest& matchRequest, RuleRange& ruleRange, CascadeOrder cascadeOrder, bool matchingTreeBoundaryRules)
|
| +void ElementRuleCollector::collectMatchingRules(const MatchRequest& matchRequest, CascadeOrder cascadeOrder, bool matchingTreeBoundaryRules)
|
| {
|
| ASSERT(matchRequest.ruleSet);
|
| ASSERT(m_context.element());
|
| @@ -175,11 +172,11 @@ void ElementRuleCollector::collectMatchingRules(const MatchRequest& matchRequest
|
| const AtomicString& pseudoId = element.shadowPseudoId();
|
| if (!pseudoId.isEmpty()) {
|
| ASSERT(element.isStyledElement());
|
| - collectMatchingRulesForList(matchRequest.ruleSet->shadowPseudoElementRules(pseudoId), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->shadowPseudoElementRules(pseudoId), cascadeOrder, matchRequest);
|
| }
|
|
|
| if (element.isVTTElement())
|
| - collectMatchingRulesForList(matchRequest.ruleSet->cuePseudoRules(), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->cuePseudoRules(), cascadeOrder, matchRequest);
|
| // Check whether other types of rules are applicable in the current tree scope. Criteria for this:
|
| // a) it's a UA rule
|
| // b) the rules comes from a scoped style sheet within the same tree scope
|
| @@ -192,23 +189,23 @@ void ElementRuleCollector::collectMatchingRules(const MatchRequest& matchRequest
|
| // 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()), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->idRules(element.idForStyleResolution()), cascadeOrder, matchRequest);
|
| if (element.isStyledElement() && element.hasClass()) {
|
| for (size_t i = 0; i < element.classNames().size(); ++i)
|
| - collectMatchingRulesForList(matchRequest.ruleSet->classRules(element.classNames()[i]), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->classRules(element.classNames()[i]), cascadeOrder, matchRequest);
|
| }
|
|
|
| if (element.isLink())
|
| - collectMatchingRulesForList(matchRequest.ruleSet->linkPseudoClassRules(), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->linkPseudoClassRules(), cascadeOrder, matchRequest);
|
| if (SelectorChecker::matchesFocusPseudoClass(element))
|
| - collectMatchingRulesForList(matchRequest.ruleSet->focusPseudoClassRules(), cascadeOrder, matchRequest, ruleRange);
|
| - collectMatchingRulesForList(matchRequest.ruleSet->tagRules(element.localNameForSelectorMatching()), cascadeOrder, matchRequest, ruleRange);
|
| - collectMatchingRulesForList(matchRequest.ruleSet->universalRules(), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->focusPseudoClassRules(), cascadeOrder, matchRequest);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->tagRules(element.localNameForSelectorMatching()), cascadeOrder, matchRequest);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->universalRules(), cascadeOrder, matchRequest);
|
| }
|
|
|
| -void ElementRuleCollector::collectMatchingShadowHostRules(const MatchRequest& matchRequest, RuleRange& ruleRange, CascadeOrder cascadeOrder, bool matchingTreeBoundaryRules)
|
| +void ElementRuleCollector::collectMatchingShadowHostRules(const MatchRequest& matchRequest, CascadeOrder cascadeOrder, bool matchingTreeBoundaryRules)
|
| {
|
| - collectMatchingRulesForList(matchRequest.ruleSet->shadowHostRules(), cascadeOrder, matchRequest, ruleRange);
|
| + collectMatchingRulesForList(matchRequest.ruleSet->shadowHostRules(), cascadeOrder, matchRequest);
|
| }
|
|
|
| template<class CSSRuleCollection>
|
| @@ -272,9 +269,12 @@ void ElementRuleCollector::sortAndTransferMatchedRules()
|
| const RuleData* ruleData = m_matchedRules[i].ruleData();
|
| m_result.addMatchedProperties(&ruleData->rule()->properties(), ruleData->linkMatchType(), ruleData->propertyWhitelistType(m_matchingUARules));
|
| }
|
| +
|
| + if (m_matchingUARules)
|
| + m_result.lastUARuleIndex = m_result.matchedProperties.size() - 1;
|
| }
|
|
|
| -void ElementRuleCollector::didMatchRule(const RuleData& ruleData, const SelectorChecker::MatchResult& result, CascadeOrder cascadeOrder, const MatchRequest& matchRequest, RuleRange& ruleRange)
|
| +void ElementRuleCollector::didMatchRule(const RuleData& ruleData, const SelectorChecker::MatchResult& result, CascadeOrder cascadeOrder, const MatchRequest& matchRequest)
|
| {
|
| PseudoId dynamicPseudo = result.dynamicPseudo;
|
| // If we're matching normal rules, set a pseudo bit if
|
| @@ -289,11 +289,6 @@ void ElementRuleCollector::didMatchRule(const RuleData& ruleData, const Selector
|
| return;
|
| m_style->setHasPseudoStyle(dynamicPseudo);
|
| } else {
|
| - // Update our first/last rule indices in the matched rules array.
|
| - ++ruleRange.lastRuleIndex;
|
| - if (ruleRange.firstRuleIndex == -1)
|
| - ruleRange.firstRuleIndex = ruleRange.lastRuleIndex;
|
| -
|
| if (m_style && ruleData.containsUncommonAttributeSelector())
|
| m_style->setUnique();
|
|
|
| @@ -324,11 +319,9 @@ bool ElementRuleCollector::hasAnyMatchingRules(RuleSet* ruleSet)
|
| // To check whether a given RuleSet has any rule matching a given element,
|
| // should not see the element's treescope. Because RuleSet has no
|
| // information about "scope".
|
| - int firstRuleIndex = -1, lastRuleIndex = -1;
|
| - RuleRange ruleRange(firstRuleIndex, lastRuleIndex);
|
| MatchRequest matchRequest(ruleSet);
|
| - collectMatchingRules(matchRequest, ruleRange);
|
| - collectMatchingShadowHostRules(matchRequest, ruleRange);
|
| + collectMatchingRules(matchRequest);
|
| + collectMatchingShadowHostRules(matchRequest);
|
|
|
| return !m_matchedRules.isEmpty();
|
| }
|
|
|