| Index: Source/core/css/resolver/AnimatedStyleBuilder.cpp | 
| diff --git a/Source/core/css/resolver/AnimatedStyleBuilder.cpp b/Source/core/css/resolver/AnimatedStyleBuilder.cpp | 
| index 50f2f24cc60ba6c4bc0fa906c0fac3289b3be256..3a6b0ff0188bc1211c943179821bf4b13b58fb27 100644 | 
| --- a/Source/core/css/resolver/AnimatedStyleBuilder.cpp | 
| +++ b/Source/core/css/resolver/AnimatedStyleBuilder.cpp | 
| @@ -225,6 +225,26 @@ void setOnFillLayers(FillLayer* fillLayer, const AnimatableValue* value, StyleRe | 
| } | 
| } | 
|  | 
| +FontStretch animatableValueToFontStretch(const AnimatableValue* value) | 
| +{ | 
| +    ASSERT(FontStretchUltraCondensed == 1 && FontStretchUltraExpanded == 9); | 
| +    unsigned index = round(toAnimatableDouble(value)->toDouble()) - 1; | 
| +    static const FontStretch stretchValues[] = { | 
| +        FontStretchUltraCondensed, | 
| +        FontStretchExtraCondensed, | 
| +        FontStretchCondensed, | 
| +        FontStretchSemiCondensed, | 
| +        FontStretchNormal, | 
| +        FontStretchSemiExpanded, | 
| +        FontStretchExpanded, | 
| +        FontStretchExtraExpanded, | 
| +        FontStretchUltraExpanded | 
| +    }; | 
| + | 
| +    index = clampTo<unsigned>(index, 0, WTF_ARRAY_LENGTH(stretchValues) - 1); | 
| +    return stretchValues[index]; | 
| +} | 
| + | 
| FontWeight animatableValueToFontWeight(const AnimatableValue* value) | 
| { | 
| int index = round(toAnimatableDouble(value)->toDouble() / 100) - 1; | 
| @@ -372,6 +392,9 @@ void AnimatedStyleBuilder::applyProperty(CSSPropertyID property, StyleResolverSt | 
| case CSSPropertyFontSize: | 
| style->setFontSize(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); | 
| return; | 
| +    case CSSPropertyFontStretch: | 
| +        style->setFontStretch(animatableValueToFontStretch(value)); | 
| +        return; | 
| case CSSPropertyFontWeight: | 
| style->setFontWeight(animatableValueToFontWeight(value)); | 
| return; | 
|  |