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

Side by Side Diff: ui/views/view_unittest_aura.cc

Issue 1474993003: Ensure View invalidates Widget::root_layers_ when LayerOwner::RecreateLayer is invoked (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rollback ash/wm/window_state_unittest.cc - redundant now Created 5 years 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 unified diff | Download patch
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/view.h" 5 #include "ui/views/view.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "ui/aura/window.h" 8 #include "ui/aura/window.h"
9 #include "ui/compositor/layer.h" 9 #include "ui/compositor/layer.h"
10 #include "ui/compositor/layer_tree_owner.h" 10 #include "ui/compositor/layer_tree_owner.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 104
105 // Test the initial order of the layers. 105 // Test the initial order of the layers.
106 ui::Layer* w1_layer = w1->GetNativeView()->layer(); 106 ui::Layer* w1_layer = w1->GetNativeView()->layer();
107 ASSERT_EQ("w1", w1_layer->name()); 107 ASSERT_EQ("w1", w1_layer->name());
108 ASSERT_EQ("v1 v4 w2 v7", ui::test::ChildLayerNamesAsString(*w1_layer)); 108 ASSERT_EQ("v1 v4 w2 v7", ui::test::ChildLayerNamesAsString(*w1_layer));
109 ui::Layer* w2_layer = w1_layer->children()[2]; 109 ui::Layer* w2_layer = w1_layer->children()[2];
110 ASSERT_EQ("v5", ui::test::ChildLayerNamesAsString(*w2_layer)); 110 ASSERT_EQ("v5", ui::test::ChildLayerNamesAsString(*w2_layer));
111 ui::Layer* v5_layer = w2_layer->children()[0]; 111 ui::Layer* v5_layer = w2_layer->children()[0];
112 ASSERT_EQ("v6", ui::test::ChildLayerNamesAsString(*v5_layer)); 112 ASSERT_EQ("v6", ui::test::ChildLayerNamesAsString(*v5_layer));
113 113
114 // Verify the value of Widget::GetRootLayers(). It should only include layers
115 // from layer-backed Views descended from the Widget's root View.
116 std::vector<ui::Layer*> old_w1_root_sublayers = w1->GetRootLayers();
117 ASSERT_EQ(3u, old_w1_root_sublayers.size());
118 EXPECT_EQ(v1_layer, old_w1_root_sublayers[0]);
119 EXPECT_EQ(v4_layer, old_w1_root_sublayers[1]);
120 EXPECT_EQ(v7_layer, old_w1_root_sublayers[2]);
121
114 { 122 {
115 scoped_ptr<ui::LayerTreeOwner> cloned_owner( 123 scoped_ptr<ui::LayerTreeOwner> cloned_owner(
116 wm::RecreateLayers(w1->GetNativeView())); 124 wm::RecreateLayers(w1->GetNativeView()));
117 EXPECT_EQ(w1_layer, cloned_owner->root()); 125 EXPECT_EQ(w1_layer, cloned_owner->root());
118 EXPECT_NE(w1_layer, w1->GetNativeView()->layer()); 126 EXPECT_NE(w1_layer, w1->GetNativeView()->layer());
119 127
120 // The old layers should still exist and have the same hierarchy. 128 // The old layers should still exist and have the same hierarchy.
121 ASSERT_EQ("w1", w1_layer->name()); 129 ASSERT_EQ("w1", w1_layer->name());
122 ASSERT_EQ("v1 v4 w2 v7", ui::test::ChildLayerNamesAsString(*w1_layer)); 130 ASSERT_EQ("v1 v4 w2 v7", ui::test::ChildLayerNamesAsString(*w1_layer));
123 ASSERT_EQ("v5", ui::test::ChildLayerNamesAsString(*w2_layer)); 131 ASSERT_EQ("v5", ui::test::ChildLayerNamesAsString(*w2_layer));
(...skipping 11 matching lines...) Expand all
135 143
136 ASSERT_EQ(1u, v5_layer->children().size()); 144 ASSERT_EQ(1u, v5_layer->children().size());
137 EXPECT_EQ(v6_layer, v5_layer->children()[0]); 145 EXPECT_EQ(v6_layer, v5_layer->children()[0]);
138 146
139 ASSERT_EQ(0u, v6_layer->children().size()); 147 ASSERT_EQ(0u, v6_layer->children().size());
140 148
141 EXPECT_EQ(2u, v7_layer->children().size()); 149 EXPECT_EQ(2u, v7_layer->children().size());
142 EXPECT_EQ(v8_layer, v7_layer->children()[0]); 150 EXPECT_EQ(v8_layer, v7_layer->children()[0]);
143 EXPECT_EQ(v9_layer, v7_layer->children()[1]); 151 EXPECT_EQ(v9_layer, v7_layer->children()[1]);
144 152
145 // The cloned layers should have the same hierarchy as old. 153 // The cloned layers should have the same hierarchy as old, but with new
154 // ui::Layer instances.
146 ui::Layer* w1_new_layer = w1->GetNativeView()->layer(); 155 ui::Layer* w1_new_layer = w1->GetNativeView()->layer();
147 EXPECT_EQ("w1", w1_new_layer->name()); 156 EXPECT_EQ("w1", w1_new_layer->name());
157 EXPECT_NE(w1_layer, w1_new_layer);
158 ui::Layer* v1_new_layer = w1_new_layer->children()[0];
159 ui::Layer* v4_new_layer = w1_new_layer->children()[1];
148 ASSERT_EQ("v1 v4 w2 v7", ui::test::ChildLayerNamesAsString(*w1_new_layer)); 160 ASSERT_EQ("v1 v4 w2 v7", ui::test::ChildLayerNamesAsString(*w1_new_layer));
161 EXPECT_NE(v1_layer, v1_new_layer);
162 EXPECT_NE(v4_layer, v4_new_layer);
149 ui::Layer* w2_new_layer = w1_new_layer->children()[2]; 163 ui::Layer* w2_new_layer = w1_new_layer->children()[2];
150 ASSERT_EQ("v5", ui::test::ChildLayerNamesAsString(*w2_new_layer)); 164 ASSERT_EQ("v5", ui::test::ChildLayerNamesAsString(*w2_new_layer));
151 ui::Layer* v5_new_layer = w2_new_layer->children()[0]; 165 ui::Layer* v5_new_layer = w2_new_layer->children()[0];
152 ASSERT_EQ("v6", ui::test::ChildLayerNamesAsString(*v5_new_layer)); 166 ASSERT_EQ("v6", ui::test::ChildLayerNamesAsString(*v5_new_layer));
153 ui::Layer* v7_new_layer = w1_new_layer->children()[3]; 167 ui::Layer* v7_new_layer = w1_new_layer->children()[3];
154 ASSERT_EQ("v8 v9", ui::test::ChildLayerNamesAsString(*v7_new_layer)); 168 ASSERT_EQ("v8 v9", ui::test::ChildLayerNamesAsString(*v7_new_layer));
169 EXPECT_NE(v7_layer, v7_new_layer);
170
171 // Ensure Widget::GetRootLayers() is correctly updated.
172 std::vector<ui::Layer*> new_w1_root_sublayers = w1->GetRootLayers();
173 ASSERT_EQ(3u, new_w1_root_sublayers.size());
174 EXPECT_EQ(v1_new_layer, new_w1_root_sublayers[0]);
175 EXPECT_EQ(v4_new_layer, new_w1_root_sublayers[1]);
176 EXPECT_EQ(v7_new_layer, new_w1_root_sublayers[2]);
155 } 177 }
156 w1->CloseNow(); 178 w1->CloseNow();
157 } 179 }
158 180
159 } // namespace views 181 } // namespace views
OLDNEW
« 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