| Index: cc/surfaces/surface_aggregator.h
 | 
| diff --git a/cc/surfaces/surface_aggregator.h b/cc/surfaces/surface_aggregator.h
 | 
| index 1ff4a45804b1c69be5b43a151d2f664377592771..738aeec2a0bc003aa6ed5859f440cdc2049a0e25 100644
 | 
| --- a/cc/surfaces/surface_aggregator.h
 | 
| +++ b/cc/surfaces/surface_aggregator.h
 | 
| @@ -25,11 +25,20 @@ class Surface;
 | 
|  class SurfaceDrawQuad;
 | 
|  class SurfaceManager;
 | 
|  
 | 
| +class CC_SURFACES_EXPORT SurfaceAggregatorClient {
 | 
| + public:
 | 
| +  virtual ~SurfaceAggregatorClient() {}
 | 
| +
 | 
| +  virtual void AddSurface(Surface* surface) = 0;
 | 
| +  virtual void RemoveSurface(Surface* surface) = 0;
 | 
| +};
 | 
| +
 | 
|  class CC_SURFACES_EXPORT SurfaceAggregator {
 | 
|   public:
 | 
|    typedef base::hash_map<SurfaceId, int> SurfaceIndexMap;
 | 
|  
 | 
| -  SurfaceAggregator(SurfaceManager* manager,
 | 
| +  SurfaceAggregator(SurfaceAggregatorClient* client,
 | 
| +                    SurfaceManager* manager,
 | 
|                      ResourceProvider* provider,
 | 
|                      bool aggregate_only_damaged);
 | 
|    ~SurfaceAggregator();
 | 
| @@ -79,13 +88,16 @@ class CC_SURFACES_EXPORT SurfaceAggregator {
 | 
|  
 | 
|    // Remove Surfaces that were referenced before but aren't currently
 | 
|    // referenced from the ResourceProvider.
 | 
| -  void RemoveUnreferencedChildren();
 | 
| +  // Also notifies SurfaceAggregatorClient of newly added and removed
 | 
| +  // child surfaces.
 | 
| +  void ProcessAddedAndRemovedSurfaces();
 | 
|  
 | 
|    int ChildIdForSurface(Surface* surface);
 | 
|    gfx::Rect DamageRectForSurface(const Surface* surface,
 | 
|                                   const RenderPass& source,
 | 
| -                                 const gfx::Rect& full_rect);
 | 
| +                                 const gfx::Rect& full_rect) const;
 | 
|  
 | 
| +  SurfaceAggregatorClient* client_;  // Outlives this class.
 | 
|    SurfaceManager* manager_;
 | 
|    ResourceProvider* provider_;
 | 
|  
 | 
| 
 |