Changeset 287018 in webkit
- Timestamp:
- Dec 14, 2021 2:13:54 AM (7 months ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/style/PropertyCascade.cpp (modified) (4 diffs)
-
Source/WebCore/style/PropertyCascade.h (modified) (5 diffs)
-
Source/WebCore/style/RuleSet.h (modified) (1 diff)
-
Source/WebCore/style/StyleBuilder.cpp (modified) (6 diffs)
-
Source/WebCore/style/StyleBuilder.h (modified) (1 diff)
-
Source/WebCore/style/StyleBuilderState.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r287013 r287018 1 2021-12-14 Antti Koivisto <antti@apple.com> 2 3 [CSS Cascade Layers] revert-layer should revert style attribute to regular author style 4 https://bugs.webkit.org/show_bug.cgi?id=234082 5 6 Reviewed by Simon Fraser. 7 8 * TestExpectations: 9 1 10 2021-12-13 John Wilander <wilander@apple.com> 2 11 -
trunk/LayoutTests/TestExpectations
r286955 r287018 2182 2182 imported/w3c/web-platform-tests/css/css-cascade/important-prop.html [ ImageOnlyFailure ] 2183 2183 webkit.org/b/187093 [ Debug ] imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml.html [ Skip ] 2184 webkit.org/b/233937 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-009.html [ ImageOnlyFailure ]2185 2184 webkit.org/b/233937 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-010.html [ ImageOnlyFailure ] 2186 2185 webkit.org/b/233937 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-011.html [ ImageOnlyFailure ] 2187 webkit.org/b/233937 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-012.html [ ImageOnlyFailure ]2188 2186 2189 2187 webkit.org/b/148801 imported/w3c/web-platform-tests/css/css-color/t422-rgba-onscreen-b.xht [ ImageOnlyFailure ] -
trunk/Source/WebCore/ChangeLog
r287017 r287018 1 2021-12-14 Antti Koivisto <antti@apple.com> 2 3 [CSS Cascade Layers] revert-layer should revert style attribute to regular author style 4 https://bugs.webkit.org/show_bug.cgi?id=234082 5 6 Reviewed by Simon Fraser. 7 8 If 'revert-layer' keyword is used in style attribute it should revert to regular author style 9 on the default cascade level. 10 11 * style/PropertyCascade.cpp: 12 (WebCore::Style::PropertyCascade::PropertyCascade): 13 14 Make the maximum level (used for revert cascades) an std::optional. 15 16 (WebCore::Style::PropertyCascade::setPropertyInternal): 17 (WebCore::Style::PropertyCascade::addMatch): 18 19 Factor the revert test into a lambda. 20 We can never revert to an attribute style so always skip them. 21 22 * style/PropertyCascade.h: 23 (WebCore::Style::PropertyCascade::PropertyCascade): 24 (WebCore::Style::PropertyCascade::maximumCascadeLevel const): Deleted. 25 (WebCore::Style::PropertyCascade::maximumCascadeLayerPriority const): Deleted. 26 * style/RuleSet.h: 27 * style/StyleBuilder.cpp: 28 (WebCore::Style::Builder::applyCustomProperty): 29 (WebCore::Style::Builder::applyCascadeProperty): 30 (WebCore::Style::Builder::applyRollbackCascadeProperty): 31 32 Keep a pointer to the current property being applied in state instead of individual priority values. 33 34 (WebCore::Style::Builder::applyProperty): 35 (WebCore::Style::Builder::ensureRollbackCascadeForRevert): 36 (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer): 37 38 If the current property is from attribute style it reverts to the same layer. 39 40 * style/StyleBuilder.h: 41 * style/StyleBuilderState.h: 42 (WebCore::Style::BuilderState::styleScopeOrdinal const): 43 1 44 2021-12-14 Youenn Fablet <youenn@apple.com> 2 45 -
trunk/Source/WebCore/style/PropertyCascade.cpp
r285624 r287018 27 27 #include "PropertyCascade.h" 28 28 29 #include "CSSCustomPropertyValue.h" 29 30 #include "CSSPaintImageValue.h" 30 31 #include "CSSPrimitiveValueMappings.h" … … 81 82 } 82 83 83 PropertyCascade::PropertyCascade(const PropertyCascade& parent, CascadeLevel maximumCascadeLevel, CascadeLayerPriority maximumCascadeLayerPriority)84 PropertyCascade::PropertyCascade(const PropertyCascade& parent, CascadeLevel maximumCascadeLevel, std::optional<CascadeLayerPriority> maximumCascadeLayerPriorityForRollback) 84 85 : m_matchResult(parent.m_matchResult) 85 86 , m_includedProperties(parent.m_includedProperties) 86 87 , m_maximumCascadeLevel(maximumCascadeLevel) 87 , m_maximumCascadeLayerPriority (maximumCascadeLayerPriority)88 , m_maximumCascadeLayerPriorityForRollback(maximumCascadeLayerPriorityForRollback) 88 89 , m_direction(parent.direction()) 89 90 , m_directionIsUnresolved(false) … … 117 118 ASSERT(matchedProperties.linkMatchType <= SelectorChecker::MatchAll); 118 119 property.id = id; 119 property. level = cascadeLevel;120 property.cascadeLevel = cascadeLevel; 120 121 property.styleScopeOrdinal = matchedProperties.styleScopeOrdinal; 121 122 property.cascadeLayerPriority = matchedProperties.cascadeLayerPriority; 123 property.fromStyleAttribute = matchedProperties.fromStyleAttribute; 122 124 123 125 if (matchedProperties.linkMatchType == SelectorChecker::MatchAll) { … … 178 180 bool PropertyCascade::addMatch(const MatchedProperties& matchedProperties, CascadeLevel cascadeLevel, bool important) 179 181 { 180 if (matchedProperties.cascadeLayerPriority > m_maximumCascadeLayerPriority && cascadeLevel == m_maximumCascadeLevel && matchedProperties.styleScopeOrdinal == ScopeOrdinal::Element) 182 auto skipForRollback = [&] { 183 if (!m_maximumCascadeLayerPriorityForRollback) 184 return false; 185 if (matchedProperties.styleScopeOrdinal != ScopeOrdinal::Element) 186 return false; 187 if (cascadeLevel < m_maximumCascadeLevel) 188 return false; 189 if (matchedProperties.fromStyleAttribute == FromStyleAttribute::Yes) 190 return true; 191 return matchedProperties.cascadeLayerPriority > *m_maximumCascadeLayerPriorityForRollback; 192 }; 193 if (skipForRollback()) 181 194 return false; 182 195 -
trunk/Source/WebCore/style/PropertyCascade.h
r285624 r287018 28 28 #include "CascadeLevel.h" 29 29 #include "MatchResult.h" 30 #include "StyleBuilderState.h"31 30 #include <bitset> 32 31 … … 48 47 49 48 PropertyCascade(const MatchResult&, CascadeLevel, IncludedProperties, Direction); 50 PropertyCascade(const PropertyCascade&, CascadeLevel, CascadeLayerPriority maximumCascadeLayerPriority = RuleSet::cascadeLayerPriorityForUnlayered);49 PropertyCascade(const PropertyCascade&, CascadeLevel, std::optional<CascadeLayerPriority> maximumCascadeLayerPriorityForRollback = { }); 51 50 52 51 ~PropertyCascade(); … … 54 53 struct Property { 55 54 CSSPropertyID id; 56 CascadeLevel level;55 CascadeLevel cascadeLevel; 57 56 ScopeOrdinal styleScopeOrdinal; 58 57 CascadeLayerPriority cascadeLayerPriority; 58 FromStyleAttribute fromStyleAttribute; 59 59 CSSValue* cssValue[3]; // Values for link match states MatchDefault, MatchLink and MatchVisited 60 60 }; … … 70 70 71 71 Direction direction() const; 72 73 auto maximumCascadeLevel() const { return m_maximumCascadeLevel; }74 auto maximumCascadeLayerPriority() const { return m_maximumCascadeLayerPriority; }75 72 76 73 private: … … 89 86 const IncludedProperties m_includedProperties; 90 87 const CascadeLevel m_maximumCascadeLevel; 91 const CascadeLayerPriority m_maximumCascadeLayerPriority { RuleSet::cascadeLayerPriorityForUnlayered };88 const std::optional<CascadeLayerPriority> m_maximumCascadeLayerPriorityForRollback; 92 89 mutable Direction m_direction; 93 90 mutable bool m_directionIsUnresolved { true }; -
trunk/Source/WebCore/style/RuleSet.h
r285622 r287018 107 107 108 108 static constexpr auto cascadeLayerPriorityForUnlayered = std::numeric_limits<CascadeLayerPriority>::max(); 109 109 110 CascadeLayerPriority cascadeLayerPriorityFor(const RuleData&) const; 110 111 -
trunk/Source/WebCore/style/StyleBuilder.cpp
r285801 r287018 181 181 bool inCycle = m_state.m_inProgressPropertiesCustom.contains(name); 182 182 183 SetForScope levelScope(m_state.m_currentProperty, &property); 184 183 185 for (auto index : { SelectorChecker::MatchDefault, SelectorChecker::MatchLink, SelectorChecker::MatchVisited }) { 184 186 if (!property.cssValue[index]) … … 234 236 inline void Builder::applyCascadeProperty(const PropertyCascade::Property& property) 235 237 { 236 m_state.m_cascadeLevel = property.level; 237 m_state.m_styleScopeOrdinal = property.styleScopeOrdinal; 238 m_state.m_cascadeLayerPriority = property.cascadeLayerPriority; 238 SetForScope levelScope(m_state.m_currentProperty, &property); 239 239 240 240 auto applyWithLinkMatch = [&](SelectorChecker::LinkMatchMask linkMatch) { … … 262 262 return; 263 263 264 SetForScope levelScope(m_state.m_cascadeLevel, property.level); 265 SetForScope scopeScope(m_state.m_styleScopeOrdinal, property.styleScopeOrdinal); 266 SetForScope layerScope(m_state.m_cascadeLayerPriority, property.cascadeLayerPriority); 264 SetForScope levelScope(m_state.m_currentProperty, &property); 267 265 268 266 applyProperty(property.id, *value, linkMatchMask); … … 303 301 304 302 if (isRevert || isRevertLayer) { 305 auto* rollbackCascade = isRevert 306 ? ensureRollbackCascadeForRevert(m_state.m_cascadeLevel) 307 : ensureRollbackCascadeForRevertLayer(m_state.m_cascadeLevel, m_state.m_cascadeLayerPriority); 303 auto* rollbackCascade = isRevert ? ensureRollbackCascadeForRevert() : ensureRollbackCascadeForRevertLayer(); 308 304 309 305 if (rollbackCascade) { … … 380 376 } 381 377 382 const PropertyCascade* Builder::ensureRollbackCascadeForRevert(CascadeLevel rollbackCascadeLevel) 383 { 378 const PropertyCascade* Builder::ensureRollbackCascadeForRevert() 379 { 380 auto rollbackCascadeLevel = m_state.m_currentProperty->cascadeLevel; 384 381 if (rollbackCascadeLevel == CascadeLevel::UserAgent) 385 382 return nullptr; … … 387 384 --rollbackCascadeLevel; 388 385 389 auto key = makeRollbackCascadeKey(rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);386 auto key = makeRollbackCascadeKey(rollbackCascadeLevel, 0); 390 387 return m_rollbackCascades.ensure(key, [&] { 391 return makeUnique<const PropertyCascade>(m_cascade, rollbackCascadeLevel , RuleSet::cascadeLayerPriorityForUnlayered);388 return makeUnique<const PropertyCascade>(m_cascade, rollbackCascadeLevel); 392 389 }).iterator->value.get(); 393 390 } 394 391 395 const PropertyCascade* Builder::ensureRollbackCascadeForRevertLayer(CascadeLevel cascadeLevel, CascadeLayerPriority rollbackLayerPriority) 396 { 392 const PropertyCascade* Builder::ensureRollbackCascadeForRevertLayer() 393 { 394 auto& property = *m_state.m_currentProperty; 395 auto rollbackLayerPriority = property.cascadeLayerPriority; 397 396 if (!rollbackLayerPriority) 398 397 return nullptr; 399 398 400 --rollbackLayerPriority; 401 402 auto key = makeRollbackCascadeKey(cascadeLevel, rollbackLayerPriority); 399 ASSERT(property.fromStyleAttribute == FromStyleAttribute::No || property.cascadeLayerPriority == RuleSet::cascadeLayerPriorityForUnlayered); 400 401 // Style attribute reverts to the regular author style. 402 if (property.fromStyleAttribute == FromStyleAttribute::No) 403 --rollbackLayerPriority; 404 405 auto key = makeRollbackCascadeKey(property.cascadeLevel, rollbackLayerPriority); 403 406 return m_rollbackCascades.ensure(key, [&] { 404 return makeUnique<const PropertyCascade>(m_cascade, cascadeLevel, rollbackLayerPriority);407 return makeUnique<const PropertyCascade>(m_cascade, property.cascadeLevel, rollbackLayerPriority); 405 408 }).iterator->value.get(); 406 409 } -
trunk/Source/WebCore/style/StyleBuilder.h
r285801 r287018 63 63 RefPtr<CSSValue> resolvedVariableValue(CSSPropertyID, const CSSValue&); 64 64 65 const PropertyCascade* ensureRollbackCascadeForRevert( CascadeLevel);66 const PropertyCascade* ensureRollbackCascadeForRevertLayer( CascadeLevel, CascadeLayerPriority);65 const PropertyCascade* ensureRollbackCascadeForRevert(); 66 const PropertyCascade* ensureRollbackCascadeForRevertLayer(); 67 67 68 68 using RollbackCascadeKey = std::pair<unsigned, unsigned>; -
trunk/Source/WebCore/style/StyleBuilderState.h
r285710 r287018 29 29 #include "CSSToStyleMap.h" 30 30 #include "CascadeLevel.h" 31 #include "PropertyCascade.h" 31 32 #include "RenderStyle.h" 32 33 #include "RuleSet.h" … … 90 91 bool useSVGZoomRules() const; 91 92 bool useSVGZoomRulesForLength() const; 92 ScopeOrdinal styleScopeOrdinal() const { return m_ styleScopeOrdinal; }93 ScopeOrdinal styleScopeOrdinal() const { return m_currentProperty->styleScopeOrdinal; } 93 94 94 95 Ref<CSSValue> resolveImageStyles(CSSValue&); … … 136 137 HashSet<String> m_inProgressPropertiesCustom; 137 138 138 CascadeLevel m_cascadeLevel { CascadeLevel::Author }; 139 ScopeOrdinal m_styleScopeOrdinal { }; 140 CascadeLayerPriority m_cascadeLayerPriority { }; 139 const PropertyCascade::Property* m_currentProperty { nullptr }; 141 140 SelectorChecker::LinkMatchMask m_linkMatch { }; 142 141
Note: See TracChangeset
for help on using the changeset viewer.