| Index: cc/output/filter_operation.h | 
| diff --git a/cc/output/filter_operation.h b/cc/output/filter_operation.h | 
| index f56176213b14081081361bfc546b544df885eb0d..f5c6a8264fa7eb87e0f57451f277b0bcdb6d7107 100644 | 
| --- a/cc/output/filter_operation.h | 
| +++ b/cc/output/filter_operation.h | 
| @@ -8,7 +8,9 @@ | 
| #include "base/logging.h" | 
| #include "base/memory/scoped_ptr.h" | 
| #include "cc/base/cc_export.h" | 
| +#include "skia/ext/refptr.h" | 
| #include "third_party/skia/include/core/SkColor.h" | 
| +#include "third_party/skia/include/core/SkImageFilter.h" | 
| #include "third_party/skia/include/core/SkScalar.h" | 
| #include "ui/gfx/point.h" | 
|  | 
| @@ -33,13 +35,19 @@ class CC_EXPORT FilterOperation { | 
| DROP_SHADOW, | 
| COLOR_MATRIX, | 
| ZOOM, | 
| +    REFERENCE, | 
| SATURATING_BRIGHTNESS,  // Not used in CSS/SVG. | 
| }; | 
|  | 
| +  FilterOperation(const FilterOperation& other); | 
| + | 
| +  ~FilterOperation(); | 
| + | 
| FilterType type() const { return type_; } | 
|  | 
| float amount() const { | 
| DCHECK_NE(type_, COLOR_MATRIX); | 
| +    DCHECK_NE(type_, REFERENCE); | 
| return amount_; | 
| } | 
|  | 
| @@ -53,6 +61,11 @@ class CC_EXPORT FilterOperation { | 
| return drop_shadow_color_; | 
| } | 
|  | 
| +  skia::RefPtr<SkImageFilter> image_filter() const { | 
| +    DCHECK_EQ(type_, REFERENCE); | 
| +    return image_filter_; | 
| +  } | 
| + | 
| const SkScalar* matrix() const { | 
| DCHECK_EQ(type_, COLOR_MATRIX); | 
| return matrix_; | 
| @@ -113,6 +126,11 @@ class CC_EXPORT FilterOperation { | 
| return FilterOperation(ZOOM, amount, inset); | 
| } | 
|  | 
| +  static FilterOperation CreateReferenceFilter( | 
| +      const skia::RefPtr<SkImageFilter>& image_filter) { | 
| +    return FilterOperation(REFERENCE, image_filter); | 
| +  } | 
| + | 
| static FilterOperation CreateSaturatingBrightnessFilter(float amount) { | 
| return FilterOperation(SATURATING_BRIGHTNESS, amount); | 
| } | 
| @@ -132,6 +150,7 @@ class CC_EXPORT FilterOperation { | 
|  | 
| void set_amount(float amount) { | 
| DCHECK_NE(type_, COLOR_MATRIX); | 
| +    DCHECK_NE(type_, REFERENCE); | 
| amount_ = amount; | 
| } | 
|  | 
| @@ -145,6 +164,11 @@ class CC_EXPORT FilterOperation { | 
| drop_shadow_color_ = color; | 
| } | 
|  | 
| +  void set_image_filter(const skia::RefPtr<SkImageFilter>& image_filter) { | 
| +    DCHECK_EQ(type_, REFERENCE); | 
| +    image_filter_ = image_filter; | 
| +  } | 
| + | 
| void set_matrix(const SkScalar matrix[20]) { | 
| DCHECK_EQ(type_, COLOR_MATRIX); | 
| for (unsigned i = 0; i < 20; ++i) | 
| @@ -180,10 +204,14 @@ class CC_EXPORT FilterOperation { | 
|  | 
| FilterOperation(FilterType type, float amount, int inset); | 
|  | 
| +  FilterOperation(FilterType type, | 
| +                  const skia::RefPtr<SkImageFilter>& image_filter); | 
| + | 
| FilterType type_; | 
| float amount_; | 
| gfx::Point drop_shadow_offset_; | 
| SkColor drop_shadow_color_; | 
| +  skia::RefPtr<SkImageFilter> image_filter_; | 
| SkScalar matrix_[20]; | 
| int zoom_inset_; | 
| }; | 
|  |