12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_LAYERS_LAYER_IMPL_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_LAYERS_LAYER_IMPL_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_value_observer.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/region.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/input_handler.h"
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/layers/compositing_reasons.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/draw_properties.h"
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_lists.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_position_constraint.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/render_surface_impl.h"
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/filter_operations.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/shared_quad_state.h"
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_provider.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/refptr.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h"
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkPicture.h"
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_f.h"
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h"
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostImpl;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeImpl;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class QuadSink;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Renderer;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScrollbarAnimationController;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScrollbarLayerImpl;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AppendQuadsData;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)enum DrawMode {
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DRAW_MODE_NONE,
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DRAW_MODE_HARDWARE,
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DRAW_MODE_SOFTWARE,
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DRAW_MODE_RESOURCELESS_SOFTWARE
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT LayerImpl : LayerAnimationValueObserver {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return make_scoped_ptr(new LayerImpl(tree_impl, id));
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~LayerImpl();
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int id() const { return layer_id_; }
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // LayerAnimationValueObserver implementation.
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnOpacityAnimated(float opacity) OVERRIDE;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsActive() const OVERRIDE;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tree structure.
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* parent() { return parent_; }
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerImpl* parent() const { return parent_; }
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const OwnedLayerImplList& children() const { return children_; }
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  OwnedLayerImplList& children() { return children_; }
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* child_at(size_t index) const { return children_[index]; }
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddChild(scoped_ptr<LayerImpl> child);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerImpl> RemoveChild(LayerImpl* child);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_parent(LayerImpl* parent) { parent_ = parent; }
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Warning: This does not preserve tree structure invariants.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ClearChildList();
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void PassCopyRequests(ScopedPtrVector<CopyOutputRequest>* requests);
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void TakeCopyRequestsAndTransformToTarget(
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ScopedPtrVector<CopyOutputRequest>* request);
8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool HasCopyRequest() const { return !copy_requests_.empty(); }
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMaskLayer(scoped_ptr<LayerImpl> mask_layer);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* mask_layer() { return mask_layer_.get(); }
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerImpl* mask_layer() const { return mask_layer_.get(); }
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerImpl> TakeMaskLayer();
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetReplicaLayer(scoped_ptr<LayerImpl> replica_layer);
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* replica_layer() { return replica_layer_.get(); }
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerImpl* replica_layer() const { return replica_layer_.get(); }
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerImpl> TakeReplicaLayer();
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool has_mask() const { return mask_layer_; }
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool has_replica() const { return replica_layer_; }
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool replica_has_mask() const {
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return replica_layer_ && (mask_layer_ || replica_layer_->mask_layer_);
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeImpl* layer_tree_impl() const { return layer_tree_impl_; }
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SharedQuadState> CreateSharedQuadState() const;
110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // WillDraw must be called before AppendQuads. If WillDraw returns false,
111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // AppendQuads and DidDraw will not be called. If WillDraw returns true,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DidDraw is guaranteed to be called before another WillDraw or before
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the layer is destroyed. To enforce this, any class that overrides
114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // WillDraw/DidDraw must call the base class version only if WillDraw
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // returns true.
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual bool WillDraw(DrawMode draw_mode,
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        ResourceProvider* resource_provider);
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AppendQuads(QuadSink* quad_sink,
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           AppendQuadsData* append_quads_data) {}
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidDraw(ResourceProvider* resource_provider);
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ResourceProvider::ResourceId ContentsResourceId() const;
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HasDelegatedContent() const;
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HasContributingDelegatedRenderPasses() const;
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual RenderPass::Id FirstContributingRenderPassId() const;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual RenderPass::Id NextContributingRenderPassId(RenderPass::Id id) const;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void UpdateTilePriorities() {}
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ScrollbarLayerImpl* ToScrollbarLayer();
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if this layer has content to draw.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDrawsContent(bool draws_content);
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool DrawsContent() const { return draws_content_; }
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetHideLayerAndSubtree(bool hide);
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool hide_layer_and_subtree() const { return hide_layer_and_subtree_; }
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool force_render_surface() const { return force_render_surface_; }
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetForceRenderSurface(bool force) { force_render_surface_ = force; }
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetAnchorPoint(gfx::PointF anchor_point);
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF anchor_point() const { return anchor_point_; }
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetAnchorPointZ(float anchor_point_z);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float anchor_point_z() const { return anchor_point_z_; }
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetBackgroundColor(SkColor background_color);
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SkColor background_color() const { return background_color_; }
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // If contents_opaque(), return an opaque color else return a
152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // non-opaque color.  Tries to return background_color(), if possible.
153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SkColor SafeOpaqueBackgroundColor() const;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetFilters(const FilterOperations& filters);
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const FilterOperations& filters() const { return filters_; }
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetBackgroundFilters(const FilterOperations& filters);
159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const FilterOperations& background_filters() const {
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return background_filters_;
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetFilter(const skia::RefPtr<SkImageFilter>& filter);
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  skia::RefPtr<SkImageFilter> filter() const { return filter_; }
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMasksToBounds(bool masks_to_bounds);
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool masks_to_bounds() const { return masks_to_bounds_; }
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetContentsOpaque(bool opaque);
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool contents_opaque() const { return contents_opaque_; }
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetOpacity(float opacity);
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float opacity() const { return opacity_; }
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool OpacityIsAnimating() const;
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool OpacityIsAnimatingOnImplOnly() const;
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetPosition(gfx::PointF position);
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF position() const { return position_; }
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetIsContainerForFixedPositionLayers(bool container) {
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    is_container_for_fixed_position_layers_ = container;
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // This is a non-trivial function in Layer.
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool IsContainerForFixedPositionLayers() const {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return is_container_for_fixed_position_layers_;
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetFixedContainerSizeDelta(gfx::Vector2dF delta) {
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fixed_container_size_delta_ = delta;
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Vector2dF fixed_container_size_delta() const {
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return fixed_container_size_delta_;
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetPositionConstraint(const LayerPositionConstraint& constraint) {
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    position_constraint_ = constraint;
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const LayerPositionConstraint& position_constraint() const {
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return position_constraint_;
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetPreserves3d(bool preserves_3d);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool preserves_3d() const { return preserves_3d_; }
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetUseParentBackfaceVisibility(bool use) {
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    use_parent_backface_visibility_ = use;
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_parent_backface_visibility() const {
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return use_parent_backface_visibility_;
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetSublayerTransform(const gfx::Transform& sublayer_transform);
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& sublayer_transform() const {
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return sublayer_transform_;
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Debug layer name.
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDebugName(const std::string& debug_name) { debug_name_ = debug_name; }
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string debug_name() const { return debug_name_; }
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void SetCompositingReasons(CompositingReasons reasons) {
22290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      compositing_reasons_ = reasons;
22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CompositingReasons compositing_reasons() const {
22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return compositing_reasons_;
22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ShowDebugBorders() const;
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // These invalidate the host's render surface layer list.  The caller
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is responsible for calling set_needs_update_draw_properties on the tree
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // so that its list can be recreated.
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CreateRenderSurface();
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void ClearRenderSurface();
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DrawProperties<LayerImpl, RenderSurfaceImpl>& draw_properties() {
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_;
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DrawProperties<LayerImpl, RenderSurfaceImpl>& draw_properties() const {
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_;
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The following are shortcut accessors to get various information from
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // draw_properties_
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& draw_transform() const {
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.target_space_transform;
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& screen_space_transform() const {
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.screen_space_transform;
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float draw_opacity() const { return draw_properties_.opacity; }
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool draw_opacity_is_animating() const {
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.opacity_is_animating;
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool draw_transform_is_animating() const {
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.target_space_transform_is_animating;
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool screen_space_transform_is_animating() const {
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.screen_space_transform_is_animating;
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool screen_space_opacity_is_animating() const {
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.screen_space_opacity_is_animating;
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool can_use_lcd_text() const { return draw_properties_.can_use_lcd_text; }
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_clipped() const { return draw_properties_.is_clipped; }
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect clip_rect() const { return draw_properties_.clip_rect; }
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect drawable_content_rect() const {
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.drawable_content_rect;
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect visible_content_rect() const {
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.visible_content_rect;
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* render_target() {
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!draw_properties_.render_target ||
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           draw_properties_.render_target->render_surface());
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.render_target;
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerImpl* render_target() const {
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!draw_properties_.render_target ||
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           draw_properties_.render_target->render_surface());
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.render_target;
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderSurfaceImpl* render_surface() const {
285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return draw_properties_.render_surface.get();
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The client should be responsible for setting bounds, content bounds and
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // contents scale to appropriate values. LayerImpl doesn't calculate any of
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // them from the other values.
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetBounds(gfx::Size bounds);
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size bounds() const { return bounds_; }
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetContentBounds(gfx::Size content_bounds);
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size content_bounds() const { return draw_properties_.content_bounds; }
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float contents_scale_x() const { return draw_properties_.contents_scale_x; }
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float contents_scale_y() const { return draw_properties_.contents_scale_y; }
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetContentsScale(float contents_scale_x, float contents_scale_y);
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CalculateContentsScale(float ideal_contents_scale,
303b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                      float device_scale_factor,
304b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                      float page_scale_factor,
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      bool animating_transform_to_screen,
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      float* contents_scale_x,
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      float* contents_scale_y,
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      gfx::Size* content_bounds);
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetScrollOffsetDelegate(
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      LayerScrollOffsetDelegate* scroll_offset_delegate);
31274e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias  bool IsExternalFlingActive() const;
31374e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetScrollOffset(gfx::Vector2d scroll_offset);
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d scroll_offset() const { return scroll_offset_; }
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMaxScrollOffset(gfx::Vector2d max_scroll_offset);
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d max_scroll_offset() const { return max_scroll_offset_; }
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetScrollDelta(gfx::Vector2dF scroll_delta);
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Vector2dF ScrollDelta() const;
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2dF TotalScrollOffset() const;
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetSentScrollDelta(gfx::Vector2d sent_scroll_delta);
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d sent_scroll_delta() const { return sent_scroll_delta_; }
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns the delta of the scroll that was outside of the bounds of the
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // initial scroll
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2dF ScrollBy(gfx::Vector2dF scroll);
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetScrollable(bool scrollable) { scrollable_ = scrollable; }
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool scrollable() const { return scrollable_; }
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
335558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void ApplySentScrollDeltas();
336558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetShouldScrollOnMainThread(bool should_scroll_on_main_thread) {
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_scroll_on_main_thread_ = should_scroll_on_main_thread;
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_scroll_on_main_thread() const {
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return should_scroll_on_main_thread_;
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetHaveWheelEventHandlers(bool have_wheel_event_handlers) {
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    have_wheel_event_handlers_ = have_wheel_event_handlers;
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool have_wheel_event_handlers() const { return have_wheel_event_handlers_; }
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNonFastScrollableRegion(const Region& region) {
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    non_fast_scrollable_region_ = region;
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Region& non_fast_scrollable_region() const {
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return non_fast_scrollable_region_;
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTouchEventHandlerRegion(const Region& region) {
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    touch_event_handler_region_ = region;
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Region& touch_event_handler_region() const {
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return touch_event_handler_region_;
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDrawCheckerboardForMissingTiles(bool checkerboard) {
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    draw_checkerboard_for_missing_tiles_ = checkerboard;
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool DrawCheckerboardForMissingTiles() const;
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InputHandler::ScrollStatus TryScroll(
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      gfx::PointF screen_space_point,
370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      InputHandler::ScrollInputType type) const;
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDoubleSided(bool double_sided);
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool double_sided() const { return double_sided_; }
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTransform(const gfx::Transform& transform);
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& transform() const { return transform_; }
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool TransformIsAnimating() const;
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool TransformIsAnimatingOnImplOnly() const;
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Note this rect is in layer space (not content space).
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_update_rect(const gfx::RectF& update_rect) {
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    update_rect_ = update_rect;
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::RectF& update_rect() const { return update_rect_; }
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::DictionaryValue* LayerTreeAsJson() const;
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetStackingOrderChanged(bool stacking_order_changed);
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool LayerPropertyChanged() const {
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return layer_property_changed_ || LayerIsAlwaysDamaged();
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool LayerSurfacePropertyChanged() const;
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ResetAllChangeTrackingForSubtree();
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool LayerIsAlwaysDamaged() const;
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerAnimationController* layer_animation_controller() {
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return layer_animation_controller_.get();
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Region VisibleContentOpaqueRegion() const;
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidBecomeActive();
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void DidBeginTracing();
408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Indicates that the surface previously used to render this layer
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // was lost and that a new one has been created. Won't be called
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // until the new surface has been created successfully.
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidLoseOutputSurface();
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScrollbarAnimationController* scrollbar_animation_controller() const {
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return scrollbar_animation_controller_.get();
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetScrollbarOpacity(float opacity);
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetHorizontalScrollbarLayer(ScrollbarLayerImpl* scrollbar_layer);
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScrollbarLayerImpl* horizontal_scrollbar_layer() {
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return horizontal_scrollbar_layer_;
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbar_layer);
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScrollbarLayerImpl* vertical_scrollbar_layer() {
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return vertical_scrollbar_layer_;
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect LayerRectToContentRect(const gfx::RectF& layer_rect) const;
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual skia::RefPtr<SkPicture> GetPicture();
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool CanClipSelf() const;
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool AreVisibleResourcesReady() const;
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl);
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PushPropertiesTo(LayerImpl* layer);
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
441b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  scoped_ptr<base::Value> AsValue() const;
44290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual size_t GPUMemoryUsageInBytes() const;
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // TODO(danakj): Be true only if needed. crbug.com/259511
4457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool needs_push_properties() const { return true; }
4467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool descendant_needs_push_properties() const { return true; }
4477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl(LayerTreeImpl* layer_impl, int id);
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Get the color and size of the layer's debug border.
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void GetDebugBorderProperties(SkColor* color, float* width) const;
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AppendDebugBorderQuad(QuadSink* quad_sink,
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             const SharedQuadState* shared_quad_state,
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             AppendQuadsData* append_quads_data) const;
45790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void AppendDebugBorderQuad(QuadSink* quad_sink,
45890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             const SharedQuadState* shared_quad_state,
45990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             AppendQuadsData* append_quads_data,
46090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             SkColor color,
46190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             float width) const;
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
463b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual void AsValueInto(base::DictionaryValue* dict) const;
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NoteLayerSurfacePropertyChanged();
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NoteLayerPropertyChanged();
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NoteLayerPropertyChangedForSubtree();
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note carefully this does not affect the current layer.
4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NoteLayerPropertyChangedForDescendants();
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateScrollbarPositions();
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual const char* LayerTypeAsString() const;
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Properties internal to LayerImpl
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* parent_;
479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  OwnedLayerImplList children_;
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // mask_layer_ can be temporarily stolen during tree sync, we need this ID to
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // confirm newly assigned layer is still the previous one
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_layer_id_;
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerImpl> mask_layer_;
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int replica_layer_id_;  // ditto
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerImpl> replica_layer_;
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int layer_id_;
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeImpl* layer_tree_impl_;
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Properties synchronized from the associated Layer.
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF anchor_point_;
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float anchor_point_z_;
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size bounds_;
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d scroll_offset_;
494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  LayerScrollOffsetDelegate* scroll_offset_delegate_;
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool scrollable_;
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_scroll_on_main_thread_;
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool have_wheel_event_handlers_;
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Region non_fast_scrollable_region_;
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Region touch_event_handler_region_;
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SkColor background_color_;
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool stacking_order_changed_;
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Whether the "back" of this layer should draw.
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool double_sided_;
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tracks if drawing-related properties have changed since last redraw.
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool layer_property_changed_;
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Indicates that a property has changed on this layer that would not
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // affect the pixels on its target surface, but would require redrawing
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the target_surface onto its ancestor target_surface.
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // For layers that do not own a surface this flag acts as
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // layer_property_changed_.
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool layer_surface_property_changed_;
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool masks_to_bounds_;
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool contents_opaque_;
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float opacity_;
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF position_;
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool preserves_3d_;
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_parent_backface_visibility_;
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool draw_checkerboard_for_missing_tiles_;
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Transform sublayer_transform_;
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Transform transform_;
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool draws_content_;
527eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool hide_layer_and_subtree_;
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool force_render_surface_;
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set for the layer that other layers are fixed to.
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_container_for_fixed_position_layers_;
532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // This property is effective when
533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // is_container_for_fixed_position_layers_ == true,
534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Vector2dF fixed_container_size_delta_;
535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  LayerPositionConstraint position_constraint_;
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2dF scroll_delta_;
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d sent_scroll_delta_;
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d max_scroll_offset_;
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2dF last_scroll_offset_;
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The global depth value of the center of the layer. This value is used
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // to sort layers from back to front.
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float draw_depth_;
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Debug layer name.
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string debug_name_;
54990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CompositingReasons compositing_reasons_;
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FilterOperations filters_;
552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FilterOperations background_filters_;
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  skia::RefPtr<SkImageFilter> filter_;
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
555868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected:
556868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DrawMode current_draw_mode_;
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Rect indicating what was repainted/updated during update.
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note that plugin layers bypass this and leave it empty.
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Uses layer's content space.
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::RectF update_rect_;
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Manages animations for this layer.
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<LayerAnimationController> layer_animation_controller_;
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Manages scrollbars for this layer
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ScrollbarAnimationController> scrollbar_animation_controller_;
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Weak pointers to this layer's scrollbars, if it has them. Updated during
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // tree synchronization.
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScrollbarLayerImpl* horizontal_scrollbar_layer_;
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScrollbarLayerImpl* vertical_scrollbar_layer_;
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
57590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ScopedPtrVector<CopyOutputRequest> copy_requests_;
576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Group of properties that need to be computed based on the layer tree
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // hierarchy before layers can be drawn.
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DrawProperties<LayerImpl, RenderSurfaceImpl> draw_properties_;
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LayerImpl);
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace cc
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_LAYERS_LAYER_IMPL_H_
587