Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6778ef1c00cecfa2d9a145d371db33d01fd3a388
      
https://github.com/WebKit/WebKit/commit/6778ef1c00cecfa2d9a145d371db33d01fd3a388
  Author: Antoine Quint <grao...@webkit.org>
  Date:   2024-03-21 (Thu, 21 Mar 2024)

  Changed paths:
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/display-interpolation-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/display-none-dont-cancel.tentative-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-display/animations/display-interpolation-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/display.tentative-expected.txt
    M Source/WebCore/animation/KeyframeEffect.cpp
    M Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
    M Source/WebCore/style/StyleTreeResolver.cpp
    M Source/WebCore/style/StyleUpdate.h
    M Source/WebCore/style/Styleable.cpp

  Log Message:
  -----------
  [web-animations] account for `display` animations when resolving style
https://bugs.webkit.org/show_bug.cgi?id=271386

Reviewed by Antti Koivisto.

While we added animation support for the `display` property in bug 271372 / 
276464@main, we are
not yet fully accounting for the possibility that the `display` property is 
animated when resolving
styles in Style::TreeResolver.

There are some subtleties there since, historically, transitions could not be 
started on an element
with `display: none` and setting `display: none` on an element with running 
style-originated animations
would cancel those animations.

In this patch we now call `createAnimatedElementUpdate()` under 
`Style::TreeResolver::resolveElement()`
even when the non-animated style has `display: none`. Within 
`createAnimatedElementUpdate()`, we now
keep track of the non-animated `display` value prior to updating animations, 
and when we're done compare
this value to its animated counterpart to determine whether animations affected 
`display`.

If after updating animations `display: none` is set and that value was not 
affected by animations, we
cancel any animation created in the process silently (see bug 271365 / 
276453@main) such that Web content
may not observe that those animations ever were created.

We also make sure to keep track of whether `display` was affected by updating 
animations as a new member
of the `ElementUpdate` struct such that when updating renderers in 
`RenderTreeUpdater::updateElementRenderer()`
we only cancel style-originated animations with a `display: none` style if that 
that `display` value did not
come from an animation. Otherwise, style-originated animations setting 
`display: none` would cancel themselves.

These changes allow us to pass the remainder of the WPT test coverage for 
animating `display`.

* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/display-interpolation-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/display-none-dont-cancel.tentative-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-display/animations/display-interpolation-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/display.tentative-expected.txt:
* Source/WebCore/animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::ticksContinuouslyWhileActive const):
* Source/WebCore/rendering/updating/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::updateElementRenderer):
* Source/WebCore/style/StyleTreeResolver.cpp:
(WebCore::Style::affectsRenderedSubtree):
(WebCore::Style::TreeResolver::resolveElement):
(WebCore::Style::TreeResolver::createAnimatedElementUpdate):
* Source/WebCore/style/StyleUpdate.h:
* Source/WebCore/style/Styleable.cpp:
(WebCore::Styleable::updateCSSAnimations const):
(WebCore::Styleable::updateCSSTransitions const):

Canonical link: https://commits.webkit.org/276531@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to