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

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

Issue 134473008: Remove CSS regions support, keeping a bare minimum to support "region-based" multicol. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Code review: Revert changes in Source/devtools/Inspector-1.1.json 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
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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 { 509 {
510 if (!m_watchedSelectorsRules) 510 if (!m_watchedSelectorsRules)
511 return; 511 return;
512 512
513 collector.clearMatchedRules(); 513 collector.clearMatchedRules();
514 collector.matchedResult().ranges.lastUserRule = collector.matchedResult().ma tchedProperties.size() - 1; 514 collector.matchedResult().ranges.lastUserRule = collector.matchedResult().ma tchedProperties.size() - 1;
515 515
516 MatchRequest matchRequest(m_watchedSelectorsRules.get()); 516 MatchRequest matchRequest(m_watchedSelectorsRules.get());
517 RuleRange ruleRange = collector.matchedResult().ranges.userRuleRange(); 517 RuleRange ruleRange = collector.matchedResult().ranges.userRuleRange();
518 collector.collectMatchingRules(matchRequest, ruleRange); 518 collector.collectMatchingRules(matchRequest, ruleRange);
519 collector.collectMatchingRulesForRegion(matchRequest, ruleRange);
520 519
521 collector.sortAndTransferMatchedRules(); 520 collector.sortAndTransferMatchedRules();
522 } 521 }
523 522
524 void StyleResolver::matchUARules(ElementRuleCollector& collector) 523 void StyleResolver::matchUARules(ElementRuleCollector& collector)
525 { 524 {
526 collector.setMatchingUARules(true); 525 collector.setMatchingUARules(true);
527 526
528 CSSDefaultStyleSheets& defaultStyleSheets = CSSDefaultStyleSheets::instance( ); 527 CSSDefaultStyleSheets& defaultStyleSheets = CSSDefaultStyleSheets::instance( );
529 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print") 528 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print")
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 document.setWritingModeSetOnDocumentElement(false); 622 document.setWritingModeSetOnDocumentElement(false);
624 } 623 }
625 624
626 static void addContentAttrValuesToFeatures(const Vector<AtomicString>& contentAt trValues, RuleFeatureSet& features) 625 static void addContentAttrValuesToFeatures(const Vector<AtomicString>& contentAt trValues, RuleFeatureSet& features)
627 { 626 {
628 for (size_t i = 0; i < contentAttrValues.size(); ++i) 627 for (size_t i = 0; i < contentAttrValues.size(); ++i)
629 features.addAttributeInASelector(contentAttrValues[i]); 628 features.addAttributeInASelector(contentAttrValues[i]);
630 } 629 }
631 630
632 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior, 631 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior,
633 RuleMatchingBehavior matchingBehavior, RenderRegion* regionForStyling) 632 RuleMatchingBehavior matchingBehavior)
634 { 633 {
635 ASSERT(document().frame()); 634 ASSERT(document().frame());
636 ASSERT(documentSettings()); 635 ASSERT(documentSettings());
637 ASSERT(!hasPendingAuthorStyleSheets()); 636 ASSERT(!hasPendingAuthorStyleSheets());
638 ASSERT(!m_needCollectFeatures); 637 ASSERT(!m_needCollectFeatures);
639 638
640 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer 639 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer
641 // will vanish if a style recalc happens during loading. 640 // will vanish if a style recalc happens during loading.
642 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) { 641 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) {
643 if (!s_styleNotYetAvailable) { 642 if (!s_styleNotYetAvailable) {
644 s_styleNotYetAvailable = RenderStyle::create().leakRef(); 643 s_styleNotYetAvailable = RenderStyle::create().leakRef();
645 s_styleNotYetAvailable->setDisplay(NONE); 644 s_styleNotYetAvailable->setDisplay(NONE);
646 s_styleNotYetAvailable->font().update(document().styleEngine()->font Selector()); 645 s_styleNotYetAvailable->font().update(document().styleEngine()->font Selector());
647 } 646 }
648 element->document().setHasNodesWithPlaceholderStyle(); 647 element->document().setHasNodesWithPlaceholderStyle();
649 return s_styleNotYetAvailable; 648 return s_styleNotYetAvailable;
650 } 649 }
651 650
652 didAccess(); 651 didAccess();
653 652
654 if (element == document().documentElement()) 653 if (element == document().documentElement())
655 resetDirectionAndWritingModeOnDocument(document()); 654 resetDirectionAndWritingModeOnDocument(document());
656 StyleResolverState state(document(), element, defaultParent, regionForStylin g); 655 StyleResolverState state(document(), element, defaultParent);
657 656
658 if (sharingBehavior == AllowStyleSharing && state.parentStyle()) { 657 if (sharingBehavior == AllowStyleSharing && state.parentStyle()) {
659 SharedStyleFinder styleFinder(state.elementContext(), m_features, m_sibl ingRuleSet.get(), m_uncommonAttributeRuleSet.get(), *this); 658 SharedStyleFinder styleFinder(state.elementContext(), m_features, m_sibl ingRuleSet.get(), m_uncommonAttributeRuleSet.get(), *this);
660 if (RefPtr<RenderStyle> sharedStyle = styleFinder.findSharedStyle()) 659 if (RefPtr<RenderStyle> sharedStyle = styleFinder.findSharedStyle())
661 return sharedStyle.release(); 660 return sharedStyle.release();
662 } 661 }
663 662
664 if (state.parentStyle()) { 663 if (state.parentStyle()) {
665 state.setStyle(RenderStyle::create()); 664 state.setStyle(RenderStyle::create());
666 state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(eleme nt) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary); 665 state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(eleme nt) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary);
(...skipping 23 matching lines...) Expand all
690 state.style()->setInsideLink(linkState); 689 state.style()->setInsideLink(linkState);
691 } 690 }
692 691
693 bool needsCollection = false; 692 bool needsCollection = false;
694 CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetsForElement(element , needsCollection); 693 CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetsForElement(element , needsCollection);
695 if (needsCollection) 694 if (needsCollection)
696 collectFeatures(); 695 collectFeatures();
697 696
698 { 697 {
699 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style()); 698 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style());
700 collector.setRegionForStyling(regionForStyling);
701 699
702 if (matchingBehavior == MatchOnlyUserAgentRules) 700 if (matchingBehavior == MatchOnlyUserAgentRules)
703 matchUARules(collector); 701 matchUARules(collector);
704 else 702 else
705 matchAllRules(state, collector, matchingBehavior != MatchAllRulesExc ludingSMIL); 703 matchAllRules(state, collector, matchingBehavior != MatchAllRulesExc ludingSMIL);
706 704
707 applyMatchedProperties(state, collector.matchedResult()); 705 applyMatchedProperties(state, collector.matchedResult());
708 706
709 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features); 707 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
710 } 708 }
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 { 1001 {
1004 ASSERT(textNode); 1002 ASSERT(textNode);
1005 1003
1006 NodeRenderingTraversal::ParentDetails parentDetails; 1004 NodeRenderingTraversal::ParentDetails parentDetails;
1007 Node* parentNode = NodeRenderingTraversal::parent(textNode, &parentDetails); 1005 Node* parentNode = NodeRenderingTraversal::parent(textNode, &parentDetails);
1008 if (!parentNode || !parentNode->renderStyle() || parentDetails.resetStyleInh eritance()) 1006 if (!parentNode || !parentNode->renderStyle() || parentDetails.resetStyleInh eritance())
1009 return defaultStyleForElement(); 1007 return defaultStyleForElement();
1010 return parentNode->renderStyle(); 1008 return parentNode->renderStyle();
1011 } 1009 }
1012 1010
1013 bool StyleResolver::checkRegionStyle(Element* regionElement)
1014 {
1015 // FIXME (BUG 72472): We don't add @-webkit-region rules of scoped style she ets for the moment,
1016 // so all region rules are global by default. Verify whether that can stand or needs changing.
1017 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) {
1018 if (scopedResolver->checkRegionStyle(regionElement))
1019 return true;
1020 }
1021 return false;
1022 }
1023
1024 void StyleResolver::updateFont(StyleResolverState& state) 1011 void StyleResolver::updateFont(StyleResolverState& state)
1025 { 1012 {
1026 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.parentStyle(), state.style()); 1013 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.parentStyle(), state.style());
1027 if (state.fontBuilder().fontSizeHasViewportUnits()) 1014 if (state.fontBuilder().fontSizeHasViewportUnits())
1028 state.style()->setHasViewportUnits(); 1015 state.style()->setHasViewportUnits();
1029 } 1016 }
1030 1017
1031 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude) 1018 PassRefPtr<StyleRuleList> StyleResolver::styleRulesForElement(Element* element, unsigned rulesToInclude)
1032 { 1019 {
1033 ASSERT(element); 1020 ASSERT(element);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 for (AnimationEffect::CompositableValueMap::const_iterator iter = compositab leValues.begin(); iter != compositableValues.end(); ++iter) { 1098 for (AnimationEffect::CompositableValueMap::const_iterator iter = compositab leValues.begin(); iter != compositableValues.end(); ++iter) {
1112 CSSPropertyID property = iter->key; 1099 CSSPropertyID property = iter->key;
1113 if (!isPropertyForPass<pass>(property)) 1100 if (!isPropertyForPass<pass>(property))
1114 continue; 1101 continue;
1115 ASSERT_WITH_MESSAGE(!iter->value->dependsOnUnderlyingValue(), "Web Anima tions not yet implemented: An interface for compositing onto the underlying valu e."); 1102 ASSERT_WITH_MESSAGE(!iter->value->dependsOnUnderlyingValue(), "Web Anima tions not yet implemented: An interface for compositing onto the underlying valu e.");
1116 RefPtr<AnimatableValue> animatableValue = iter->value->compositeOnto(0); 1103 RefPtr<AnimatableValue> animatableValue = iter->value->compositeOnto(0);
1117 AnimatedStyleBuilder::applyProperty(property, state, animatableValue.get ()); 1104 AnimatedStyleBuilder::applyProperty(property, state, animatableValue.get ());
1118 } 1105 }
1119 } 1106 }
1120 1107
1121 // http://dev.w3.org/csswg/css3-regions/#the-at-region-style-rule
1122 // FIXME: add incremental support for other region styling properties.
1123 static inline bool isValidRegionStyleProperty(CSSPropertyID id)
1124 {
1125 switch (id) {
1126 case CSSPropertyBackgroundColor:
1127 case CSSPropertyColor:
1128 return true;
1129 default:
1130 break;
1131 }
1132
1133 return false;
1134 }
1135
1136 static inline bool isValidCueStyleProperty(CSSPropertyID id) 1108 static inline bool isValidCueStyleProperty(CSSPropertyID id)
1137 { 1109 {
1138 switch (id) { 1110 switch (id) {
1139 case CSSPropertyBackground: 1111 case CSSPropertyBackground:
1140 case CSSPropertyBackgroundAttachment: 1112 case CSSPropertyBackgroundAttachment:
1141 case CSSPropertyBackgroundClip: 1113 case CSSPropertyBackgroundClip:
1142 case CSSPropertyBackgroundColor: 1114 case CSSPropertyBackgroundColor:
1143 case CSSPropertyBackgroundImage: 1115 case CSSPropertyBackgroundImage:
1144 case CSSPropertyBackgroundOrigin: 1116 case CSSPropertyBackgroundOrigin:
1145 case CSSPropertyBackgroundPosition: 1117 case CSSPropertyBackgroundPosition:
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 case LowPriorityProperties: 1172 case LowPriorityProperties:
1201 return property > lastHighPriorityProperty; 1173 return property > lastHighPriorityProperty;
1202 } 1174 }
1203 ASSERT_NOT_REACHED(); 1175 ASSERT_NOT_REACHED();
1204 return false; 1176 return false;
1205 } 1177 }
1206 1178
1207 template <StyleResolver::StyleApplicationPass pass> 1179 template <StyleResolver::StyleApplicationPass pass>
1208 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper tySet* properties, StyleRule* rule, bool isImportant, bool inheritedOnly, Proper tyWhitelistType propertyWhitelistType) 1180 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper tySet* properties, StyleRule* rule, bool isImportant, bool inheritedOnly, Proper tyWhitelistType propertyWhitelistType)
1209 { 1181 {
1210 ASSERT((propertyWhitelistType != PropertyWhitelistRegion) || state.regionFor Styling());
1211 state.setCurrentRule(rule); 1182 state.setCurrentRule(rule);
1212 1183
1213 unsigned propertyCount = properties->propertyCount(); 1184 unsigned propertyCount = properties->propertyCount();
1214 for (unsigned i = 0; i < propertyCount; ++i) { 1185 for (unsigned i = 0; i < propertyCount; ++i) {
1215 StylePropertySet::PropertyReference current = properties->propertyAt(i); 1186 StylePropertySet::PropertyReference current = properties->propertyAt(i);
1216 if (isImportant != current.isImportant()) 1187 if (isImportant != current.isImportant())
1217 continue; 1188 continue;
1218 if (inheritedOnly && !current.isInherited()) { 1189 if (inheritedOnly && !current.isInherited()) {
1219 // If the property value is explicitly inherited, we need to apply f urther non-inherited properties 1190 // If the property value is explicitly inherited, we need to apply f urther non-inherited properties
1220 // as they might override the value inherited here. For this reason we don't allow declarations with 1191 // as they might override the value inherited here. For this reason we don't allow declarations with
1221 // explicitly inherited properties to be cached. 1192 // explicitly inherited properties to be cached.
1222 ASSERT(!current.value()->isInheritedValue()); 1193 ASSERT(!current.value()->isInheritedValue());
1223 continue; 1194 continue;
1224 } 1195 }
1225 CSSPropertyID property = current.id(); 1196 CSSPropertyID property = current.id();
1226 1197
1227 if (propertyWhitelistType == PropertyWhitelistRegion && !isValidRegionSt yleProperty(property))
1228 continue;
1229 if (propertyWhitelistType == PropertyWhitelistCue && !isValidCueStylePro perty(property)) 1198 if (propertyWhitelistType == PropertyWhitelistCue && !isValidCueStylePro perty(property))
1230 continue; 1199 continue;
1231 if (!isPropertyForPass<pass>(property)) 1200 if (!isPropertyForPass<pass>(property))
1232 continue; 1201 continue;
1233 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight) 1202 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight)
1234 state.setLineHeightValue(current.value()); 1203 state.setLineHeightValue(current.value());
1235 else 1204 else
1236 StyleBuilder::applyProperty(current.id(), state, current.value()); 1205 StyleBuilder::applyProperty(current.id(), state, current.value());
1237 } 1206 }
1238 } 1207 }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 bool StyleResolver::mediaQueryAffectedByViewportChange() const 1411 bool StyleResolver::mediaQueryAffectedByViewportChange() const
1443 { 1412 {
1444 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { 1413 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) {
1445 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio n) != m_viewportDependentMediaQueryResults[i]->m_result) 1414 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio n) != m_viewportDependentMediaQueryResults[i]->m_result)
1446 return true; 1415 return true;
1447 } 1416 }
1448 return false; 1417 return false;
1449 } 1418 }
1450 1419
1451 } // namespace WebCore 1420 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698