| Index: Source/core/animation/DeferredLegacyStyleInterpolation.cpp
|
| diff --git a/Source/core/animation/DeferredLegacyStyleInterpolation.cpp b/Source/core/animation/DeferredLegacyStyleInterpolation.cpp
|
| index 5fe96f9d0dd40a0ba946a75c725f4bfe9aa2dddc..ebf8432a7c29fdfe66b6be30a36778cbd5aac23a 100644
|
| --- a/Source/core/animation/DeferredLegacyStyleInterpolation.cpp
|
| +++ b/Source/core/animation/DeferredLegacyStyleInterpolation.cpp
|
| @@ -22,10 +22,19 @@ namespace blink {
|
| void DeferredLegacyStyleInterpolation::apply(StyleResolverState& state) const
|
| {
|
| if (m_outdated || !state.element()->elementAnimations() || !state.element()->elementAnimations()->isAnimationStyleChange()) {
|
| - m_innerInterpolation = LegacyStyleInterpolation::create(
|
| - StyleResolver::createAnimatableValueSnapshot(state, m_id, m_startCSSValue.get()),
|
| - StyleResolver::createAnimatableValueSnapshot(state, m_id, m_endCSSValue.get()),
|
| - m_id);
|
| + RefPtrWillBeRawPtr<AnimatableValue> startAnimatableValue;
|
| + RefPtrWillBeRawPtr<AnimatableValue> endAnimatableValue;
|
| +
|
| + // Snapshot underlying values for neutral keyframes first because non-neutral keyframes will mutate the StyleResolverState.
|
| + if (!m_endCSSValue) {
|
| + endAnimatableValue = StyleResolver::createAnimatableValueSnapshot(state, m_id, m_endCSSValue.get());
|
| + startAnimatableValue = StyleResolver::createAnimatableValueSnapshot(state, m_id, m_startCSSValue.get());
|
| + } else {
|
| + startAnimatableValue = StyleResolver::createAnimatableValueSnapshot(state, m_id, m_startCSSValue.get());
|
| + endAnimatableValue = StyleResolver::createAnimatableValueSnapshot(state, m_id, m_endCSSValue.get());
|
| + }
|
| +
|
| + m_innerInterpolation = LegacyStyleInterpolation::create(startAnimatableValue, endAnimatableValue, m_id);
|
| m_outdated = false;
|
| }
|
|
|
|
|