| Index: Source/core/css/resolver/StyleResolver.cpp
|
| diff --git a/Source/core/css/resolver/StyleResolver.cpp b/Source/core/css/resolver/StyleResolver.cpp
|
| index 222dca9a1fa28d7ed8faf2347d7ad77d915c9588..05be031ae7d41afffdbc457cfdd350f31c82d221 100644
|
| --- a/Source/core/css/resolver/StyleResolver.cpp
|
| +++ b/Source/core/css/resolver/StyleResolver.cpp
|
| @@ -404,8 +404,6 @@ inline void StyleResolver::collectTreeBoundaryCrossingRules(Element* element, El
|
| if (m_treeBoundaryCrossingRules.isEmpty())
|
| return;
|
|
|
| - RuleRange ruleRange = collector.matchedResult().ranges.authorRuleRange();
|
| -
|
| // When comparing rules declared in outer treescopes, outer's rules win.
|
| CascadeOrder outerCascadeOrder = m_treeBoundaryCrossingRules.size() + m_treeBoundaryCrossingRules.size();
|
| // When comparing rules declared in inner treescopes, inner's rules win.
|
| @@ -426,8 +424,7 @@ inline void StyleResolver::collectTreeBoundaryCrossingRules(Element* element, El
|
| }
|
|
|
| CascadeOrder cascadeOrder = isInnerTreeScope ? innerCascadeOrder : outerCascadeOrder;
|
| -
|
| - collector.collectMatchingRules(MatchRequest(ruleSet, includeEmptyRules, scopingNode), ruleRange, static_cast<SelectorChecker::BehaviorAtBoundary>(boundaryBehavior), ignoreCascadeScope, cascadeOrder);
|
| + collector.collectMatchingRules(MatchRequest(ruleSet, includeEmptyRules, scopingNode), collector.matchedResult().ranges.authorRuleRange(), static_cast<SelectorChecker::BehaviorAtBoundary>(boundaryBehavior), ignoreCascadeScope, cascadeOrder);
|
| ++innerCascadeOrder;
|
| --outerCascadeOrder;
|
| }
|
| @@ -441,7 +438,7 @@ static inline bool applyAuthorStylesOf(const Element* element)
|
| void StyleResolver::matchAuthorRulesForShadowHost(Element* element, ElementRuleCollector& collector, bool includeEmptyRules, Vector<ScopedStyleResolver*, 8>& resolvers, Vector<ScopedStyleResolver*, 8>& resolversInShadowTree)
|
| {
|
| collector.clearMatchedRules();
|
| - collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().matchedProperties.size() - 1;
|
| + collector.matchedResult().ranges.authorRuleRange().setLast(collector.matchedResult().matchedProperties.size() - 1);
|
|
|
| CascadeScope cascadeScope = 0;
|
| CascadeOrder cascadeOrder = 0;
|
| @@ -463,7 +460,7 @@ void StyleResolver::matchAuthorRulesForShadowHost(Element* element, ElementRuleC
|
| void StyleResolver::matchAuthorRules(Element* element, ElementRuleCollector& collector, bool includeEmptyRules)
|
| {
|
| collector.clearMatchedRules();
|
| - collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult().matchedProperties.size() - 1;
|
| + collector.matchedResult().ranges.authorRuleRange().setLast(collector.matchedResult().matchedProperties.size() - 1);
|
|
|
| bool applyAuthorStyles = applyAuthorStylesOf(element);
|
| if (m_styleTree.hasOnlyScopedResolverForDocument()) {
|
| @@ -504,12 +501,10 @@ void StyleResolver::matchWatchSelectorRules(ElementRuleCollector& collector)
|
| return;
|
|
|
| collector.clearMatchedRules();
|
| - collector.matchedResult().ranges.lastUserRule = collector.matchedResult().matchedProperties.size() - 1;
|
| + collector.matchedResult().ranges.userRuleRange().setLast(collector.matchedResult().matchedProperties.size() - 1);
|
|
|
| MatchRequest matchRequest(m_watchedSelectorsRules.get());
|
| - RuleRange ruleRange = collector.matchedResult().ranges.userRuleRange();
|
| - collector.collectMatchingRules(matchRequest, ruleRange);
|
| -
|
| + collector.collectMatchingRules(matchRequest, collector.matchedResult().ranges.userRuleRange());
|
| collector.sortAndTransferMatchedRules();
|
| }
|
|
|
| @@ -538,11 +533,8 @@ void StyleResolver::matchUARules(ElementRuleCollector& collector)
|
| void StyleResolver::matchUARules(ElementRuleCollector& collector, RuleSet* rules)
|
| {
|
| collector.clearMatchedRules();
|
| - collector.matchedResult().ranges.lastUARule = collector.matchedResult().matchedProperties.size() - 1;
|
| -
|
| - RuleRange ruleRange = collector.matchedResult().ranges.UARuleRange();
|
| - collector.collectMatchingRules(MatchRequest(rules), ruleRange);
|
| -
|
| + collector.matchedResult().ranges.UARuleRange().setLast(collector.matchedResult().matchedProperties.size() - 1);
|
| + collector.collectMatchingRules(MatchRequest(rules), collector.matchedResult().ranges.UARuleRange());
|
| collector.sortAndTransferMatchedRules();
|
| }
|
|
|
| @@ -766,8 +758,8 @@ PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* element, const
|
| // We don't need to bother with !important. Since there is only ever one
|
| // decl, there's nothing to override. So just add the first properties.
|
| bool inheritedOnly = false;
|
| - applyMatchedProperties<AnimationProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly);
|
| - applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly);
|
| + applyMatchedProperties<AnimationProperties>(state, result, false, RuleRange(0, result.matchedProperties.size() - 1), inheritedOnly);
|
| + applyMatchedProperties<HighPriorityProperties>(state, result, false, RuleRange(0, result.matchedProperties.size() - 1), inheritedOnly);
|
|
|
| // If our font got dirtied, go ahead and update it now.
|
| updateFont(state);
|
| @@ -777,7 +769,7 @@ PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* element, const
|
| StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeightValue());
|
|
|
| // Now do rest of the properties.
|
| - applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, result, false, RuleRange(0, result.matchedProperties.size() - 1), inheritedOnly);
|
|
|
| // If our font got dirtied by one of the non-essential font props,
|
| // go ahead and update it a second time.
|
| @@ -948,7 +940,7 @@ PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex)
|
| bool inheritedOnly = false;
|
|
|
| MatchResult& result = collector.matchedResult();
|
| - applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly);
|
| + applyMatchedProperties<HighPriorityProperties>(state, result, false, RuleRange(0, result.matchedProperties.size() - 1), inheritedOnly);
|
|
|
| // If our font got dirtied, go ahead and update it now.
|
| updateFont(state);
|
| @@ -957,7 +949,7 @@ PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex)
|
| if (state.lineHeightValue())
|
| StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeightValue());
|
|
|
| - applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, result, false, RuleRange(0, result.matchedProperties.size() - 1), inheritedOnly);
|
|
|
| addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
|
|
|
| @@ -1210,13 +1202,13 @@ void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper
|
| }
|
|
|
| template <StyleResolver::StyleApplicationPass pass>
|
| -void StyleResolver::applyMatchedProperties(StyleResolverState& state, const MatchResult& matchResult, bool isImportant, int startIndex, int endIndex, bool inheritedOnly)
|
| +void StyleResolver::applyMatchedProperties(StyleResolverState& state, const MatchResult& matchResult, bool isImportant, const RuleRange& range, bool inheritedOnly)
|
| {
|
| - if (startIndex == -1)
|
| + if (range.collapsed())
|
| return;
|
|
|
| if (state.style()->insideLink() != NotInsideLink) {
|
| - for (int i = startIndex; i <= endIndex; ++i) {
|
| + for (int i = range.first(); i <= range.last(); ++i) {
|
| const MatchedProperties& matchedProperties = matchResult.matchedProperties[i];
|
| unsigned linkMatchType = matchedProperties.linkMatchType;
|
| // FIXME: It would be nicer to pass these as arguments but that requires changes in many places.
|
| @@ -1229,7 +1221,7 @@ void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
|
| state.setApplyPropertyToVisitedLinkStyle(false);
|
| return;
|
| }
|
| - for (int i = startIndex; i <= endIndex; ++i) {
|
| + for (int i = range.first(); i <= range.last(); ++i) {
|
| const MatchedProperties& matchedProperties = matchResult.matchedProperties[i];
|
| applyProperties<pass>(state, matchedProperties.properties.get(), matchResult.matchedRules[i], isImportant, inheritedOnly, static_cast<PropertyWhitelistType>(matchedProperties.whitelistType));
|
| }
|
| @@ -1286,10 +1278,10 @@ void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
|
| }
|
|
|
| // Apply animation properties in order to apply animation results and trigger transitions below.
|
| - applyMatchedProperties<AnimationProperties>(state, matchResult, false, 0, matchResult.matchedProperties.size() - 1, applyInheritedOnly);
|
| - applyMatchedProperties<AnimationProperties>(state, matchResult, true, matchResult.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInheritedOnly);
|
| - applyMatchedProperties<AnimationProperties>(state, matchResult, true, matchResult.ranges.firstUserRule, matchResult.ranges.lastUserRule, applyInheritedOnly);
|
| - applyMatchedProperties<AnimationProperties>(state, matchResult, true, matchResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
|
| + applyMatchedProperties<AnimationProperties>(state, matchResult, false, RuleRange(0, matchResult.matchedProperties.size() - 1), applyInheritedOnly);
|
| + applyMatchedProperties<AnimationProperties>(state, matchResult, true, matchResult.ranges.authorRuleRange(), applyInheritedOnly);
|
| + applyMatchedProperties<AnimationProperties>(state, matchResult, true, matchResult.ranges.userRuleRange(), applyInheritedOnly);
|
| + applyMatchedProperties<AnimationProperties>(state, matchResult, true, matchResult.ranges.UARuleRange(), applyInheritedOnly);
|
|
|
| // Match transition-property / animation-name length by trimming and
|
| // lengthening other transition / animation property lists
|
| @@ -1302,10 +1294,10 @@ void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
|
| // The order is (1) high-priority not important, (2) high-priority important, (3) normal not important
|
| // and (4) normal important.
|
| state.setLineHeightValue(0);
|
| - applyMatchedProperties<HighPriorityProperties>(state, matchResult, false, 0, matchResult.matchedProperties.size() - 1, applyInheritedOnly);
|
| - applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, matchResult.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInheritedOnly);
|
| - applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, matchResult.ranges.firstUserRule, matchResult.ranges.lastUserRule, applyInheritedOnly);
|
| - applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, matchResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
|
| + applyMatchedProperties<HighPriorityProperties>(state, matchResult, false, RuleRange(0, matchResult.matchedProperties.size() - 1), applyInheritedOnly);
|
| + applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, matchResult.ranges.authorRuleRange(), applyInheritedOnly);
|
| + applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, matchResult.ranges.userRuleRange(), applyInheritedOnly);
|
| + applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, matchResult.ranges.UARuleRange(), applyInheritedOnly);
|
|
|
| if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->effectiveZoom() != state.style()->effectiveZoom()) {
|
| state.fontBuilder().setFontDirty(true);
|
| @@ -1324,16 +1316,16 @@ void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
|
| applyInheritedOnly = false;
|
|
|
| // Now do the normal priority UA properties.
|
| - applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, matchResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, matchResult.ranges.UARuleRange(), applyInheritedOnly);
|
|
|
| // Cache the UA properties to pass them to RenderTheme in adjustRenderStyle.
|
| state.cacheUserAgentBorderAndBackground();
|
|
|
| // Now do the author and user normal priority properties and all the !important properties.
|
| - applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, matchResult.ranges.lastUARule + 1, matchResult.matchedProperties.size() - 1, applyInheritedOnly);
|
| - applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matchResult.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInheritedOnly);
|
| - applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matchResult.ranges.firstUserRule, matchResult.ranges.lastUserRule, applyInheritedOnly);
|
| - applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matchResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, RuleRange(matchResult.ranges.UARuleRange().last() + 1, matchResult.matchedProperties.size() - 1), applyInheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matchResult.ranges.authorRuleRange(), applyInheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matchResult.ranges.userRuleRange(), applyInheritedOnly);
|
| + applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matchResult.ranges.UARuleRange(), applyInheritedOnly);
|
|
|
| loadPendingResources(state);
|
|
|
|
|