| 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_;
 | 
|  };
 | 
| 
 |