| Index: ui/views/view_unittest.cc
 | 
| diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
 | 
| index 42ba4f3319b73c539f34d668a01a900a3f1d522c..caafd8b92dc7e72b2872354216024e7d4e73e0d4 100644
 | 
| --- a/ui/views/view_unittest.cc
 | 
| +++ b/ui/views/view_unittest.cc
 | 
| @@ -5023,4 +5023,81 @@ TEST_F(ViewObserverTest, ChildViewReordered) {
 | 
|    EXPECT_EQ(child_view2.get(), view_reordered());
 | 
|  }
 | 
|  
 | 
| +// Validates that if a child of a ScrollView adds a layer, then a layer
 | 
| +// is added to the ScrollView's viewport.
 | 
| +TEST_F(ViewObserverTest, ScrollViewChildAddLayerTest) {
 | 
| +  std::unique_ptr<ScrollView> scroll_view(new ScrollView());
 | 
| +  scroll_view->SetContents(new View());
 | 
| +  // Bail if the scroll view already has a layer.
 | 
| +  if (scroll_view->contents_viewport_->layer())
 | 
| +    return;
 | 
| +
 | 
| +  EXPECT_FALSE(scroll_view->contents_viewport_->layer());
 | 
| +
 | 
| +  std::unique_ptr<View> child_view = NewView();
 | 
| +  scroll_view->AddChildView(child_view.get());
 | 
| +  child_view->SetPaintToLayer(ui::LAYER_TEXTURED);
 | 
| +
 | 
| +  EXPECT_TRUE(scroll_view->contents_viewport_->layer());
 | 
| +  scroll_view->RemoveChildView(child_view.get());
 | 
| +}
 | 
| +
 | 
| +// Provides a simple parent view implementation which tracks layer change
 | 
| +// notifications from child views.
 | 
| +class TestParentView : public View {
 | 
| + public:
 | 
| +  TestParentView()
 | 
| +      : received_layer_change_notification_(false), layer_change_count_(0) {}
 | 
| +
 | 
| +  void Reset() {
 | 
| +    received_layer_change_notification_ = false;
 | 
| +    layer_change_count_ = 0;
 | 
| +  }
 | 
| +
 | 
| +  bool received_layer_change_notification() const {
 | 
| +    return received_layer_change_notification_;
 | 
| +  }
 | 
| +
 | 
| +  int layer_change_count() const { return layer_change_count_; }
 | 
| +
 | 
| +  // View overrides.
 | 
| +  void OnChildLayerChanged(View* child) override {
 | 
| +    received_layer_change_notification_ = true;
 | 
| +    layer_change_count_++;
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  // Set to true if we receive the OnChildLayerChanged() notification for a
 | 
| +  // child.
 | 
| +  bool received_layer_change_notification_;
 | 
| +
 | 
| +  // Contains the number of OnChildLayerChanged() notifications for a child.
 | 
| +  int layer_change_count_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(TestParentView);
 | 
| +};
 | 
| +
 | 
| +// Tests the following cases.
 | 
| +// 1. We receive the OnChildLayerChanged() notification when a layer change
 | 
| +//    occurs in a child view.
 | 
| +// 2. We don't receive two layer changes when a child with an existing layer
 | 
| +//    creates a new layer.
 | 
| +TEST_F(ViewObserverTest, ChildViewLayerNotificationTest) {
 | 
| +  std::unique_ptr<TestParentView> parent_view(new TestParentView);
 | 
| +  std::unique_ptr<View> child_view = NewView();
 | 
| +  parent_view->AddChildView(child_view.get());
 | 
| +
 | 
| +  EXPECT_FALSE(parent_view->received_layer_change_notification());
 | 
| +  EXPECT_EQ(0, parent_view->layer_change_count());
 | 
| +
 | 
| +  child_view->SetPaintToLayer(ui::LAYER_TEXTURED);
 | 
| +  EXPECT_TRUE(parent_view->received_layer_change_notification());
 | 
| +  EXPECT_EQ(1, parent_view->layer_change_count());
 | 
| +
 | 
| +  parent_view->Reset();
 | 
| +  child_view->SetPaintToLayer(ui::LAYER_SOLID_COLOR);
 | 
| +  EXPECT_TRUE(parent_view->received_layer_change_notification());
 | 
| +  EXPECT_EQ(1, parent_view->layer_change_count());
 | 
| +}
 | 
| +
 | 
|  }  // namespace views
 | 
| 
 |