Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1024)

Unified Diff: ui/views/view_unittest.cc

Issue 2813353002: Ensure that the focus ring in the bookmarks bar does not paint outside the parent view. (Closed)
Patch Set: \ Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698