Index: Source/core/css/resolver/CSSToStyleMap.cpp |
diff --git a/Source/core/css/resolver/CSSToStyleMap.cpp b/Source/core/css/resolver/CSSToStyleMap.cpp |
index 04622787915d680a92a983f62357410b1f12ba7a..28e4e8e636dff8fb4236cd9f8026fe3365b7b17b 100644 |
--- a/Source/core/css/resolver/CSSToStyleMap.cpp |
+++ b/Source/core/css/resolver/CSSToStyleMap.cpp |
@@ -479,6 +479,9 @@ PassRefPtr<TimingFunction> CSSToStyleMap::animationTimingFunction(CSSValue* valu |
case CSSValueStepStart: |
return StepsTimingFunction::preset(StepsTimingFunction::Start); |
break; |
+ case CSSValueStepMiddle: |
+ return StepsTimingFunction::preset(StepsTimingFunction::Middle); |
+ break; |
case CSSValueStepEnd: |
return StepsTimingFunction::preset(StepsTimingFunction::End); |
break; |
@@ -493,7 +496,7 @@ PassRefPtr<TimingFunction> CSSToStyleMap::animationTimingFunction(CSSValue* valu |
return CubicBezierTimingFunction::create(cubicTimingFunction->x1(), cubicTimingFunction->y1(), cubicTimingFunction->x2(), cubicTimingFunction->y2()); |
} else if (value->isStepsTimingFunctionValue()) { |
CSSStepsTimingFunctionValue* stepsTimingFunction = toCSSStepsTimingFunctionValue(value); |
- return StepsTimingFunction::create(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart()); |
+ return StepsTimingFunction::create(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtPosition()); |
} |
return nullptr; |
@@ -502,8 +505,15 @@ PassRefPtr<TimingFunction> CSSToStyleMap::animationTimingFunction(CSSValue* valu |
void CSSToStyleMap::mapAnimationTimingFunction(CSSAnimationData* animation, CSSValue* value) const |
{ |
RefPtr<TimingFunction> timingFunction = animationTimingFunction(value, true); |
- if (timingFunction) |
- animation->setTimingFunction(timingFunction); |
+ if (timingFunction) { |
+ // Step middle timing functions are supported up to this point for use in the Web Animations API, |
+ // but should not be supported for CSS Animations and Transitions. |
+ bool isStepMiddleFunction = (timingFunction->type() == TimingFunction::StepsFunction) && (toStepsTimingFunction(*timingFunction).stepAtPosition() == StepsTimingFunction::StepAtMiddle); |
+ if (isStepMiddleFunction) |
+ animation->setTimingFunction(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease)); |
+ else |
+ animation->setTimingFunction(timingFunction); |
+ } |
} |
void CSSToStyleMap::mapNinePieceImage(RenderStyle* mutableStyle, CSSPropertyID property, CSSValue* value, NinePieceImage& image) |