Chromium Code Reviews| 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 // That transient windows are handled property. | |
|
Mr4D (OOO till 08-26)
2014/10/08 15:32:29
Test that ..
?
oshima
2014/10/08 19:05:30
Done.
| |
| 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 |