Changeset 276080 in webkit
- Timestamp:
- Apr 15, 2021, 3:44:06 PM (5 years ago)
- Location:
- branches/safari-611-branch
- Files:
-
- 2 added
- 4 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/animation/pseudo-element-style-adjuster-expected.html (added)
-
LayoutTests/fast/animation/pseudo-element-style-adjuster.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/style/StyleTreeResolver.cpp (modified) (7 diffs)
-
Source/WebCore/style/StyleTreeResolver.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-611-branch/LayoutTests/ChangeLog
r276067 r276080 1 2021-04-15 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r275277. rdar://problem/76375504 4 5 Animated pseudo element style resolved against wrong parent style 6 https://bugs.webkit.org/show_bug.cgi?id=223990 7 rdar://74997361 8 9 Reviewed by Antoine Quint. 10 Source/WebCore: 11 12 In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack. 13 This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack. 14 15 This matters in style adjuster which may apply wrong adjustments as a result. 16 17 Test: fast/animation/pseudo-element-style-adjuster.html 18 19 * style/StyleTreeResolver.cpp: 20 (WebCore::Style::TreeResolver::resolveElement): 21 (WebCore::Style::TreeResolver::resolvePseudoStyle): 22 (WebCore::Style::TreeResolver::createAnimatedElementUpdate): 23 24 Make static and provide the parent and parent box styles as parameters. 25 26 * style/StyleTreeResolver.h: 27 28 LayoutTests: 29 30 * fast/animation/pseudo-element-style-adjuster-expected.html: Added. 31 * fast/animation/pseudo-element-style-adjuster.html: Added. 32 33 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275277 268f45cc-cd09-0410-ab3c-d52691b4dbfc 34 35 2021-03-31 Antti Koivisto <antti@apple.com> 36 37 Animated pseudo element style resolved against wrong parent style 38 https://bugs.webkit.org/show_bug.cgi?id=223990 39 rdar://74997361 40 41 Reviewed by Antoine Quint. 42 43 * fast/animation/pseudo-element-style-adjuster-expected.html: Added. 44 * fast/animation/pseudo-element-style-adjuster.html: Added. 45 1 46 2021-04-15 Russell Epstein <repstein@apple.com> 2 47 -
branches/safari-611-branch/Source/WebCore/ChangeLog
r276076 r276080 1 2021-04-15 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r275277. rdar://problem/76375504 4 5 Animated pseudo element style resolved against wrong parent style 6 https://bugs.webkit.org/show_bug.cgi?id=223990 7 rdar://74997361 8 9 Reviewed by Antoine Quint. 10 Source/WebCore: 11 12 In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack. 13 This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack. 14 15 This matters in style adjuster which may apply wrong adjustments as a result. 16 17 Test: fast/animation/pseudo-element-style-adjuster.html 18 19 * style/StyleTreeResolver.cpp: 20 (WebCore::Style::TreeResolver::resolveElement): 21 (WebCore::Style::TreeResolver::resolvePseudoStyle): 22 (WebCore::Style::TreeResolver::createAnimatedElementUpdate): 23 24 Make static and provide the parent and parent box styles as parameters. 25 26 * style/StyleTreeResolver.h: 27 28 LayoutTests: 29 30 * fast/animation/pseudo-element-style-adjuster-expected.html: Added. 31 * fast/animation/pseudo-element-style-adjuster.html: Added. 32 33 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275277 268f45cc-cd09-0410-ab3c-d52691b4dbfc 34 35 2021-03-31 Antti Koivisto <antti@apple.com> 36 37 Animated pseudo element style resolved against wrong parent style 38 https://bugs.webkit.org/show_bug.cgi?id=223990 39 rdar://74997361 40 41 Reviewed by Antoine Quint. 42 43 In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack. 44 This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack. 45 46 This matters in style adjuster which may apply wrong adjustments as a result. 47 48 Test: fast/animation/pseudo-element-style-adjuster.html 49 50 * style/StyleTreeResolver.cpp: 51 (WebCore::Style::TreeResolver::resolveElement): 52 (WebCore::Style::TreeResolver::resolvePseudoStyle): 53 (WebCore::Style::TreeResolver::createAnimatedElementUpdate): 54 55 Make static and provide the parent and parent box styles as parameters. 56 57 * style/StyleTreeResolver.h: 58 1 59 2021-04-15 Russell Epstein <repstein@apple.com> 2 60 -
branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.cpp
r273177 r276080 222 222 } 223 223 224 auto update = createAnimatedElementUpdate(WTFMove(newStyle), styleable, parent().change );224 auto update = createAnimatedElementUpdate(WTFMove(newStyle), styleable, parent().change, parent().style, parentBoxStyle()); 225 225 auto descendantsToResolve = computeDescendantsToResolve(update.change, element.styleValidity(), parent().descendantsToResolve); 226 226 … … 278 278 if (!elementUpdate.style->hasPseudoStyle(pseudoId)) 279 279 return { }; 280 281 auto pseudoStyle = scope().resolver.pseudoStyleForElement(element, { pseudoId }, *elementUpdate.style, parentBoxStyleForPseudo(elementUpdate), &scope().selectorFilter); 280 281 auto& parentStyle = *elementUpdate.style; 282 auto* parentBoxStyle = parentBoxStyleForPseudo(elementUpdate); 283 284 auto pseudoStyle = scope().resolver.pseudoStyleForElement(element, { pseudoId }, parentStyle, parentBoxStyle, &scope().selectorFilter); 282 285 if (!pseudoStyle) 283 286 return { }; … … 287 290 return { }; 288 291 289 return createAnimatedElementUpdate(WTFMove(pseudoStyle), { element, pseudoId }, elementUpdate.change );292 return createAnimatedElementUpdate(WTFMove(pseudoStyle), { element, pseudoId }, elementUpdate.change, parentStyle, parentBoxStyle); 290 293 } 291 294 … … 316 319 } 317 320 318 ElementUpdate TreeResolver::createAnimatedElementUpdate(std::unique_ptr<RenderStyle> newStyle, const Styleable& styleable, Change parentChange )321 ElementUpdate TreeResolver::createAnimatedElementUpdate(std::unique_ptr<RenderStyle> newStyle, const Styleable& styleable, Change parentChange, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle) 319 322 { 320 323 auto& element = styleable.element; 324 auto& document = element.document(); 321 325 auto* oldStyle = element.renderOrDisplayContentsStyle(styleable.pseudoId); 322 326 … … 326 330 // on the document timeline. Note that we get timeline() on the Document here because we need a timeline created 327 331 // in case no Web Animations have been created through the JS API. 328 if ( element.document().backForwardCacheState() == Document::NotInBackForwardCache && !element.document().renderView()->printing()) {332 if (document.backForwardCacheState() == Document::NotInBackForwardCache && !document.renderView()->printing()) { 329 333 if (oldStyle && (oldStyle->hasTransitions() || newStyle->hasTransitions())) 330 m_document.timeline().updateCSSTransitionsForStyleable(styleable, *oldStyle, *newStyle);334 document.timeline().updateCSSTransitionsForStyleable(styleable, *oldStyle, *newStyle); 331 335 332 336 // The order in which CSS Transitions and CSS Animations are updated matters since CSS Transitions define the after-change style … … 337 341 scope().resolver.setParentElementStyleForKeyframes(&parent().style); 338 342 339 m_document.timeline().updateCSSAnimationsForStyleable(styleable, oldStyle, *newStyle );343 m_document.timeline().updateCSSAnimationsForStyleable(styleable, oldStyle, *newStyle, &parentStyle); 340 344 341 345 scope().resolver.setParentElementStyleForKeyframes(nullptr); … … 351 355 // Apply all keyframe effects to the new style. 352 356 auto animatedStyle = RenderStyle::clonePtr(*newStyle); 353 animationImpact = styleable.applyKeyframeEffects(*animatedStyle, *previousLastStyleChangeEventStyle );357 animationImpact = styleable.applyKeyframeEffects(*animatedStyle, *previousLastStyleChangeEventStyle, &parentStyle); 354 358 newStyle = WTFMove(animatedStyle); 355 359 356 Adjuster adjuster( m_document, parent().style, parentBoxStyle(), styleable.pseudoId == PseudoId::None ? &element : nullptr);360 Adjuster adjuster(document, parentStyle, parentBoxStyle, styleable.pseudoId == PseudoId::None ? &element : nullptr); 357 361 adjuster.adjustAnimatedStyle(*newStyle, animationImpact); 358 362 } else -
branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.h
r270837 r276080 62 62 ElementUpdates resolveElement(Element&); 63 63 64 ElementUpdate createAnimatedElementUpdate(std::unique_ptr<RenderStyle>, const Styleable&, Change);64 static ElementUpdate createAnimatedElementUpdate(std::unique_ptr<RenderStyle>, const Styleable&, Change, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle); 65 65 Optional<ElementUpdate> resolvePseudoStyle(Element&, const ElementUpdate&, PseudoId); 66 66
Note:
See TracChangeset
for help on using the changeset viewer.