| Index: Source/core/css/parser/CSSPropertyParser.cpp | 
| diff --git a/Source/core/css/parser/CSSPropertyParser.cpp b/Source/core/css/parser/CSSPropertyParser.cpp | 
| index 8b082c78598b56264b1ab0d8053348048309681e..3ffb7ac7299486d0bea03d78e72e13fd673bf4d8 100644 | 
| --- a/Source/core/css/parser/CSSPropertyParser.cpp | 
| +++ b/Source/core/css/parser/CSSPropertyParser.cpp | 
| @@ -1093,6 +1093,78 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import | 
| addProperty(propId, list.release(), important); | 
| return true; | 
| } | 
| + | 
| +    case CSSPropertyTranslate: { | 
| +        // translate : [ <length> | <percentage> ] [[ <length> | <percentage> ] <length>? ]? | 
| +        // defaults to 0 on all axis, note that the last value CANNOT be a percentage | 
| +        ASSERT(RuntimeEnabledFeatures::cssIndependentTransformPropertiesEnabled()); | 
| +        RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); | 
| +        if (!validUnit(value, FLength | FPercent)) | 
| +            return false; | 
| + | 
| +        list->append(createPrimitiveNumericValue(value)); | 
| +        value = m_valueList->next(); | 
| + | 
| +        if (value) { | 
| +            if (!validUnit(value, FLength | FPercent)) | 
| +                return false; | 
| + | 
| +            list->append(createPrimitiveNumericValue(value)); | 
| +            value = m_valueList->next(); | 
| + | 
| +            if (value) { | 
| +                if (!validUnit(value, FLength)) | 
| +                    return false; | 
| + | 
| +                list->append(createPrimitiveNumericValue(value)); | 
| +                value = m_valueList->next(); | 
| +            } | 
| +        } | 
| + | 
| +        parsedValue = list.release(); | 
| +        break; | 
| +    } | 
| + | 
| +    case CSSPropertyRotate: { // rotate : <angle> <number>{3}? defaults to a 0 0 1 | 
| +        ASSERT(RuntimeEnabledFeatures::cssIndependentTransformPropertiesEnabled()); | 
| +        RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); | 
| + | 
| +        if (!validUnit(value, FAngle)) | 
| +            return false; | 
| +        list->append(createPrimitiveNumericValue(value)); | 
| +        value = m_valueList->next(); | 
| + | 
| +        if (!value) { | 
| +            parsedValue = list.release(); | 
| +            break; | 
| +        } | 
| + | 
| +        for (unsigned i = 0; i < 3; i++) { // 3 dimensions of rotation | 
| +            if (!value || !validUnit(value, FNumber)) | 
| +                return false; | 
| +            list->append(createPrimitiveNumericValue(value)); | 
| +            value = m_valueList->next(); | 
| +        } | 
| + | 
| +        parsedValue = list.release(); | 
| +        break; | 
| +    } | 
| + | 
| +    case CSSPropertyScale: { // scale: <number>{1,3}, default scale for all axis is 1 | 
| +        ASSERT(RuntimeEnabledFeatures::cssIndependentTransformPropertiesEnabled()); | 
| +        RefPtrWillBeRawPtr<CSSValueList> scaleList = CSSValueList::createSpaceSeparated(); | 
| + | 
| +        for (unsigned i = 0; value && i < 3; i++) { // up to 3 dimensions of scale | 
| +            if (!validUnit(value, FNumber)) | 
| +                return false; | 
| +            scaleList->append(createPrimitiveNumericValue(value)); | 
| +            value = m_valueList->next(); | 
| +        } | 
| + | 
| +        parsedValue = scaleList.release(); | 
| +        break; | 
| +    } | 
| + | 
| case CSSPropertyWebkitPerspectiveOriginX: | 
| case CSSPropertyWebkitTransformOriginX: | 
| parsedValue = parseFillPositionX(m_valueList); | 
|  |