Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5c0b3cb4b2450bcc60e21f512306aaaa56e3e9b3
      
https://github.com/WebKit/WebKit/commit/5c0b3cb4b2450bcc60e21f512306aaaa56e3e9b3
  Author: Antoine Quint <[email protected]>
  Date:   2022-11-20 (Sun, 20 Nov 2022)

  Changed paths:
    A 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-css-variable-in-keyframe-adjusted-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-css-variable-in-keyframe-adjusted.html
    M 
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-filling-expected.txt
    M Source/WebCore/animation/KeyframeEffect.cpp
    M Source/WebCore/animation/KeyframeEffect.h
    M Source/WebCore/animation/KeyframeEffectStack.cpp
    M Source/WebCore/css/CSSKeyframeRule.cpp
    M Source/WebCore/css/CSSKeyframeRule.h
    M Source/WebCore/style/StyleResolver.cpp
    M Source/WebCore/style/StyleResolver.h

  Log Message:
  -----------
  [web-animations] keyframes should be recomputed if used CSS variable changes
https://bugs.webkit.org/show_bug.cgi?id=248145

Reviewed by Antti Koivisto.

When the value for a CSS variable changes, we must ensure that any set of 
keyframes that use that CSS variable
are recomputed, whether the animation is a CSS Animation of a script-originated 
animation. This does not apply
to CSS Transitions which would operate on resolved values in RenderStyle.

To do this we add a StyleRuleKeyframe::containsCSSVariableReferences() method 
which indicates whether a keyframe
rule contains CSS variables. Then, we add a similar method on KeyframeEffect 
returning the boolean flag computed
resolving keyframes in KeyframeEffect::computeCSSAnimationBlendingKeyframes(), 
for the CSS Animations case, and
KeyframeEffect::updateBlendingKeyframes(), for the script-originated animation 
case.

Then in KeyframeEffectStack::applyKeyframeEffects(), much like we do for 
detecting changes made to font-size, we
check whether any CSS variable (or custom property in WebCore parlance) has 
changed and recompute keyframes if that
is the case.

We now pass the final two subtests in 
web-animations/animation-model/keyframe-effects/effect-value-context-filling.html
and since those tests only test the script-originated animation case, we also 
add a new test in css/css-animations
to test the CSS Animations case.

* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-css-variable-in-keyframe-adjusted-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-css-variable-in-keyframe-adjusted.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-filling-expected.txt:
* Source/WebCore/animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::updateBlendingKeyframes):
(WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes):
* Source/WebCore/animation/KeyframeEffect.h:
(WebCore::KeyframeEffect::containsCSSVariableReferences const):
* Source/WebCore/animation/KeyframeEffectStack.cpp:
(WebCore::KeyframeEffectStack::applyKeyframeEffects):
* Source/WebCore/css/CSSKeyframeRule.cpp:
(WebCore::StyleRuleKeyframe::containsCSSVariableReferences const):
* Source/WebCore/css/CSSKeyframeRule.h:
* Source/WebCore/style/StyleResolver.cpp:
(WebCore::Style::Resolver::keyframeStylesForAnimation):
* Source/WebCore/style/StyleResolver.h:

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to