Changeset 293725 in webkit
- Timestamp:
- May 3, 2022 8:45:26 AM (3 months ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/css/revert-layer-tree-context-stack-overflow-expected.html (added)
-
LayoutTests/fast/css/revert-layer-tree-context-stack-overflow.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/style/PropertyCascade.cpp (modified) (2 diffs)
-
Source/WebCore/style/PropertyCascade.h (modified) (2 diffs)
-
Source/WebCore/style/StyleBuilder.cpp (modified) (2 diffs)
-
Source/WebCore/style/StyleBuilder.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r293723 r293725 1 2022-05-03 Antti Koivisto <antti@apple.com> 2 3 [CSS Cascade Layers] Endless recursion with revert-layer in other tree context 4 https://bugs.webkit.org/show_bug.cgi?id=239967 5 <rdar://92449950> 6 7 Reviewed by Alan Bujtas. 8 9 * fast/css/revert-layer-tree-context-stack-overflow-expected.html: Added. 10 * fast/css/revert-layer-tree-context-stack-overflow.html: Added. 11 1 12 2022-05-03 Kimmo Kinnunen <kkinnunen@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r293719 r293725 1 2022-05-03 Antti Koivisto <antti@apple.com> 2 3 [CSS Cascade Layers] Endless recursion with revert-layer in other tree context 4 https://bugs.webkit.org/show_bug.cgi?id=239967 5 <rdar://92449950> 6 7 Reviewed by Alan Bujtas. 8 9 We should only revert within a tree context (scope). 10 11 Adding more comprehensive WPTs separately. 12 13 Test: fast/css/revert-layer-tree-context-stack-overflow.html 14 15 * style/PropertyCascade.cpp: 16 (WebCore::Style::PropertyCascade::PropertyCascade): 17 18 Pass the property tree scope to the rollback cascade. 19 20 (WebCore::Style::PropertyCascade::addMatch): 21 22 Don't include properties from lower priority tree scopes to rollback cascade. 23 Reverse the logic for clarity. 24 25 * style/PropertyCascade.h: 26 (WebCore::Style::PropertyCascade::PropertyCascade): 27 * style/StyleBuilder.cpp: 28 (WebCore::Style::Builder::ensureRollbackCascadeForRevert): 29 (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer): 30 (WebCore::Style::Builder::makeRollbackCascadeKey): 31 32 Include tree scope to the key. 33 34 * style/StyleBuilder.h: 35 1 36 2022-05-03 Youenn Fablet <youenn@apple.com> 2 37 -
trunk/Source/WebCore/style/PropertyCascade.cpp
r293543 r293725 47 47 } 48 48 49 PropertyCascade::PropertyCascade(const PropertyCascade& parent, CascadeLevel maximumCascadeLevel, std::optional< CascadeLayerPriority> maximumCascadeLayerPriorityForRollback)49 PropertyCascade::PropertyCascade(const PropertyCascade& parent, CascadeLevel maximumCascadeLevel, std::optional<ScopeOrdinal> rollbackScope, std::optional<CascadeLayerPriority> maximumCascadeLayerPriorityForRollback) 50 50 : m_matchResult(parent.m_matchResult) 51 51 , m_includedProperties(parent.m_includedProperties) 52 52 , m_maximumCascadeLevel(maximumCascadeLevel) 53 , m_rollbackScope(rollbackScope) 53 54 , m_maximumCascadeLayerPriorityForRollback(maximumCascadeLayerPriorityForRollback) 54 55 { … … 173 174 bool PropertyCascade::addMatch(const MatchedProperties& matchedProperties, CascadeLevel cascadeLevel, bool important) 174 175 { 175 auto skipForRollback = [&] { 176 if (!m_maximumCascadeLayerPriorityForRollback) 176 auto includePropertiesForRollback = [&] { 177 if (m_rollbackScope && matchedProperties.styleScopeOrdinal > *m_rollbackScope) 178 return true; 179 if (cascadeLevel < m_maximumCascadeLevel) 180 return true; 181 if (matchedProperties.fromStyleAttribute == FromStyleAttribute::Yes) 177 182 return false; 178 if (matchedProperties.styleScopeOrdinal != ScopeOrdinal::Element) 179 return false; 180 if (cascadeLevel < m_maximumCascadeLevel) 181 return false; 182 if (matchedProperties.fromStyleAttribute == FromStyleAttribute::Yes) 183 return true; 184 return matchedProperties.cascadeLayerPriority > *m_maximumCascadeLayerPriorityForRollback; 183 return matchedProperties.cascadeLayerPriority <= *m_maximumCascadeLayerPriorityForRollback; 185 184 }; 186 if ( skipForRollback())185 if (m_maximumCascadeLayerPriorityForRollback && !includePropertiesForRollback()) 187 186 return false; 188 187 -
trunk/Source/WebCore/style/PropertyCascade.h
r293622 r293725 42 42 43 43 PropertyCascade(const MatchResult&, CascadeLevel, IncludedProperties); 44 PropertyCascade(const PropertyCascade&, CascadeLevel, std::optional< CascadeLayerPriority> maximumCascadeLayerPriorityForRollback = { });44 PropertyCascade(const PropertyCascade&, CascadeLevel, std::optional<ScopeOrdinal> rollbackScope = { }, std::optional<CascadeLayerPriority> maximumCascadeLayerPriorityForRollback = { }); 45 45 46 46 ~PropertyCascade(); … … 86 86 const IncludedProperties m_includedProperties; 87 87 const CascadeLevel m_maximumCascadeLevel; 88 const std::optional<ScopeOrdinal> m_rollbackScope; 88 89 const std::optional<CascadeLayerPriority> m_maximumCascadeLayerPriorityForRollback; 89 90 -
trunk/Source/WebCore/style/StyleBuilder.cpp
r293563 r293725 389 389 --rollbackCascadeLevel; 390 390 391 auto key = makeRollbackCascadeKey(rollbackCascadeLevel , 0);391 auto key = makeRollbackCascadeKey(rollbackCascadeLevel); 392 392 return m_rollbackCascades.ensure(key, [&] { 393 393 return makeUnique<const PropertyCascade>(m_cascade, rollbackCascadeLevel); … … 408 408 --rollbackLayerPriority; 409 409 410 auto key = makeRollbackCascadeKey(property.cascadeLevel, rollbackLayerPriority);410 auto key = makeRollbackCascadeKey(property.cascadeLevel, property.styleScopeOrdinal, rollbackLayerPriority); 411 411 return m_rollbackCascades.ensure(key, [&] { 412 return makeUnique<const PropertyCascade>(m_cascade, property.cascadeLevel, rollbackLayerPriority);412 return makeUnique<const PropertyCascade>(m_cascade, property.cascadeLevel, property.styleScopeOrdinal, rollbackLayerPriority); 413 413 }).iterator->value.get(); 414 414 } 415 415 416 auto Builder::makeRollbackCascadeKey(CascadeLevel cascadeLevel, CascadeLayerPriority cascadeLayerPriority) -> RollbackCascadeKey417 { 418 return { static_cast<unsigned>(cascadeLevel), static_cast<unsigned>( cascadeLayerPriority) };419 } 420 421 } 422 } 416 auto Builder::makeRollbackCascadeKey(CascadeLevel cascadeLevel, ScopeOrdinal scopeOrdinal, CascadeLayerPriority cascadeLayerPriority) -> RollbackCascadeKey 417 { 418 return { static_cast<unsigned>(cascadeLevel), static_cast<unsigned>(scopeOrdinal), static_cast<unsigned>(cascadeLayerPriority) }; 419 } 420 421 } 422 } -
trunk/Source/WebCore/style/StyleBuilder.h
r293563 r293725 66 66 const PropertyCascade* ensureRollbackCascadeForRevertLayer(); 67 67 68 using RollbackCascadeKey = std:: pair<unsigned, unsigned>;69 RollbackCascadeKey makeRollbackCascadeKey(CascadeLevel, CascadeLayerPriority);68 using RollbackCascadeKey = std::tuple<unsigned, unsigned, unsigned>; 69 RollbackCascadeKey makeRollbackCascadeKey(CascadeLevel, ScopeOrdinal = ScopeOrdinal::Element, CascadeLayerPriority = 0); 70 70 71 71 const PropertyCascade m_cascade;
Note: See TracChangeset
for help on using the changeset viewer.