Index: third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp |
diff --git a/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp |
index fa1abf6b151d276bbd55e1852d7b310f3a6a0c8d..008414c7d7df9f7c8e130937e963056f6e48b30d 100644 |
--- a/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp |
+++ b/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp |
@@ -30,9 +30,8 @@ class CSSVisibilityNonInterpolableValue : public NonInterpolableValue { |
return m_start; |
if (fraction >= 1) |
return m_end; |
- if (m_start == EVisibility::kVisible || m_end == EVisibility::kVisible) |
- return EVisibility::kVisible; |
- return fraction < 0.5 ? m_start : m_end; |
+ DCHECK(m_start == EVisibility::kVisible || m_end == EVisibility::kVisible); |
+ return EVisibility::kVisible; |
} |
DECLARE_NON_INTERPOLABLE_VALUE_TYPE(); |
@@ -161,13 +160,23 @@ CSSVisibilityInterpolationType::maybeConvertStandardPropertyUnderlyingValue( |
PairwiseInterpolationValue CSSVisibilityInterpolationType::maybeMergeSingles( |
InterpolationValue&& start, |
InterpolationValue&& end) const { |
- return PairwiseInterpolationValue( |
- InterpolableNumber::create(0), InterpolableNumber::create(1), |
- CSSVisibilityNonInterpolableValue::create( |
- toCSSVisibilityNonInterpolableValue(*start.nonInterpolableValue) |
- .visibility(), |
- toCSSVisibilityNonInterpolableValue(*end.nonInterpolableValue) |
- .visibility())); |
+ EVisibility startVisibility = |
+ toCSSVisibilityNonInterpolableValue(*start.nonInterpolableValue) |
+ .visibility(); |
+ EVisibility endVisibility = |
+ toCSSVisibilityNonInterpolableValue(*end.nonInterpolableValue) |
+ .visibility(); |
+ // One side must be "visible". |
+ // Spec: https://drafts.csswg.org/css-transitions/#animtype-visibility |
+ if (startVisibility != endVisibility && |
+ startVisibility != EVisibility::kVisible && |
+ endVisibility != EVisibility::kVisible) { |
+ return nullptr; |
+ } |
+ return PairwiseInterpolationValue(InterpolableNumber::create(0), |
+ InterpolableNumber::create(1), |
+ CSSVisibilityNonInterpolableValue::create( |
+ startVisibility, endVisibility)); |
} |
void CSSVisibilityInterpolationType::composite( |