| Index: Source/core/style/StyleTransformData.cpp | 
| diff --git a/Source/core/style/StyleTransformData.cpp b/Source/core/style/StyleTransformData.cpp | 
| index f9f35a5780f5b2d2499175884d2824d24dfc5b6d..2882ce567dd21ef5eb45c5ea8d5da37fef3a4cb8 100644 | 
| --- a/Source/core/style/StyleTransformData.cpp | 
| +++ b/Source/core/style/StyleTransformData.cpp | 
| @@ -23,6 +23,7 @@ | 
| #include "core/style/StyleTransformData.h" | 
|  | 
| #include "core/style/ComputedStyle.h" | 
| +#include "core/style/DataEquivalency.h" | 
|  | 
| namespace blink { | 
|  | 
| @@ -38,12 +39,28 @@ StyleTransformData::StyleTransformData(const StyleTransformData& o) | 
| , m_operations(o.m_operations) | 
| , m_origin(o.m_origin) | 
| , m_motion(o.m_motion) | 
| +    , m_translate(o.m_translate) | 
| +    , m_rotate(o.m_rotate) | 
| +    , m_scale(o.m_scale) | 
| { | 
| } | 
|  | 
| bool StyleTransformData::operator==(const StyleTransformData& o) const | 
| { | 
| -    return m_origin == o.m_origin && m_operations == o.m_operations && m_motion == o.m_motion; | 
| +    return m_origin == o.m_origin | 
| +        && m_operations == o.m_operations | 
| +        && m_motion == o.m_motion | 
| +        && dataEquivalent<TransformOperation>(m_translate, o.m_translate) | 
| +        && dataEquivalent<TransformOperation>(m_rotate, o.m_rotate) | 
| +        && dataEquivalent<TransformOperation>(m_scale, o.m_scale); | 
| +} | 
| + | 
| +bool StyleTransformData::has3DTransform() const | 
| +{ | 
| +    return m_operations.has3DOperation() | 
| +        || (m_translate && m_translate->z() != 0) | 
| +        || (m_rotate && (m_rotate->x() != 0 || m_rotate->y() != 0)) | 
| +        || (m_scale && m_scale->z() != 1); | 
| } | 
|  | 
| } // namespace blink | 
|  |