| Index: Source/core/css/resolver/StyleBuilderConverter.cpp
 | 
| diff --git a/Source/core/css/resolver/StyleBuilderConverter.cpp b/Source/core/css/resolver/StyleBuilderConverter.cpp
 | 
| index ce5f709da7bbfb671930d1f24eb580c82ea40550..5558a005ed722e72a24e5c32caab746ad0c5cffa 100644
 | 
| --- a/Source/core/css/resolver/StyleBuilderConverter.cpp
 | 
| +++ b/Source/core/css/resolver/StyleBuilderConverter.cpp
 | 
| @@ -935,4 +935,67 @@ Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
 | 
|      return coordinates;
 | 
|  }
 | 
|  
 | 
| +PassRefPtr<TranslateTransformOperation> StyleBuilderConverter::convertTranslate(StyleResolverState& state, CSSValue* value)
 | 
| +{
 | 
| +    CSSValueList* list = toCSSValueList(value);
 | 
| +    ASSERT(list->length() >= 1 && list->length() <= 3);
 | 
| +    Length tx = toCSSPrimitiveValue(list->item(0))->convertToLength(state.cssToLengthConversionData());
 | 
| +    Length ty(0, Fixed);
 | 
| +    double tz = 0;
 | 
| +    TransformOperation::OperationType type = TransformOperation::TranslateX;
 | 
| +
 | 
| +    if (list->length() >= 2) {
 | 
| +        ty = toCSSPrimitiveValue(list->item(1))->convertToLength(state.cssToLengthConversionData());
 | 
| +        type = TransformOperation::Translate;
 | 
| +    }
 | 
| +    if (list->length() == 3) {
 | 
| +        tz = toCSSPrimitiveValue(list->item(2))->getDoubleValue();
 | 
| +        type = TransformOperation::Translate3D;
 | 
| +    }
 | 
| +    return TranslateTransformOperation::create(tx, ty, tz, type);
 | 
| +}
 | 
| +
 | 
| +PassRefPtr<RotateTransformOperation> StyleBuilderConverter::convertRotate(StyleResolverState& state, CSSValue* value)
 | 
| +{
 | 
| +    CSSValueList* list = toCSSValueList(value);
 | 
| +    ASSERT(list->length() == 1 || list->length() == 4);
 | 
| +    double angle = toCSSPrimitiveValue(list->item(0))->computeDegrees();
 | 
| +    double x = 0;
 | 
| +    double y = 0;
 | 
| +    double z = 1;
 | 
| +    if (list->length() == 4) {
 | 
| +        x = toCSSPrimitiveValue(list->item(1))->getDoubleValue();
 | 
| +        y = toCSSPrimitiveValue(list->item(2))->getDoubleValue();
 | 
| +        z = toCSSPrimitiveValue(list->item(3))->getDoubleValue();
 | 
| +    }
 | 
| +
 | 
| +    TransformOperation::OperationType type = (x == 0 && y == 0 && z == 1) ? TransformOperation::Rotate : TransformOperation::Rotate3D;
 | 
| +
 | 
| +    return RotateTransformOperation::create(x, y, z, angle, type);
 | 
| +}
 | 
| +
 | 
| +PassRefPtr<ScaleTransformOperation> StyleBuilderConverter::convertScale(StyleResolverState& state, CSSValue* value)
 | 
| +{
 | 
| +    CSSValueList* list = toCSSValueList(value);
 | 
| +    ASSERT(list->length() >= 1 && list->length() <= 3);
 | 
| +    double sx = toCSSPrimitiveValue(list->item(0))->getDoubleValue();
 | 
| +    double sy = 1;
 | 
| +    double sz = 1;
 | 
| +    if (list->length() >= 2 && list->length() <= 3)
 | 
| +        sy = toCSSPrimitiveValue(list->item(1))->getDoubleValue();
 | 
| +    if (list->length() == 3)
 | 
| +        sz = toCSSPrimitiveValue(list->item(2))->getDoubleValue();
 | 
| +
 | 
| +    TransformOperation::OperationType type;
 | 
| +    if (sz == 1) {
 | 
| +        if (sy == 1)
 | 
| +            type = TransformOperation::ScaleX;
 | 
| +        else
 | 
| +            type = TransformOperation::Scale;
 | 
| +    } else {
 | 
| +        type = TransformOperation::Scale3D;
 | 
| +    }
 | 
| +    return ScaleTransformOperation::create(sx, sy, sz, type);
 | 
| +}
 | 
| +
 | 
|  } // namespace blink
 | 
| 
 |