| 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
|
|
|