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

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

Issue 153233002: *** DO NOT LAND *** Remove regions support, keeping a bare minimum to support "region-based"... (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 10 months 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
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | Source/core/css/resolver/StyleResolverState.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 { 499 {
500 if (!m_watchedSelectorsRules) 500 if (!m_watchedSelectorsRules)
501 return; 501 return;
502 502
503 collector.clearMatchedRules(); 503 collector.clearMatchedRules();
504 collector.matchedResult().ranges.lastUserRule = collector.matchedResult().ma tchedProperties.size() - 1; 504 collector.matchedResult().ranges.lastUserRule = collector.matchedResult().ma tchedProperties.size() - 1;
505 505
506 MatchRequest matchRequest(m_watchedSelectorsRules.get()); 506 MatchRequest matchRequest(m_watchedSelectorsRules.get());
507 RuleRange ruleRange = collector.matchedResult().ranges.userRuleRange(); 507 RuleRange ruleRange = collector.matchedResult().ranges.userRuleRange();
508 collector.collectMatchingRules(matchRequest, ruleRange); 508 collector.collectMatchingRules(matchRequest, ruleRange);
509 collector.collectMatchingRulesForRegion(matchRequest, ruleRange);
510 509
511 collector.sortAndTransferMatchedRules(); 510 collector.sortAndTransferMatchedRules();
512 } 511 }
513 512
514 void StyleResolver::matchUARules(ElementRuleCollector& collector) 513 void StyleResolver::matchUARules(ElementRuleCollector& collector)
515 { 514 {
516 collector.setMatchingUARules(true); 515 collector.setMatchingUARules(true);
517 516
518 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print") 517 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print")
519 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defa ultStyle; 518 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defa ultStyle;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 document.setWritingModeSetOnDocumentElement(false); 611 document.setWritingModeSetOnDocumentElement(false);
613 } 612 }
614 613
615 static void addContentAttrValuesToFeatures(const Vector<AtomicString>& contentAt trValues, RuleFeatureSet& features) 614 static void addContentAttrValuesToFeatures(const Vector<AtomicString>& contentAt trValues, RuleFeatureSet& features)
616 { 615 {
617 for (size_t i = 0; i < contentAttrValues.size(); ++i) 616 for (size_t i = 0; i < contentAttrValues.size(); ++i)
618 features.addAttributeInASelector(contentAttrValues[i]); 617 features.addAttributeInASelector(contentAttrValues[i]);
619 } 618 }
620 619
621 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior, 620 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior,
622 RuleMatchingBehavior matchingBehavior, RenderRegion* regionForStyling) 621 RuleMatchingBehavior matchingBehavior)
623 { 622 {
624 ASSERT(document().frame()); 623 ASSERT(document().frame());
625 ASSERT(documentSettings()); 624 ASSERT(documentSettings());
626 ASSERT(!hasPendingAuthorStyleSheets()); 625 ASSERT(!hasPendingAuthorStyleSheets());
627 ASSERT(!m_needCollectFeatures); 626 ASSERT(!m_needCollectFeatures);
628 627
629 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer 628 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer
630 // will vanish if a style recalc happens during loading. 629 // will vanish if a style recalc happens during loading.
631 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) { 630 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) {
632 if (!s_styleNotYetAvailable) { 631 if (!s_styleNotYetAvailable) {
633 s_styleNotYetAvailable = RenderStyle::create().leakRef(); 632 s_styleNotYetAvailable = RenderStyle::create().leakRef();
634 s_styleNotYetAvailable->setDisplay(NONE); 633 s_styleNotYetAvailable->setDisplay(NONE);
635 s_styleNotYetAvailable->font().update(document().styleEngine()->font Selector()); 634 s_styleNotYetAvailable->font().update(document().styleEngine()->font Selector());
636 } 635 }
637 element->document().setHasNodesWithPlaceholderStyle(); 636 element->document().setHasNodesWithPlaceholderStyle();
638 return s_styleNotYetAvailable; 637 return s_styleNotYetAvailable;
639 } 638 }
640 639
641 didAccess(); 640 didAccess();
642 641
643 if (element == document().documentElement()) 642 if (element == document().documentElement())
644 resetDirectionAndWritingModeOnDocument(document()); 643 resetDirectionAndWritingModeOnDocument(document());
645 StyleResolverState state(document(), element, defaultParent, regionForStylin g); 644 StyleResolverState state(document(), element, defaultParent);
646 645
647 if (sharingBehavior == AllowStyleSharing && !state.distributedToInsertionPoi nt() && state.parentStyle()) { 646 if (sharingBehavior == AllowStyleSharing && !state.distributedToInsertionPoi nt() && state.parentStyle()) {
648 SharedStyleFinder styleFinder(state.elementContext(), m_features, m_sibl ingRuleSet.get(), m_uncommonAttributeRuleSet.get(), *this); 647 SharedStyleFinder styleFinder(state.elementContext(), m_features, m_sibl ingRuleSet.get(), m_uncommonAttributeRuleSet.get(), *this);
649 if (RefPtr<RenderStyle> sharedStyle = styleFinder.findSharedStyle()) 648 if (RefPtr<RenderStyle> sharedStyle = styleFinder.findSharedStyle())
650 return sharedStyle.release(); 649 return sharedStyle.release();
651 } 650 }
652 651
653 if (state.parentStyle()) { 652 if (state.parentStyle()) {
654 state.setStyle(RenderStyle::create()); 653 state.setStyle(RenderStyle::create());
655 state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(eleme nt) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary); 654 state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(eleme nt) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary);
(...skipping 23 matching lines...) Expand all
679 state.style()->setInsideLink(linkState); 678 state.style()->setInsideLink(linkState);
680 } 679 }
681 680
682 bool needsCollection = false; 681 bool needsCollection = false;
683 CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement(element, needsColl ection); 682 CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement(element, needsColl ection);
684 if (needsCollection) 683 if (needsCollection)
685 collectFeatures(); 684 collectFeatures();
686 685
687 { 686 {
688 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style()); 687 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style());
689 collector.setRegionForStyling(regionForStyling);
690 688
691 if (matchingBehavior == MatchOnlyUserAgentRules) 689 if (matchingBehavior == MatchOnlyUserAgentRules)
692 matchUARules(collector); 690 matchUARules(collector);
693 else 691 else
694 matchAllRules(state, collector, matchingBehavior != MatchAllRulesExc ludingSMIL); 692 matchAllRules(state, collector, matchingBehavior != MatchAllRulesExc ludingSMIL);
695 693
696 applyMatchedProperties(state, collector.matchedResult()); 694 applyMatchedProperties(state, collector.matchedResult());
697 695
698 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features); 696 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
699 } 697 }
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 { 1053 {
1056 ASSERT(textNode); 1054 ASSERT(textNode);
1057 1055
1058 NodeRenderingTraversal::ParentDetails parentDetails; 1056 NodeRenderingTraversal::ParentDetails parentDetails;
1059 Node* parentNode = NodeRenderingTraversal::parent(textNode, &parentDetails); 1057 Node* parentNode = NodeRenderingTraversal::parent(textNode, &parentDetails);
1060 if (!parentNode || !parentNode->renderStyle() || parentDetails.resetStyleInh eritance()) 1058 if (!parentNode || !parentNode->renderStyle() || parentDetails.resetStyleInh eritance())
1061 return defaultStyleForElement(); 1059 return defaultStyleForElement();
1062 return parentNode->renderStyle(); 1060 return parentNode->renderStyle();
1063 } 1061 }
1064 1062
1065 bool StyleResolver::checkRegionStyle(Element* regionElement)
1066 {
1067 // FIXME (BUG 72472): We don't add @-webkit-region rules of scoped style she ets for the moment,
1068 // so all region rules are global by default. Verify whether that can stand or needs changing.
1069 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) {
1070 if (scopedResolver->checkRegionStyle(regionElement))
1071 return true;
1072 }
1073 return false;
1074 }
1075
1076 void StyleResolver::updateFont(StyleResolverState& state) 1063 void StyleResolver::updateFont(StyleResolverState& state)
1077 { 1064 {
1078 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.parentStyle(), state.style()); 1065 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.parentStyle(), state.style());
1079 if (state.fontBuilder().fontSizeHasViewportUnits()) 1066 if (state.fontBuilder().fontSizeHasViewportUnits())
1080 state.style()->setHasViewportUnits(); 1067 state.style()->setHasViewportUnits();
1081 } 1068 }
1082 1069
1083 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude) 1070 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude)
1084 { 1071 {
1085 ASSERT(element); 1072 ASSERT(element);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 for (AnimationEffect::CompositableValueMap::const_iterator iter = compositab leValues.begin(); iter != compositableValues.end(); ++iter) { 1155 for (AnimationEffect::CompositableValueMap::const_iterator iter = compositab leValues.begin(); iter != compositableValues.end(); ++iter) {
1169 CSSPropertyID property = iter->key; 1156 CSSPropertyID property = iter->key;
1170 if (!isPropertyForPass<pass>(property)) 1157 if (!isPropertyForPass<pass>(property))
1171 continue; 1158 continue;
1172 ASSERT_WITH_MESSAGE(!iter->value->dependsOnUnderlyingValue(), "Web Anima tions not yet implemented: An interface for compositing onto the underlying valu e."); 1159 ASSERT_WITH_MESSAGE(!iter->value->dependsOnUnderlyingValue(), "Web Anima tions not yet implemented: An interface for compositing onto the underlying valu e.");
1173 RefPtr<AnimatableValue> animatableValue = iter->value->compositeOnto(0); 1160 RefPtr<AnimatableValue> animatableValue = iter->value->compositeOnto(0);
1174 AnimatedStyleBuilder::applyProperty(property, state, animatableValue.get ()); 1161 AnimatedStyleBuilder::applyProperty(property, state, animatableValue.get ());
1175 } 1162 }
1176 } 1163 }
1177 1164
1178 // http://dev.w3.org/csswg/css3-regions/#the-at-region-style-rule
1179 // FIXME: add incremental support for other region styling properties.
1180 static inline bool isValidRegionStyleProperty(CSSPropertyID id)
1181 {
1182 switch (id) {
1183 case CSSPropertyBackgroundColor:
1184 case CSSPropertyColor:
1185 return true;
1186 default:
1187 break;
1188 }
1189
1190 return false;
1191 }
1192
1193 static inline bool isValidCueStyleProperty(CSSPropertyID id) 1165 static inline bool isValidCueStyleProperty(CSSPropertyID id)
1194 { 1166 {
1195 switch (id) { 1167 switch (id) {
1196 case CSSPropertyBackground: 1168 case CSSPropertyBackground:
1197 case CSSPropertyBackgroundAttachment: 1169 case CSSPropertyBackgroundAttachment:
1198 case CSSPropertyBackgroundClip: 1170 case CSSPropertyBackgroundClip:
1199 case CSSPropertyBackgroundColor: 1171 case CSSPropertyBackgroundColor:
1200 case CSSPropertyBackgroundImage: 1172 case CSSPropertyBackgroundImage:
1201 case CSSPropertyBackgroundOrigin: 1173 case CSSPropertyBackgroundOrigin:
1202 case CSSPropertyBackgroundPosition: 1174 case CSSPropertyBackgroundPosition:
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 case LowPriorityProperties: 1232 case LowPriorityProperties:
1261 return property > lastHighPriorityProperty; 1233 return property > lastHighPriorityProperty;
1262 } 1234 }
1263 ASSERT_NOT_REACHED(); 1235 ASSERT_NOT_REACHED();
1264 return false; 1236 return false;
1265 } 1237 }
1266 1238
1267 template <StyleResolver::StyleApplicationPass pass> 1239 template <StyleResolver::StyleApplicationPass pass>
1268 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper tySet* properties, StyleRule* rule, bool isImportant, bool inheritedOnly, Proper tyWhitelistType propertyWhitelistType) 1240 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper tySet* properties, StyleRule* rule, bool isImportant, bool inheritedOnly, Proper tyWhitelistType propertyWhitelistType)
1269 { 1241 {
1270 ASSERT((propertyWhitelistType != PropertyWhitelistRegion) || state.regionFor Styling());
1271 state.setCurrentRule(rule); 1242 state.setCurrentRule(rule);
1272 1243
1273 unsigned propertyCount = properties->propertyCount(); 1244 unsigned propertyCount = properties->propertyCount();
1274 for (unsigned i = 0; i < propertyCount; ++i) { 1245 for (unsigned i = 0; i < propertyCount; ++i) {
1275 StylePropertySet::PropertyReference current = properties->propertyAt(i); 1246 StylePropertySet::PropertyReference current = properties->propertyAt(i);
1276 if (isImportant != current.isImportant()) 1247 if (isImportant != current.isImportant())
1277 continue; 1248 continue;
1278 if (inheritedOnly && !current.isInherited()) { 1249 if (inheritedOnly && !current.isInherited()) {
1279 // If the property value is explicitly inherited, we need to apply f urther non-inherited properties 1250 // If the property value is explicitly inherited, we need to apply f urther non-inherited properties
1280 // as they might override the value inherited here. For this reason we don't allow declarations with 1251 // as they might override the value inherited here. For this reason we don't allow declarations with
1281 // explicitly inherited properties to be cached. 1252 // explicitly inherited properties to be cached.
1282 ASSERT(!current.value()->isInheritedValue()); 1253 ASSERT(!current.value()->isInheritedValue());
1283 continue; 1254 continue;
1284 } 1255 }
1285 CSSPropertyID property = current.id(); 1256 CSSPropertyID property = current.id();
1286 1257
1287 if (propertyWhitelistType == PropertyWhitelistRegion && !isValidRegionSt yleProperty(property))
1288 continue;
1289 if (propertyWhitelistType == PropertyWhitelistCue && !isValidCueStylePro perty(property)) 1258 if (propertyWhitelistType == PropertyWhitelistCue && !isValidCueStylePro perty(property))
1290 continue; 1259 continue;
1291 if (!isPropertyForPass<pass>(property)) 1260 if (!isPropertyForPass<pass>(property))
1292 continue; 1261 continue;
1293 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight) 1262 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight)
1294 state.setLineHeightValue(current.value()); 1263 state.setLineHeightValue(current.value());
1295 else 1264 else
1296 StyleBuilder::applyProperty(current.id(), state, current.value()); 1265 StyleBuilder::applyProperty(current.id(), state, current.value());
1297 } 1266 }
1298 } 1267 }
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1507 bool StyleResolver::mediaQueryAffectedByViewportChange() const 1476 bool StyleResolver::mediaQueryAffectedByViewportChange() const
1508 { 1477 {
1509 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { 1478 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) {
1510 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio n) != m_viewportDependentMediaQueryResults[i]->m_result) 1479 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio n) != m_viewportDependentMediaQueryResults[i]->m_result)
1511 return true; 1480 return true;
1512 } 1481 }
1513 return false; 1482 return false;
1514 } 1483 }
1515 1484
1516 } // namespace WebCore 1485 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | Source/core/css/resolver/StyleResolverState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698