Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(841)

Side by Side Diff: Source/core/css/resolver/StyleResolver.cpp

Issue 66383005: Remove the concept of user stylesheets. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 168
169 if (root) 169 if (root)
170 m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, Matc hOnlyUserAgentRules); 170 m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, Matc hOnlyUserAgentRules);
171 171
172 if (m_rootDefaultStyle && view) 172 if (m_rootDefaultStyle && view)
173 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), &view->fr ame(), m_rootDefaultStyle.get())); 173 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), &view->fr ame(), m_rootDefaultStyle.get()));
174 174
175 m_styleTree.clear(); 175 m_styleTree.clear();
176 176
177 StyleEngine* styleSheetCollection = document.styleEngine(); 177 StyleEngine* styleSheetCollection = document.styleEngine();
178 m_ruleSets.initUserStyle(styleSheetCollection, CSSSelectorWatch::from(docume nt).watchedCallbackSelectors(), *m_medium, *this);
179 178
180 #if ENABLE(SVG_FONTS) 179 #if ENABLE(SVG_FONTS)
181 if (document.svgExtensions()) { 180 if (document.svgExtensions()) {
182 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document.svgEx tensions()->svgFontFaceElements(); 181 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document.svgEx tensions()->svgFontFaceElements();
183 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e nd(); 182 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e nd();
184 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen ts.begin(); it != end; ++it) 183 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen ts.begin(); it != end; ++it)
185 fontSelector()->addFontFaceRule((*it)->fontFaceRule()); 184 fontSelector()->addFontFaceRule((*it)->fontFaceRule());
186 } 185 }
187 #endif 186 #endif
188 187
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 // FIXME: Need to clarify how to treat style scoped. 472 // FIXME: Need to clarify how to treat style scoped.
474 resolver->collectMatchingAuthorRules(collector, includeEmptyRules, apply AuthorStyles, cascadeScope++, resolver->treeScope() == element->treeScope() && r esolver->scopingNode().isShadowRoot() ? 0 : cascadeOrder); 473 resolver->collectMatchingAuthorRules(collector, includeEmptyRules, apply AuthorStyles, cascadeScope++, resolver->treeScope() == element->treeScope() && r esolver->scopingNode().isShadowRoot() ? 0 : cascadeOrder);
475 } 474 }
476 475
477 collectTreeBoundaryCrossingRules(collector, includeEmptyRules); 476 collectTreeBoundaryCrossingRules(collector, includeEmptyRules);
478 collector.sortAndTransferMatchedRules(); 477 collector.sortAndTransferMatchedRules();
479 478
480 matchHostRules(element, resolvers.first(), collector, includeEmptyRules); 479 matchHostRules(element, resolvers.first(), collector, includeEmptyRules);
481 } 480 }
482 481
483 void StyleResolver::matchUserRules(ElementRuleCollector& collector, bool include EmptyRules)
484 {
485 if (!m_ruleSets.userStyle())
486 return;
487
488 collector.clearMatchedRules();
489 collector.matchedResult().ranges.lastUserRule = collector.matchedResult().ma tchedProperties.size() - 1;
490
491 MatchRequest matchRequest(m_ruleSets.userStyle(), includeEmptyRules);
492 RuleRange ruleRange = collector.matchedResult().ranges.userRuleRange();
493 collector.collectMatchingRules(matchRequest, ruleRange);
494 collector.collectMatchingRulesForRegion(matchRequest, ruleRange);
495
496 collector.sortAndTransferMatchedRules();
497 }
498
499 void StyleResolver::matchUARules(ElementRuleCollector& collector) 482 void StyleResolver::matchUARules(ElementRuleCollector& collector)
500 { 483 {
501 collector.setMatchingUARules(true); 484 collector.setMatchingUARules(true);
502 485
503 // First we match rules from the user agent sheet. 486 // First we match rules from the user agent sheet.
504 if (CSSDefaultStyleSheets::simpleDefaultStyleSheet) 487 if (CSSDefaultStyleSheets::simpleDefaultStyleSheet)
505 collector.matchedResult().isCacheable = false; 488 collector.matchedResult().isCacheable = false;
506 489
507 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print") 490 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print")
508 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defa ultStyle; 491 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defa ultStyle;
(...skipping 18 matching lines...) Expand all
527 RuleRange ruleRange = collector.matchedResult().ranges.UARuleRange(); 510 RuleRange ruleRange = collector.matchedResult().ranges.UARuleRange();
528 collector.collectMatchingRules(MatchRequest(rules), ruleRange); 511 collector.collectMatchingRules(MatchRequest(rules), ruleRange);
529 512
530 collector.sortAndTransferMatchedRules(); 513 collector.sortAndTransferMatchedRules();
531 } 514 }
532 515
533 void StyleResolver::matchAllRules(StyleResolverState& state, ElementRuleCollecto r& collector, bool matchAuthorAndUserStyles, bool includeSMILProperties) 516 void StyleResolver::matchAllRules(StyleResolverState& state, ElementRuleCollecto r& collector, bool matchAuthorAndUserStyles, bool includeSMILProperties)
534 { 517 {
535 matchUARules(collector); 518 matchUARules(collector);
536 519
537 // Now we check user sheet rules.
538 if (matchAuthorAndUserStyles)
539 matchUserRules(collector, false);
540
541 // Now check author rules, beginning first with presentational attributes ma pped from HTML. 520 // Now check author rules, beginning first with presentational attributes ma pped from HTML.
542 if (state.element()->isStyledElement()) { 521 if (state.element()->isStyledElement()) {
543 collector.addElementStyleProperties(state.element()->presentationAttribu teStyle()); 522 collector.addElementStyleProperties(state.element()->presentationAttribu teStyle());
544 523
545 // Now we check additional mapped declarations. 524 // Now we check additional mapped declarations.
546 // Tables and table cells share an additional mapped rule that must be a pplied 525 // Tables and table cells share an additional mapped rule that must be a pplied
547 // after all attributes, since their mapped style depends on the values of multiple attributes. 526 // after all attributes, since their mapped style depends on the values of multiple attributes.
548 collector.addElementStyleProperties(state.element()->additionalPresentat ionAttributeStyle()); 527 collector.addElementStyleProperties(state.element()->additionalPresentat ionAttributeStyle());
549 528
550 if (state.element()->isHTMLElement()) { 529 if (state.element()->isHTMLElement()) {
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 1015
1037 // Since we don't use pseudo-elements in any of our quirk/print 1016 // Since we don't use pseudo-elements in any of our quirk/print
1038 // user agent rules, don't waste time walking those rules. 1017 // user agent rules, don't waste time walking those rules.
1039 1018
1040 { 1019 {
1041 // Check UA, user and author rules. 1020 // Check UA, user and author rules.
1042 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style()); 1021 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style());
1043 collector.setPseudoStyleRequest(pseudoStyleRequest); 1022 collector.setPseudoStyleRequest(pseudoStyleRequest);
1044 1023
1045 matchUARules(collector); 1024 matchUARules(collector);
1046 if (m_matchAuthorAndUserStyles) { 1025 if (m_matchAuthorAndUserStyles)
1047 matchUserRules(collector, false);
1048 matchAuthorRules(state.element(), collector, false); 1026 matchAuthorRules(state.element(), collector, false);
1049 }
1050 1027
1051 if (collector.matchedResult().matchedProperties.isEmpty()) 1028 if (collector.matchedResult().matchedProperties.isEmpty())
1052 return 0; 1029 return 0;
1053 1030
1054 state.style()->setStyleType(pseudoStyleRequest.pseudoId); 1031 state.style()->setStyleType(pseudoStyleRequest.pseudoId);
1055 1032
1056 applyMatchedProperties(state, collector.matchedResult(), e->pseudoElemen t(pseudoStyleRequest.pseudoId)); 1033 applyMatchedProperties(state, collector.matchedResult(), e->pseudoElemen t(pseudoStyleRequest.pseudoId));
1057 1034
1058 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features); 1035 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
1059 } 1036 }
(...skipping 21 matching lines...) Expand all
1081 state.setStyle(RenderStyle::create()); 1058 state.setStyle(RenderStyle::create());
1082 const RenderStyle* rootElementStyle = state.rootElementStyle() ? state.rootE lementStyle() : document().renderStyle(); 1059 const RenderStyle* rootElementStyle = state.rootElementStyle() ? state.rootE lementStyle() : document().renderStyle();
1083 ASSERT(rootElementStyle); 1060 ASSERT(rootElementStyle);
1084 state.style()->inheritFrom(rootElementStyle); 1061 state.style()->inheritFrom(rootElementStyle);
1085 1062
1086 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules()); 1063 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules());
1087 1064
1088 PageRuleCollector collector(rootElementStyle, pageIndex); 1065 PageRuleCollector collector(rootElementStyle, pageIndex);
1089 1066
1090 collector.matchPageRules(CSSDefaultStyleSheets::defaultPrintStyle); 1067 collector.matchPageRules(CSSDefaultStyleSheets::defaultPrintStyle);
1091 collector.matchPageRules(m_ruleSets.userStyle());
1092 1068
1093 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) 1069 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document())
1094 scopedResolver->matchPageRules(collector); 1070 scopedResolver->matchPageRules(collector);
1095 1071
1096 state.setLineHeightValue(0); 1072 state.setLineHeightValue(0);
1097 bool inheritedOnly = false; 1073 bool inheritedOnly = false;
1098 1074
1099 MatchResult& result = collector.matchedResult(); 1075 MatchResult& result = collector.matchedResult();
1100 applyMatchedProperties<VariableDefinitions>(state, result, false, 0, result. matchedProperties.size() - 1, inheritedOnly); 1076 applyMatchedProperties<VariableDefinitions>(state, result, false, 0, result. matchedProperties.size() - 1, inheritedOnly);
1101 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, resu lt.matchedProperties.size() - 1, inheritedOnly); 1077 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, resu lt.matchedProperties.size() - 1, inheritedOnly);
(...skipping 18 matching lines...) Expand all
1120 return state.takeStyle(); 1096 return state.takeStyle();
1121 } 1097 }
1122 1098
1123 void StyleResolver::collectViewportRules() 1099 void StyleResolver::collectViewportRules()
1124 { 1100 {
1125 viewportStyleResolver()->collectViewportRules(CSSDefaultStyleSheets::default Style, ViewportStyleResolver::UserAgentOrigin); 1101 viewportStyleResolver()->collectViewportRules(CSSDefaultStyleSheets::default Style, ViewportStyleResolver::UserAgentOrigin);
1126 1102
1127 if (document().isMobileDocument()) 1103 if (document().isMobileDocument())
1128 viewportStyleResolver()->collectViewportRules(CSSDefaultStyleSheets::xht mlMobileProfileStyle(), ViewportStyleResolver::UserAgentOrigin); 1104 viewportStyleResolver()->collectViewportRules(CSSDefaultStyleSheets::xht mlMobileProfileStyle(), ViewportStyleResolver::UserAgentOrigin);
1129 1105
1130 if (m_ruleSets.userStyle())
1131 viewportStyleResolver()->collectViewportRules(m_ruleSets.userStyle(), Vi ewportStyleResolver::UserAgentOrigin);
1132
1133 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) 1106 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document())
1134 scopedResolver->collectViewportRulesTo(this); 1107 scopedResolver->collectViewportRulesTo(this);
1135 1108
1136 viewportStyleResolver()->resolve(); 1109 viewportStyleResolver()->resolve();
1137 } 1110 }
1138 1111
1139 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() 1112 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement()
1140 { 1113 {
1141 StyleResolverState state(document(), 0); 1114 StyleResolverState state(document(), 0);
1142 state.setStyle(RenderStyle::create()); 1115 state.setStyle(RenderStyle::create());
(...skipping 13 matching lines...) Expand all
1156 Node* parentNode = NodeRenderingTraversal::parent(textNode, &parentDetails); 1129 Node* parentNode = NodeRenderingTraversal::parent(textNode, &parentDetails);
1157 if (!parentNode || !parentNode->renderStyle() || parentDetails.resetStyleInh eritance()) 1130 if (!parentNode || !parentNode->renderStyle() || parentDetails.resetStyleInh eritance())
1158 return defaultStyleForElement(); 1131 return defaultStyleForElement();
1159 return parentNode->renderStyle(); 1132 return parentNode->renderStyle();
1160 } 1133 }
1161 1134
1162 bool StyleResolver::checkRegionStyle(Element* regionElement) 1135 bool StyleResolver::checkRegionStyle(Element* regionElement)
1163 { 1136 {
1164 // FIXME (BUG 72472): We don't add @-webkit-region rules of scoped style she ets for the moment, 1137 // FIXME (BUG 72472): We don't add @-webkit-region rules of scoped style she ets for the moment,
1165 // so all region rules are global by default. Verify whether that can stand or needs changing. 1138 // so all region rules are global by default. Verify whether that can stand or needs changing.
1166 1139 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) {
1167 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document())
1168 if (scopedResolver->checkRegionStyle(regionElement)) 1140 if (scopedResolver->checkRegionStyle(regionElement))
1169 return true; 1141 return true;
1170
1171 if (m_ruleSets.userStyle()) {
1172 unsigned rulesSize = m_ruleSets.userStyle()->m_regionSelectorsAndRuleSet s.size();
1173 for (unsigned i = 0; i < rulesSize; ++i) {
1174 ASSERT(m_ruleSets.userStyle()->m_regionSelectorsAndRuleSets.at(i).ru leSet.get());
1175 if (checkRegionSelector(m_ruleSets.userStyle()->m_regionSelectorsAnd RuleSets.at(i).selector, regionElement))
1176 return true;
1177 }
1178 } 1142 }
1179
1180 return false; 1143 return false;
1181 } 1144 }
1182 1145
1183 void StyleResolver::updateFont(StyleResolverState& state) 1146 void StyleResolver::updateFont(StyleResolverState& state)
1184 { 1147 {
1185 state.fontBuilder().createFont(m_fontSelector, state.parentStyle(), state.st yle()); 1148 state.fontBuilder().createFont(m_fontSelector, state.parentStyle(), state.st yle());
1186 } 1149 }
1187 1150
1188 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude) 1151 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude)
1189 { 1152 {
(...skipping 20 matching lines...) Expand all
1210 return pseudoCSSRulesForElement(element, NOPSEUDO, rulesToInclude, includeDo cument); 1173 return pseudoCSSRulesForElement(element, NOPSEUDO, rulesToInclude, includeDo cument);
1211 } 1174 }
1212 1175
1213 void StyleResolver::collectPseudoRulesForElement(Element* element, ElementRuleCo llector& collector, PseudoId pseudoId, unsigned rulesToInclude) 1176 void StyleResolver::collectPseudoRulesForElement(Element* element, ElementRuleCo llector& collector, PseudoId pseudoId, unsigned rulesToInclude)
1214 { 1177 {
1215 collector.setPseudoStyleRequest(PseudoStyleRequest(pseudoId)); 1178 collector.setPseudoStyleRequest(PseudoStyleRequest(pseudoId));
1216 1179
1217 if (rulesToInclude & UAAndUserCSSRules) { 1180 if (rulesToInclude & UAAndUserCSSRules) {
1218 // First we match rules from the user agent sheet. 1181 // First we match rules from the user agent sheet.
1219 matchUARules(collector); 1182 matchUARules(collector);
1220
1221 // Now we check user sheet rules.
1222 if (m_matchAuthorAndUserStyles)
1223 matchUserRules(collector, rulesToInclude & EmptyCSSRules);
1224 } 1183 }
1225 1184
1226 if (m_matchAuthorAndUserStyles && (rulesToInclude & AuthorCSSRules)) { 1185 if (m_matchAuthorAndUserStyles && (rulesToInclude & AuthorCSSRules)) {
1227 collector.setSameOriginOnly(!(rulesToInclude & CrossOriginCSSRules)); 1186 collector.setSameOriginOnly(!(rulesToInclude & CrossOriginCSSRules));
1228 1187
1229 // Check the rules in author sheets. 1188 // Check the rules in author sheets.
1230 matchAuthorRules(element, collector, rulesToInclude & EmptyCSSRules); 1189 matchAuthorRules(element, collector, rulesToInclude & EmptyCSSRules);
1231 } 1190 }
1232 } 1191 }
1233 1192
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che); 1571 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che);
1613 1572
1614 fprintf(stderr, "Total:\n"); 1573 fprintf(stderr, "Total:\n");
1615 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, 1574 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing,
1616 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache); 1575 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache);
1617 fprintf(stderr, "----------------------------------------------------------- ---------------------\n"); 1576 fprintf(stderr, "----------------------------------------------------------- ---------------------\n");
1618 } 1577 }
1619 #endif 1578 #endif
1620 1579
1621 } // namespace WebCore 1580 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698