OLD | NEW |
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 "athena/wm/window_list_provider_impl.h" | 5 #include "athena/wm/window_list_provider_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
| 9 #include "athena/screen/public/screen_manager.h" |
9 #include "athena/test/base/athena_test_base.h" | 10 #include "athena/test/base/athena_test_base.h" |
10 #include "athena/wm/public/window_list_provider_observer.h" | 11 #include "athena/wm/public/window_list_provider_observer.h" |
| 12 #include "athena/wm/public/window_manager.h" |
| 13 #include "ui/aura/client/window_tree_client.h" |
11 #include "ui/aura/test/test_window_delegate.h" | 14 #include "ui/aura/test/test_window_delegate.h" |
12 #include "ui/aura/window.h" | 15 #include "ui/aura/window.h" |
| 16 #include "ui/wm/core/window_util.h" |
13 | 17 |
14 namespace athena { | 18 namespace athena { |
15 | 19 |
16 namespace { | 20 namespace { |
17 | 21 |
18 bool AreWindowListsEqual(const aura::Window::Windows& one, | 22 bool AreWindowListsEqual(const aura::Window::Windows& one, |
19 const aura::Window::Windows& two) { | 23 const aura::Window::Windows& two) { |
20 return one.size() == two.size() && | 24 return one.size() == two.size() && |
21 std::equal(one.begin(), one.end(), two.begin()); | 25 std::equal(one.begin(), one.end(), two.begin()); |
22 } | 26 } |
23 | 27 |
24 scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate, | 28 scoped_ptr<aura::Window> CreateWindow(aura::Window* parent, |
| 29 aura::WindowDelegate* delegate, |
25 ui::wm::WindowType window_type) { | 30 ui::wm::WindowType window_type) { |
26 scoped_ptr<aura::Window> window(new aura::Window(delegate)); | 31 scoped_ptr<aura::Window> window(new aura::Window(delegate)); |
27 window->SetType(window_type); | 32 window->SetType(window_type); |
28 window->Init(aura::WINDOW_LAYER_SOLID_COLOR); | 33 window->Init(aura::WINDOW_LAYER_SOLID_COLOR); |
| 34 if (parent) |
| 35 parent->AddChild(window.get()); |
29 return window.Pass(); | 36 return window.Pass(); |
30 } | 37 } |
31 | 38 |
| 39 scoped_ptr<aura::Window> CreateTransientWindow(aura::Window* transient_parent, |
| 40 aura::WindowDelegate* delegate, |
| 41 ui::wm::WindowType window_type) { |
| 42 scoped_ptr<aura::Window> window(new aura::Window(delegate)); |
| 43 window->SetType(window_type); |
| 44 window->Init(aura::WINDOW_LAYER_SOLID_COLOR); |
| 45 wm::AddTransientChild(transient_parent, window.get()); |
| 46 aura::client::ParentWindowWithContext( |
| 47 window.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); |
| 48 return window.Pass(); |
| 49 } |
| 50 |
32 // Return a string which defines the order of windows in |now| using the indices | 51 // Return a string which defines the order of windows in |now| using the indices |
33 // of |original|. The string will then have the lowest/oldest window on the left | 52 // of |original|. The string will then have the lowest/oldest window on the left |
34 // and the highest / newest on the right. | 53 // and the highest / newest on the right. |
35 std::string GetWindowOrder(const aura::Window::Windows& original, | 54 std::string GetWindowOrder(const aura::Window::Windows& original, |
36 const aura::Window::Windows& now) { | 55 const aura::Window::Windows& now) { |
37 if (original.size() != now.size()) | 56 if (original.size() != now.size()) |
38 return "size has changed."; | 57 return "size has changed."; |
39 std::string output; | 58 std::string output; |
40 for (aura::Window::Windows::const_iterator it = now.begin(); | 59 for (aura::Window::Windows::const_iterator it = now.begin(); |
41 it != now.end(); ++it) { | 60 it != now.end(); ++it) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 | 106 |
88 } // namespace | 107 } // namespace |
89 | 108 |
90 typedef test::AthenaTestBase WindowListProviderImplTest; | 109 typedef test::AthenaTestBase WindowListProviderImplTest; |
91 | 110 |
92 // Tests that the order of windows match the stacking order of the windows in | 111 // Tests that the order of windows match the stacking order of the windows in |
93 // the container, even after the order is changed through the aura Window API. | 112 // the container, even after the order is changed through the aura Window API. |
94 TEST_F(WindowListProviderImplTest, StackingOrder) { | 113 TEST_F(WindowListProviderImplTest, StackingOrder) { |
95 aura::test::TestWindowDelegate delegate; | 114 aura::test::TestWindowDelegate delegate; |
96 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); | 115 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
97 scoped_ptr<aura::Window> first = | |
98 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
99 scoped_ptr<aura::Window> second = | |
100 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
101 scoped_ptr<aura::Window> third = | |
102 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
103 container->AddChild(first.get()); | |
104 container->AddChild(second.get()); | |
105 container->AddChild(third.get()); | |
106 | |
107 scoped_ptr<WindowListProvider> list_provider( | 116 scoped_ptr<WindowListProvider> list_provider( |
108 new WindowListProviderImpl(container.get())); | 117 new WindowListProviderImpl(container.get())); |
| 118 |
| 119 scoped_ptr<aura::Window> first = |
| 120 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 121 scoped_ptr<aura::Window> second = |
| 122 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 123 scoped_ptr<aura::Window> third = |
| 124 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 125 |
| 126 EXPECT_EQ(3u, container->children().size()); |
| 127 EXPECT_EQ(container->children().size(), |
| 128 list_provider->GetWindowList().size()); |
| 129 |
109 EXPECT_TRUE(AreWindowListsEqual(container->children(), | 130 EXPECT_TRUE(AreWindowListsEqual(container->children(), |
110 list_provider->GetWindowList())); | 131 list_provider->GetWindowList())); |
111 | 132 |
112 container->StackChildAtTop(first.get()); | 133 container->StackChildAtTop(first.get()); |
113 EXPECT_TRUE(AreWindowListsEqual(container->children(), | 134 EXPECT_TRUE(AreWindowListsEqual(container->children(), |
114 list_provider->GetWindowList())); | 135 list_provider->GetWindowList())); |
| 136 EXPECT_EQ(3u, container->children().size()); |
115 EXPECT_EQ(first.get(), container->children().back()); | 137 EXPECT_EQ(first.get(), container->children().back()); |
116 } | 138 } |
117 | 139 |
118 // Tests that only normal windows of the associated container will be listed. | 140 // Tests that only normal windows of the associated container will be listed. |
119 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { | 141 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { |
120 aura::test::TestWindowDelegate delegate; | 142 aura::test::TestWindowDelegate delegate; |
121 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); | 143 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
122 scoped_ptr<aura::Window> first = | |
123 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
124 scoped_ptr<aura::Window> second = | |
125 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); | |
126 scoped_ptr<aura::Window> third = | |
127 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
128 scoped_ptr<aura::Window> fourth = | |
129 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); | |
130 container->AddChild(first.get()); | |
131 container->AddChild(second.get()); | |
132 container->AddChild(third.get()); | |
133 container->AddChild(fourth.get()); | |
134 | |
135 scoped_ptr<WindowListProvider> list_provider( | 144 scoped_ptr<WindowListProvider> list_provider( |
136 new WindowListProviderImpl(container.get())); | 145 new WindowListProviderImpl(container.get())); |
137 | 146 |
| 147 scoped_ptr<aura::Window> first = |
| 148 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 149 scoped_ptr<aura::Window> second = |
| 150 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP); |
| 151 scoped_ptr<aura::Window> third = |
| 152 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 153 scoped_ptr<aura::Window> fourth = |
| 154 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_MENU); |
| 155 |
138 const aura::Window::Windows& list = list_provider->GetWindowList(); | 156 const aura::Window::Windows& list = list_provider->GetWindowList(); |
139 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get())); | 157 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get())); |
140 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), fourth.get())); | 158 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), fourth.get())); |
141 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), first.get())); | 159 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), first.get())); |
142 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get())); | 160 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get())); |
143 } | 161 } |
144 | 162 |
145 // Testing that IsValidWidow, IsWindowInList and AddWindow work as expected. | 163 // Testing that IsValidWidow, IsWindowInList and AddWindow work as expected. |
146 TEST_F(WindowListProviderImplTest, SimpleChecks) { | 164 TEST_F(WindowListProviderImplTest, SimpleChecks) { |
147 aura::test::TestWindowDelegate delegate; | 165 aura::test::TestWindowDelegate delegate; |
148 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); | 166 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
| 167 scoped_ptr<WindowListProviderImpl> list_provider( |
| 168 new WindowListProviderImpl(container.get())); |
149 | 169 |
150 scoped_ptr<aura::Window> normal_window = | 170 scoped_ptr<aura::Window> normal_window = |
151 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | 171 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
152 scoped_ptr<aura::Window> popup_window = | 172 scoped_ptr<aura::Window> popup_window = |
153 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); | 173 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_POPUP); |
154 scoped_ptr<aura::Window> menu_window = | 174 scoped_ptr<aura::Window> menu_window = |
155 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); | 175 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_MENU); |
156 | |
157 scoped_ptr<WindowListProvider> list_provider( | |
158 new WindowListProviderImpl(container.get())); | |
159 | 176 |
160 // Check which windows are valid and which are not. | 177 // Check which windows are valid and which are not. |
161 EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get())); | 178 EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get())); |
162 EXPECT_FALSE(list_provider->IsValidWindow(popup_window.get())); | 179 EXPECT_FALSE(list_provider->IsValidWindow(popup_window.get())); |
163 EXPECT_FALSE(list_provider->IsValidWindow(menu_window.get())); | 180 EXPECT_FALSE(list_provider->IsValidWindow(menu_window.get())); |
164 | 181 |
165 // Check that no window is currently in the list. | 182 // Check that no window is currently in the list. |
166 EXPECT_FALSE(list_provider->IsWindowInList(normal_window.get())); | 183 EXPECT_FALSE(list_provider->IsWindowInList(normal_window.get())); |
167 EXPECT_FALSE(list_provider->IsWindowInList(popup_window.get())); | 184 EXPECT_FALSE(list_provider->IsWindowInList(popup_window.get())); |
168 EXPECT_FALSE(list_provider->IsWindowInList(menu_window.get())); | 185 EXPECT_FALSE(list_provider->IsWindowInList(menu_window.get())); |
169 | 186 |
170 // Check that adding the window will add it to the list. | 187 // Check that adding the window will add it to the list. |
171 container->AddChild(normal_window.get()); | 188 container->AddChild(normal_window.get()); |
172 EXPECT_TRUE(list_provider->IsWindowInList(normal_window.get())); | 189 EXPECT_TRUE(list_provider->IsWindowInList(normal_window.get())); |
173 } | 190 } |
174 | 191 |
175 // Testing that window ordering functions work as expected. | 192 // Testing that window ordering functions work as expected. |
176 TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) { | 193 TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) { |
177 aura::test::TestWindowDelegate delegate; | 194 aura::test::TestWindowDelegate delegate; |
178 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); | 195 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
179 | |
180 scoped_ptr<aura::Window> window1 = | |
181 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
182 scoped_ptr<aura::Window> window2 = | |
183 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
184 scoped_ptr<aura::Window> window3 = | |
185 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
186 | |
187 scoped_ptr<WindowListProvider> list_provider( | 196 scoped_ptr<WindowListProvider> list_provider( |
188 new WindowListProviderImpl(container.get())); | 197 new WindowListProviderImpl(container.get())); |
189 scoped_ptr<WindowListObserver> observer( | 198 scoped_ptr<WindowListObserver> observer( |
190 new WindowListObserver(list_provider.get())); | 199 new WindowListObserver(list_provider.get())); |
191 | 200 |
| 201 scoped_ptr<aura::Window> window1 = |
| 202 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 203 scoped_ptr<aura::Window> window2 = |
| 204 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 205 scoped_ptr<aura::Window> window3 = |
| 206 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 207 |
192 EXPECT_FALSE(list_provider->IsWindowInList(window1.get())); | 208 EXPECT_FALSE(list_provider->IsWindowInList(window1.get())); |
193 EXPECT_FALSE(list_provider->IsWindowInList(window2.get())); | 209 EXPECT_FALSE(list_provider->IsWindowInList(window2.get())); |
194 EXPECT_FALSE(list_provider->IsWindowInList(window3.get())); | 210 EXPECT_FALSE(list_provider->IsWindowInList(window3.get())); |
195 | 211 |
196 // Add the windows. | 212 // Add the windows. |
197 container->AddChild(window1.get()); | 213 container->AddChild(window1.get()); |
198 container->AddChild(window2.get()); | 214 container->AddChild(window2.get()); |
199 container->AddChild(window3.get()); | 215 container->AddChild(window3.get()); |
200 // Make a copy of the window-list in the original order. | 216 // Make a copy of the window-list in the original order. |
201 aura::Window::Windows original_order = list_provider->GetWindowList(); | 217 aura::Window::Windows original_order = list_provider->GetWindowList(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 EXPECT_EQ(4, observer->calls()); | 253 EXPECT_EQ(4, observer->calls()); |
238 list_provider->StackWindowBehindTo(window3.get(), window1.get()); | 254 list_provider->StackWindowBehindTo(window3.get(), window1.get()); |
239 EXPECT_EQ("2 3 1", GetWindowOrder(original_order, | 255 EXPECT_EQ("2 3 1", GetWindowOrder(original_order, |
240 list_provider->GetWindowList())); | 256 list_provider->GetWindowList())); |
241 EXPECT_EQ(4, observer->calls()); | 257 EXPECT_EQ(4, observer->calls()); |
242 } | 258 } |
243 | 259 |
244 TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) { | 260 TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) { |
245 aura::test::TestWindowDelegate delegate; | 261 aura::test::TestWindowDelegate delegate; |
246 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); | 262 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
247 | |
248 scoped_ptr<aura::Window> window1 = | |
249 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
250 scoped_ptr<aura::Window> window2 = | |
251 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
252 scoped_ptr<aura::Window> window3 = | |
253 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); | |
254 scoped_ptr<aura::Window> window4 = | |
255 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); | |
256 | |
257 scoped_ptr<WindowListProvider> list_provider( | 263 scoped_ptr<WindowListProvider> list_provider( |
258 new WindowListProviderImpl(container.get())); | 264 new WindowListProviderImpl(container.get())); |
259 scoped_ptr<WindowListObserver> observer( | 265 scoped_ptr<WindowListObserver> observer( |
260 new WindowListObserver(list_provider.get())); | 266 new WindowListObserver(list_provider.get())); |
261 | 267 |
262 // Add the windows. | 268 scoped_ptr<aura::Window> window1 = |
263 container->AddChild(window1.get()); | 269 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
264 container->AddChild(window2.get()); | 270 scoped_ptr<aura::Window> window2 = |
265 container->AddChild(window3.get()); | 271 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
266 container->AddChild(window4.get()); | 272 scoped_ptr<aura::Window> window3 = |
| 273 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 274 scoped_ptr<aura::Window> window4 = |
| 275 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP); |
| 276 |
267 // The popup-window (window4) should not be included in the window-list. | 277 // The popup-window (window4) should not be included in the window-list. |
268 ASSERT_EQ(3U, list_provider->GetWindowList().size()); | 278 ASSERT_EQ(3U, list_provider->GetWindowList().size()); |
269 EXPECT_EQ(0, observer->window_removal_calls()); | 279 EXPECT_EQ(0, observer->window_removal_calls()); |
270 EXPECT_FALSE(list_provider->IsWindowInList(window4.get())); | 280 EXPECT_FALSE(list_provider->IsWindowInList(window4.get())); |
271 | 281 |
272 // Destroying the popup window should not trigger the remove notification. | 282 // Destroying the popup window should not trigger the remove notification. |
273 window4.reset(); | 283 window4.reset(); |
274 ASSERT_EQ(3U, list_provider->GetWindowList().size()); | 284 ASSERT_EQ(3U, list_provider->GetWindowList().size()); |
275 EXPECT_EQ(0, observer->window_removal_calls()); | 285 EXPECT_EQ(0, observer->window_removal_calls()); |
276 | 286 |
277 window2.reset(); | 287 window2.reset(); |
278 ASSERT_EQ(2U, list_provider->GetWindowList().size()); | 288 ASSERT_EQ(2U, list_provider->GetWindowList().size()); |
279 EXPECT_EQ(1, observer->window_removal_calls()); | 289 EXPECT_EQ(1, observer->window_removal_calls()); |
280 | 290 |
281 window1.reset(); | 291 window1.reset(); |
282 ASSERT_EQ(1U, list_provider->GetWindowList().size()); | 292 ASSERT_EQ(1U, list_provider->GetWindowList().size()); |
283 EXPECT_EQ(2, observer->window_removal_calls()); | 293 EXPECT_EQ(2, observer->window_removal_calls()); |
284 | 294 |
285 window3.reset(); | 295 window3.reset(); |
286 ASSERT_EQ(0U, list_provider->GetWindowList().size()); | 296 ASSERT_EQ(0U, list_provider->GetWindowList().size()); |
287 EXPECT_EQ(3, observer->window_removal_calls()); | 297 EXPECT_EQ(3, observer->window_removal_calls()); |
288 } | 298 } |
289 | 299 |
| 300 // Test that transient windows are handled property. |
| 301 TEST_F(WindowListProviderImplTest, TransientWindows) { |
| 302 aura::test::TestWindowDelegate delegate; |
| 303 delegate.set_can_focus(true); |
| 304 |
| 305 WindowListProvider* list_provider = |
| 306 WindowManager::Get()->GetWindowListProvider(); |
| 307 |
| 308 scoped_ptr<WindowListObserver> observer( |
| 309 new WindowListObserver(list_provider)); |
| 310 scoped_ptr<aura::Window> w1 = CreateTestWindow(&delegate, gfx::Rect()); |
| 311 w1->Show(); |
| 312 scoped_ptr<aura::Window> w2 = CreateTestWindow(&delegate, gfx::Rect()); |
| 313 w2->Show(); |
| 314 scoped_ptr<aura::Window> t1 = |
| 315 CreateTransientWindow(w1.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| 316 t1->Show(); |
| 317 |
| 318 EXPECT_EQ(2u, list_provider->GetWindowList().size()); |
| 319 |
| 320 // Activation should honor transient relations. |
| 321 wm::ActivateWindow(w2.get()); |
| 322 EXPECT_EQ(w1.get(), list_provider->GetWindowList()[0]); |
| 323 EXPECT_EQ(w2.get(), list_provider->GetWindowList()[1]); |
| 324 |
| 325 EXPECT_EQ(w1.get(), w1->parent()->children()[0]); |
| 326 EXPECT_EQ(t1.get(), w1->parent()->children()[1]); |
| 327 EXPECT_EQ(w2.get(), w1->parent()->children()[2]); |
| 328 |
| 329 wm::ActivateWindow(w1.get()); |
| 330 EXPECT_EQ(w2.get(), w1->parent()->children()[0]); |
| 331 EXPECT_EQ(w1.get(), w1->parent()->children()[1]); |
| 332 EXPECT_EQ(t1.get(), w1->parent()->children()[2]); |
| 333 |
| 334 // Manual operations should honor transient relations too. |
| 335 // TODO(oshima): moving the active window back should activate the top window. |
| 336 list_provider->StackWindowBehindTo(w1.get(), w2.get()); |
| 337 EXPECT_EQ(w1.get(), w1->parent()->children()[0]); |
| 338 EXPECT_EQ(t1.get(), w1->parent()->children()[1]); |
| 339 EXPECT_EQ(w2.get(), w1->parent()->children()[2]); |
| 340 |
| 341 list_provider->StackWindowFrontOf(w1.get(), w2.get()); |
| 342 EXPECT_EQ(w2.get(), w1->parent()->children()[0]); |
| 343 EXPECT_EQ(w1.get(), w1->parent()->children()[1]); |
| 344 EXPECT_EQ(t1.get(), w1->parent()->children()[2]); |
| 345 |
| 346 // Transient windows should follow the transient parent's |
| 347 // visibility. |
| 348 EXPECT_TRUE(t1->IsVisible()); |
| 349 w1->Hide(); |
| 350 EXPECT_FALSE(t1->IsVisible()); |
| 351 w1->Show(); |
| 352 EXPECT_TRUE(t1->IsVisible()); |
| 353 |
| 354 // Resetting transient window won't notify the observer. |
| 355 t1.reset(); |
| 356 EXPECT_EQ(0, observer->window_removal_calls()); |
| 357 } |
| 358 |
290 } // namespace athena | 359 } // namespace athena |
OLD | NEW |