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