OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 if (state.element()->hasActiveAnimations()) | 435 if (state.element()->hasActiveAnimations()) |
436 collector.matchedResult().isCacheable = false; | 436 collector.matchedResult().isCacheable = false; |
437 } | 437 } |
438 } | 438 } |
439 | 439 |
440 bool StyleResolver::styleSharingCandidateMatchesRuleSet(const ElementResolveCont
ext& context, RenderStyle* style, RuleSet* ruleSet) | 440 bool StyleResolver::styleSharingCandidateMatchesRuleSet(const ElementResolveCont
ext& context, RenderStyle* style, RuleSet* ruleSet) |
441 { | 441 { |
442 if (!ruleSet) | 442 if (!ruleSet) |
443 return false; | 443 return false; |
444 | 444 |
445 ElementRuleCollector collector(context, m_selectorFilter, style, m_inspector
CSSOMWrappers); | 445 ElementRuleCollector collector(context, m_selectorFilter, style); |
446 return collector.hasAnyMatchingRules(ruleSet); | 446 return collector.hasAnyMatchingRules(ruleSet); |
447 } | 447 } |
448 | 448 |
449 PassRefPtr<RenderStyle> StyleResolver::styleForDocument(const Document* document
, CSSFontSelector* fontSelector) | 449 PassRefPtr<RenderStyle> StyleResolver::styleForDocument(const Document* document
, CSSFontSelector* fontSelector) |
450 { | 450 { |
451 const Frame* frame = document->frame(); | 451 const Frame* frame = document->frame(); |
452 | 452 |
453 // HTML5 states that seamless iframes should replace default CSS values | 453 // HTML5 states that seamless iframes should replace default CSS values |
454 // with values inherited from the containing iframe element. However, | 454 // with values inherited from the containing iframe element. However, |
455 // some values (such as the case of designMode = "on") still need to | 455 // some values (such as the case of designMode = "on") still need to |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 } | 590 } |
591 | 591 |
592 bool needsCollection = false; | 592 bool needsCollection = false; |
593 CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement(element, needsColl
ection); | 593 CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement(element, needsColl
ection); |
594 if (needsCollection) { | 594 if (needsCollection) { |
595 collectFeatures(); | 595 collectFeatures(); |
596 m_inspectorCSSOMWrappers.reset(); | 596 m_inspectorCSSOMWrappers.reset(); |
597 } | 597 } |
598 | 598 |
599 { | 599 { |
600 ElementRuleCollector collector(state.elementContext(), m_selectorFilter,
state.style(), m_inspectorCSSOMWrappers); | 600 ElementRuleCollector collector(state.elementContext(), m_selectorFilter,
state.style()); |
601 collector.setRegionForStyling(regionForStyling); | 601 collector.setRegionForStyling(regionForStyling); |
602 | 602 |
603 if (matchingBehavior == MatchOnlyUserAgentRules) | 603 if (matchingBehavior == MatchOnlyUserAgentRules) |
604 matchUARules(collector); | 604 matchUARules(collector); |
605 else | 605 else |
606 matchAllRules(state, collector, m_matchAuthorAndUserStyles, matching
Behavior != MatchAllRulesExcludingSMIL); | 606 matchAllRules(state, collector, m_matchAuthorAndUserStyles, matching
Behavior != MatchAllRulesExcludingSMIL); |
607 | 607 |
608 applyMatchedProperties(state, collector.matchedResult()); | 608 applyMatchedProperties(state, collector.matchedResult()); |
609 } | 609 } |
610 { | 610 { |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
779 state.setParentStyle(RenderStyle::clone(state.style())); | 779 state.setParentStyle(RenderStyle::clone(state.style())); |
780 } | 780 } |
781 | 781 |
782 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta
te.useSVGZoomRules()); | 782 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta
te.useSVGZoomRules()); |
783 | 783 |
784 // Since we don't use pseudo-elements in any of our quirk/print | 784 // Since we don't use pseudo-elements in any of our quirk/print |
785 // user agent rules, don't waste time walking those rules. | 785 // user agent rules, don't waste time walking those rules. |
786 | 786 |
787 { | 787 { |
788 // Check UA, user and author rules. | 788 // Check UA, user and author rules. |
789 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style(), m_inspectorCSSOMWrappers); | 789 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style()); |
790 collector.setPseudoStyleRequest(pseudoStyleRequest); | 790 collector.setPseudoStyleRequest(pseudoStyleRequest); |
791 | 791 |
792 matchUARules(collector); | 792 matchUARules(collector); |
793 if (m_matchAuthorAndUserStyles) { | 793 if (m_matchAuthorAndUserStyles) { |
794 matchUserRules(collector, false); | 794 matchUserRules(collector, false); |
795 matchAuthorRules(state.element(), collector, false); | 795 matchAuthorRules(state.element(), collector, false); |
796 } | 796 } |
797 | 797 |
798 if (collector.matchedResult().matchedProperties.isEmpty()) | 798 if (collector.matchedResult().matchedProperties.isEmpty()) |
799 return 0; | 799 return 0; |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
942 | 942 |
943 PassRefPtr<CSSRuleList> StyleResolver::pseudoStyleRulesForElement(Element* e, Ps
eudoId pseudoId, unsigned rulesToInclude) | 943 PassRefPtr<CSSRuleList> StyleResolver::pseudoStyleRulesForElement(Element* e, Ps
eudoId pseudoId, unsigned rulesToInclude) |
944 { | 944 { |
945 if (!e || !e->document()->haveStylesheetsLoaded()) | 945 if (!e || !e->document()->haveStylesheetsLoaded()) |
946 return 0; | 946 return 0; |
947 | 947 |
948 if (e == document()->documentElement()) | 948 if (e == document()->documentElement()) |
949 resetDirectionAndWritingModeOnDocument(document()); | 949 resetDirectionAndWritingModeOnDocument(document()); |
950 StyleResolverState state(document(), e); | 950 StyleResolverState state(document(), e); |
951 | 951 |
952 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style(), m_inspectorCSSOMWrappers); | 952 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta
te.style()); |
953 collector.setMode(SelectorChecker::CollectingRules); | 953 collector.setMode(SelectorChecker::CollectingRules); |
954 collector.setPseudoStyleRequest(PseudoStyleRequest(pseudoId)); | 954 collector.setPseudoStyleRequest(PseudoStyleRequest(pseudoId)); |
955 | 955 |
956 if (rulesToInclude & UAAndUserCSSRules) { | 956 if (rulesToInclude & UAAndUserCSSRules) { |
957 // First we match rules from the user agent sheet. | 957 // First we match rules from the user agent sheet. |
958 matchUARules(collector); | 958 matchUARules(collector); |
959 | 959 |
960 // Now we check user sheet rules. | 960 // Now we check user sheet rules. |
961 if (m_matchAuthorAndUserStyles) | 961 if (m_matchAuthorAndUserStyles) |
962 matchUserRules(collector, rulesToInclude & EmptyCSSRules); | 962 matchUserRules(collector, rulesToInclude & EmptyCSSRules); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1115 return property > lastHighPriorityProperty; | 1115 return property > lastHighPriorityProperty; |
1116 } | 1116 } |
1117 ASSERT_NOT_REACHED(); | 1117 ASSERT_NOT_REACHED(); |
1118 return false; | 1118 return false; |
1119 } | 1119 } |
1120 | 1120 |
1121 template <StyleResolver::StyleApplicationPass pass> | 1121 template <StyleResolver::StyleApplicationPass pass> |
1122 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper
tySet* properties, StyleRule* rule, bool isImportant, bool inheritedOnly, Proper
tyWhitelistType propertyWhitelistType) | 1122 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper
tySet* properties, StyleRule* rule, bool isImportant, bool inheritedOnly, Proper
tyWhitelistType propertyWhitelistType) |
1123 { | 1123 { |
1124 ASSERT((propertyWhitelistType != PropertyWhitelistRegion) || state.regionFor
Styling()); | 1124 ASSERT((propertyWhitelistType != PropertyWhitelistRegion) || state.regionFor
Styling()); |
1125 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willProces
sRule(document(), rule, this); | |
1126 | 1125 |
1127 unsigned propertyCount = properties->propertyCount(); | 1126 unsigned propertyCount = properties->propertyCount(); |
1128 for (unsigned i = 0; i < propertyCount; ++i) { | 1127 for (unsigned i = 0; i < propertyCount; ++i) { |
1129 StylePropertySet::PropertyReference current = properties->propertyAt(i); | 1128 StylePropertySet::PropertyReference current = properties->propertyAt(i); |
1130 if (isImportant != current.isImportant()) | 1129 if (isImportant != current.isImportant()) |
1131 continue; | 1130 continue; |
1132 if (inheritedOnly && !current.isInherited()) { | 1131 if (inheritedOnly && !current.isInherited()) { |
1133 // If the property value is explicitly inherited, we need to apply f
urther non-inherited properties | 1132 // If the property value is explicitly inherited, we need to apply f
urther non-inherited properties |
1134 // as they might override the value inherited here. For this reason
we don't allow declarations with | 1133 // as they might override the value inherited here. For this reason
we don't allow declarations with |
1135 // explicitly inherited properties to be cached. | 1134 // explicitly inherited properties to be cached. |
1136 ASSERT(!current.value()->isInheritedValue()); | 1135 ASSERT(!current.value()->isInheritedValue()); |
1137 continue; | 1136 continue; |
1138 } | 1137 } |
1139 CSSPropertyID property = current.id(); | 1138 CSSPropertyID property = current.id(); |
1140 | 1139 |
1141 if (propertyWhitelistType == PropertyWhitelistRegion && !isValidRegionSt
yleProperty(property)) | 1140 if (propertyWhitelistType == PropertyWhitelistRegion && !isValidRegionSt
yleProperty(property)) |
1142 continue; | 1141 continue; |
1143 if (propertyWhitelistType == PropertyWhitelistCue && !isValidCueStylePro
perty(property)) | 1142 if (propertyWhitelistType == PropertyWhitelistCue && !isValidCueStylePro
perty(property)) |
1144 continue; | 1143 continue; |
1145 if (!isPropertyForPass<pass>(property)) | 1144 if (!isPropertyForPass<pass>(property)) |
1146 continue; | 1145 continue; |
1147 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight) | 1146 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight) |
1148 state.setLineHeightValue(current.value()); | 1147 state.setLineHeightValue(current.value()); |
1149 else | 1148 else |
1150 applyProperty(state, current.id(), current.value()); | 1149 applyProperty(state, current.id(), current.value()); |
1151 } | 1150 } |
1152 InspectorInstrumentation::didProcessRule(cookie); | |
1153 } | 1151 } |
1154 | 1152 |
1155 template <StyleResolver::StyleApplicationPass pass> | 1153 template <StyleResolver::StyleApplicationPass pass> |
1156 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
hResult& matchResult, bool isImportant, int startIndex, int endIndex, bool inher
itedOnly) | 1154 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
hResult& matchResult, bool isImportant, int startIndex, int endIndex, bool inher
itedOnly) |
1157 { | 1155 { |
1158 if (startIndex == -1) | 1156 if (startIndex == -1) |
1159 return; | 1157 return; |
1160 | 1158 |
1161 if (state.style()->insideLink() != NotInsideLink) { | 1159 if (state.style()->insideLink() != NotInsideLink) { |
1162 for (int i = startIndex; i <= endIndex; ++i) { | 1160 for (int i = startIndex; i <= endIndex; ++i) { |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1460 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties
SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa
che); | 1458 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties
SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa
che); |
1461 | 1459 |
1462 fprintf(stderr, "Total:\n"); | 1460 fprintf(stderr, "Total:\n"); |
1463 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS
tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, | 1461 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS
tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, |
1464 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa
tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch
edPropertiesEnteredIntoCache); | 1462 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa
tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch
edPropertiesEnteredIntoCache); |
1465 fprintf(stderr, "-----------------------------------------------------------
---------------------\n"); | 1463 fprintf(stderr, "-----------------------------------------------------------
---------------------\n"); |
1466 } | 1464 } |
1467 #endif | 1465 #endif |
1468 | 1466 |
1469 } // namespace WebCore | 1467 } // namespace WebCore |
OLD | NEW |