Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6778ef1c00cecfa2d9a145d371db33d01fd3a388
https://github.com/WebKit/WebKit/commit/6778ef1c00cecfa2d9a145d371db33d01fd3a388
Author: Antoine Quint <[email protected]>
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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes