| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ash/root_window_controller.h" | 5 #include "ash/root_window_controller.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "ash/common/material_design/material_design_controller.h" | |
| 10 #include "ash/common/session/session_controller.h" | 9 #include "ash/common/session/session_controller.h" |
| 11 #include "ash/common/session/session_state_delegate.h" | 10 #include "ash/common/session/session_state_delegate.h" |
| 12 #include "ash/common/system/tray/system_tray_delegate.h" | 11 #include "ash/common/system/tray/system_tray_delegate.h" |
| 13 #include "ash/common/wm/system_modal_container_layout_manager.h" | 12 #include "ash/common/wm/system_modal_container_layout_manager.h" |
| 14 #include "ash/common/wm/window_state.h" | 13 #include "ash/common/wm/window_state.h" |
| 15 #include "ash/common/wm_lookup.h" | 14 #include "ash/common/wm_lookup.h" |
| 16 #include "ash/common/wm_shell.h" | 15 #include "ash/common/wm_shell.h" |
| 17 #include "ash/common/wm_window.h" | 16 #include "ash/common/wm_window.h" |
| 18 #include "ash/public/cpp/shell_window_ids.h" | 17 #include "ash/public/cpp/shell_window_ids.h" |
| 19 #include "ash/shell.h" | 18 #include "ash/shell.h" |
| 20 #include "ash/test/ash_md_test_base.h" | |
| 21 #include "ash/test/ash_test_base.h" | 19 #include "ash/test/ash_test_base.h" |
| 22 #include "ash/wm/window_properties.h" | 20 #include "ash/wm/window_properties.h" |
| 23 #include "ash/wm/window_state_aura.h" | 21 #include "ash/wm/window_state_aura.h" |
| 24 #include "ash/wm/window_util.h" | 22 #include "ash/wm/window_util.h" |
| 25 #include "base/command_line.h" | 23 #include "base/command_line.h" |
| 26 #include "ui/aura/client/focus_change_observer.h" | 24 #include "ui/aura/client/focus_change_observer.h" |
| 27 #include "ui/aura/client/focus_client.h" | 25 #include "ui/aura/client/focus_client.h" |
| 28 #include "ui/aura/client/window_parenting_client.h" | 26 #include "ui/aura/client/window_parenting_client.h" |
| 29 #include "ui/aura/env.h" | 27 #include "ui/aura/env.h" |
| 30 #include "ui/aura/test/test_window_delegate.h" | 28 #include "ui/aura/test/test_window_delegate.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 }; | 97 }; |
| 100 | 98 |
| 101 WmLayoutManager* GetLayoutManager(RootWindowController* controller, int id) { | 99 WmLayoutManager* GetLayoutManager(RootWindowController* controller, int id) { |
| 102 return WmWindow::Get(controller->GetContainer(id))->GetLayoutManager(); | 100 return WmWindow::Get(controller->GetContainer(id))->GetLayoutManager(); |
| 103 } | 101 } |
| 104 | 102 |
| 105 } // namespace | 103 } // namespace |
| 106 | 104 |
| 107 namespace test { | 105 namespace test { |
| 108 | 106 |
| 109 class RootWindowControllerTest : public AshMDTestBase { | 107 class RootWindowControllerTest : public AshTestBase { |
| 110 public: | 108 public: |
| 111 views::Widget* CreateTestWidget(const gfx::Rect& bounds) { | 109 views::Widget* CreateTestWidget(const gfx::Rect& bounds) { |
| 112 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( | 110 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( |
| 113 NULL, CurrentContext(), bounds); | 111 NULL, CurrentContext(), bounds); |
| 114 widget->Show(); | 112 widget->Show(); |
| 115 return widget; | 113 return widget; |
| 116 } | 114 } |
| 117 | 115 |
| 118 views::Widget* CreateModalWidget(const gfx::Rect& bounds) { | 116 views::Widget* CreateModalWidget(const gfx::Rect& bounds) { |
| 119 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( | 117 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( |
| 120 new TestDelegate(true), CurrentContext(), bounds); | 118 new TestDelegate(true), CurrentContext(), bounds); |
| 121 widget->Show(); | 119 widget->Show(); |
| 122 return widget; | 120 return widget; |
| 123 } | 121 } |
| 124 | 122 |
| 125 views::Widget* CreateModalWidgetWithParent(const gfx::Rect& bounds, | 123 views::Widget* CreateModalWidgetWithParent(const gfx::Rect& bounds, |
| 126 gfx::NativeWindow parent) { | 124 gfx::NativeWindow parent) { |
| 127 views::Widget* widget = views::Widget::CreateWindowWithParentAndBounds( | 125 views::Widget* widget = views::Widget::CreateWindowWithParentAndBounds( |
| 128 new TestDelegate(true), parent, bounds); | 126 new TestDelegate(true), parent, bounds); |
| 129 widget->Show(); | 127 widget->Show(); |
| 130 return widget; | 128 return widget; |
| 131 } | 129 } |
| 132 | 130 |
| 133 aura::Window* GetModalContainer(aura::Window* root_window) { | 131 aura::Window* GetModalContainer(aura::Window* root_window) { |
| 134 return Shell::GetContainer(root_window, | 132 return Shell::GetContainer(root_window, |
| 135 kShellWindowId_SystemModalContainer); | 133 kShellWindowId_SystemModalContainer); |
| 136 } | 134 } |
| 137 }; | 135 }; |
| 138 | 136 |
| 139 INSTANTIATE_TEST_CASE_P( | 137 TEST_F(RootWindowControllerTest, MoveWindows_Basic) { |
| 140 /* prefix intentionally left blank due to only one parameterization */, | |
| 141 RootWindowControllerTest, | |
| 142 testing::Values(MaterialDesignController::NON_MATERIAL, | |
| 143 MaterialDesignController::MATERIAL_NORMAL, | |
| 144 MaterialDesignController::MATERIAL_EXPERIMENTAL)); | |
| 145 | |
| 146 TEST_P(RootWindowControllerTest, MoveWindows_Basic) { | |
| 147 const int height_offset = GetMdMaximizedWindowHeightOffset(); | |
| 148 | |
| 149 // Windows origin should be doubled when moved to the 1st display. | 138 // Windows origin should be doubled when moved to the 1st display. |
| 150 UpdateDisplay("600x600,300x300"); | 139 UpdateDisplay("600x600,300x300"); |
| 151 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 140 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 152 | 141 |
| 153 views::Widget* normal = CreateTestWidget(gfx::Rect(650, 10, 100, 100)); | 142 views::Widget* normal = CreateTestWidget(gfx::Rect(650, 10, 100, 100)); |
| 154 EXPECT_EQ(root_windows[1], normal->GetNativeView()->GetRootWindow()); | 143 EXPECT_EQ(root_windows[1], normal->GetNativeView()->GetRootWindow()); |
| 155 EXPECT_EQ("650,10 100x100", normal->GetWindowBoundsInScreen().ToString()); | 144 EXPECT_EQ("650,10 100x100", normal->GetWindowBoundsInScreen().ToString()); |
| 156 EXPECT_EQ("50,10 100x100", | 145 EXPECT_EQ("50,10 100x100", |
| 157 normal->GetNativeView()->GetBoundsInRootWindow().ToString()); | 146 normal->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 158 | 147 |
| 159 views::Widget* maximized = CreateTestWidget(gfx::Rect(700, 10, 100, 100)); | 148 views::Widget* maximized = CreateTestWidget(gfx::Rect(700, 10, 100, 100)); |
| 160 maximized->Maximize(); | 149 maximized->Maximize(); |
| 161 EXPECT_EQ(root_windows[1], maximized->GetNativeView()->GetRootWindow()); | 150 EXPECT_EQ(root_windows[1], maximized->GetNativeView()->GetRootWindow()); |
| 162 EXPECT_EQ(gfx::Rect(600, 0, 300, 253 + height_offset).ToString(), | 151 EXPECT_EQ(gfx::Rect(600, 0, 300, 252).ToString(), |
| 163 maximized->GetWindowBoundsInScreen().ToString()); | 152 maximized->GetWindowBoundsInScreen().ToString()); |
| 164 EXPECT_EQ(gfx::Rect(0, 0, 300, 253 + height_offset).ToString(), | 153 EXPECT_EQ(gfx::Rect(0, 0, 300, 252).ToString(), |
| 165 maximized->GetNativeView()->GetBoundsInRootWindow().ToString()); | 154 maximized->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 166 | 155 |
| 167 views::Widget* minimized = CreateTestWidget(gfx::Rect(800, 10, 100, 100)); | 156 views::Widget* minimized = CreateTestWidget(gfx::Rect(800, 10, 100, 100)); |
| 168 minimized->Minimize(); | 157 minimized->Minimize(); |
| 169 EXPECT_EQ(root_windows[1], minimized->GetNativeView()->GetRootWindow()); | 158 EXPECT_EQ(root_windows[1], minimized->GetNativeView()->GetRootWindow()); |
| 170 EXPECT_EQ("800,10 100x100", minimized->GetWindowBoundsInScreen().ToString()); | 159 EXPECT_EQ("800,10 100x100", minimized->GetWindowBoundsInScreen().ToString()); |
| 171 | 160 |
| 172 views::Widget* fullscreen = CreateTestWidget(gfx::Rect(850, 10, 100, 100)); | 161 views::Widget* fullscreen = CreateTestWidget(gfx::Rect(850, 10, 100, 100)); |
| 173 fullscreen->SetFullscreen(true); | 162 fullscreen->SetFullscreen(true); |
| 174 EXPECT_EQ(root_windows[1], fullscreen->GetNativeView()->GetRootWindow()); | 163 EXPECT_EQ(root_windows[1], fullscreen->GetNativeView()->GetRootWindow()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 EXPECT_EQ("100,20 100x100", | 202 EXPECT_EQ("100,20 100x100", |
| 214 normal->GetNativeView()->GetBoundsInRootWindow().ToString()); | 203 normal->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 215 | 204 |
| 216 // Maximized area on primary display has 47px for non-md and 48px for md | 205 // Maximized area on primary display has 47px for non-md and 48px for md |
| 217 // (defined in SHELF_SIZE) inset at the bottom. | 206 // (defined in SHELF_SIZE) inset at the bottom. |
| 218 | 207 |
| 219 // First clear fullscreen status, since both fullscreen and maximized windows | 208 // First clear fullscreen status, since both fullscreen and maximized windows |
| 220 // share the same desktop workspace, which cancels the shelf status. | 209 // share the same desktop workspace, which cancels the shelf status. |
| 221 fullscreen->SetFullscreen(false); | 210 fullscreen->SetFullscreen(false); |
| 222 EXPECT_EQ(root_windows[0], maximized->GetNativeView()->GetRootWindow()); | 211 EXPECT_EQ(root_windows[0], maximized->GetNativeView()->GetRootWindow()); |
| 223 EXPECT_EQ(gfx::Rect(0, 0, 600, 553 + height_offset).ToString(), | 212 EXPECT_EQ(gfx::Rect(0, 0, 600, 552).ToString(), |
| 224 maximized->GetWindowBoundsInScreen().ToString()); | 213 maximized->GetWindowBoundsInScreen().ToString()); |
| 225 EXPECT_EQ(gfx::Rect(0, 0, 600, 553 + height_offset).ToString(), | 214 EXPECT_EQ(gfx::Rect(0, 0, 600, 552).ToString(), |
| 226 maximized->GetNativeView()->GetBoundsInRootWindow().ToString()); | 215 maximized->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 227 | 216 |
| 228 // Set fullscreen to true, but maximized window's size won't change because | 217 // Set fullscreen to true, but maximized window's size won't change because |
| 229 // it's not visible. see crbug.com/504299. | 218 // it's not visible. see crbug.com/504299. |
| 230 fullscreen->SetFullscreen(true); | 219 fullscreen->SetFullscreen(true); |
| 231 EXPECT_EQ(root_windows[0], maximized->GetNativeView()->GetRootWindow()); | 220 EXPECT_EQ(root_windows[0], maximized->GetNativeView()->GetRootWindow()); |
| 232 EXPECT_EQ(gfx::Rect(0, 0, 600, 553 + height_offset).ToString(), | 221 EXPECT_EQ(gfx::Rect(0, 0, 600, 552).ToString(), |
| 233 maximized->GetWindowBoundsInScreen().ToString()); | 222 maximized->GetWindowBoundsInScreen().ToString()); |
| 234 EXPECT_EQ(gfx::Rect(0, 0, 600, 553 + height_offset).ToString(), | 223 EXPECT_EQ(gfx::Rect(0, 0, 600, 552).ToString(), |
| 235 maximized->GetNativeView()->GetBoundsInRootWindow().ToString()); | 224 maximized->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 236 | 225 |
| 237 EXPECT_EQ(root_windows[0], minimized->GetNativeView()->GetRootWindow()); | 226 EXPECT_EQ(root_windows[0], minimized->GetNativeView()->GetRootWindow()); |
| 238 EXPECT_EQ("400,20 100x100", minimized->GetWindowBoundsInScreen().ToString()); | 227 EXPECT_EQ("400,20 100x100", minimized->GetWindowBoundsInScreen().ToString()); |
| 239 | 228 |
| 240 EXPECT_EQ(root_windows[0], fullscreen->GetNativeView()->GetRootWindow()); | 229 EXPECT_EQ(root_windows[0], fullscreen->GetNativeView()->GetRootWindow()); |
| 241 EXPECT_TRUE(fullscreen->IsFullscreen()); | 230 EXPECT_TRUE(fullscreen->IsFullscreen()); |
| 242 EXPECT_EQ("0,0 600x600", fullscreen->GetWindowBoundsInScreen().ToString()); | 231 EXPECT_EQ("0,0 600x600", fullscreen->GetWindowBoundsInScreen().ToString()); |
| 243 EXPECT_EQ("0,0 600x600", | 232 EXPECT_EQ("0,0 600x600", |
| 244 fullscreen->GetNativeView()->GetBoundsInRootWindow().ToString()); | 233 fullscreen->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 258 EXPECT_EQ(root_windows[0], | 247 EXPECT_EQ(root_windows[0], |
| 259 unparented_control->GetNativeView()->GetRootWindow()); | 248 unparented_control->GetNativeView()->GetRootWindow()); |
| 260 EXPECT_EQ(kShellWindowId_UnparentedControlContainer, | 249 EXPECT_EQ(kShellWindowId_UnparentedControlContainer, |
| 261 unparented_control->GetNativeView()->parent()->id()); | 250 unparented_control->GetNativeView()->parent()->id()); |
| 262 | 251 |
| 263 // Test if the panel has moved. | 252 // Test if the panel has moved. |
| 264 EXPECT_EQ(root_windows[0], panel->GetRootWindow()); | 253 EXPECT_EQ(root_windows[0], panel->GetRootWindow()); |
| 265 EXPECT_EQ(kShellWindowId_PanelContainer, panel->parent()->id()); | 254 EXPECT_EQ(kShellWindowId_PanelContainer, panel->parent()->id()); |
| 266 } | 255 } |
| 267 | 256 |
| 268 TEST_P(RootWindowControllerTest, MoveWindows_Modal) { | 257 TEST_F(RootWindowControllerTest, MoveWindows_Modal) { |
| 269 UpdateDisplay("500x500,500x500"); | 258 UpdateDisplay("500x500,500x500"); |
| 270 | 259 |
| 271 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 260 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 272 // Emulate virtual screen coordinate system. | 261 // Emulate virtual screen coordinate system. |
| 273 root_windows[0]->SetBounds(gfx::Rect(0, 0, 500, 500)); | 262 root_windows[0]->SetBounds(gfx::Rect(0, 0, 500, 500)); |
| 274 root_windows[1]->SetBounds(gfx::Rect(500, 0, 500, 500)); | 263 root_windows[1]->SetBounds(gfx::Rect(500, 0, 500, 500)); |
| 275 | 264 |
| 276 views::Widget* normal = CreateTestWidget(gfx::Rect(300, 10, 100, 100)); | 265 views::Widget* normal = CreateTestWidget(gfx::Rect(300, 10, 100, 100)); |
| 277 EXPECT_EQ(root_windows[0], normal->GetNativeView()->GetRootWindow()); | 266 EXPECT_EQ(root_windows[0], normal->GetNativeView()->GetRootWindow()); |
| 278 EXPECT_TRUE(wm::IsActiveWindow(normal->GetNativeView())); | 267 EXPECT_TRUE(wm::IsActiveWindow(normal->GetNativeView())); |
| 279 | 268 |
| 280 views::Widget* modal = CreateModalWidget(gfx::Rect(650, 10, 100, 100)); | 269 views::Widget* modal = CreateModalWidget(gfx::Rect(650, 10, 100, 100)); |
| 281 EXPECT_EQ(root_windows[1], modal->GetNativeView()->GetRootWindow()); | 270 EXPECT_EQ(root_windows[1], modal->GetNativeView()->GetRootWindow()); |
| 282 EXPECT_TRUE( | 271 EXPECT_TRUE( |
| 283 GetModalContainer(root_windows[1])->Contains(modal->GetNativeView())); | 272 GetModalContainer(root_windows[1])->Contains(modal->GetNativeView())); |
| 284 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); | 273 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); |
| 285 | 274 |
| 286 ui::test::EventGenerator generator_1st(root_windows[0]); | 275 ui::test::EventGenerator generator_1st(root_windows[0]); |
| 287 generator_1st.ClickLeftButton(); | 276 generator_1st.ClickLeftButton(); |
| 288 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); | 277 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); |
| 289 | 278 |
| 290 UpdateDisplay("500x500"); | 279 UpdateDisplay("500x500"); |
| 291 EXPECT_EQ(root_windows[0], modal->GetNativeView()->GetRootWindow()); | 280 EXPECT_EQ(root_windows[0], modal->GetNativeView()->GetRootWindow()); |
| 292 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); | 281 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); |
| 293 generator_1st.ClickLeftButton(); | 282 generator_1st.ClickLeftButton(); |
| 294 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); | 283 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); |
| 295 } | 284 } |
| 296 | 285 |
| 297 // Make sure lock related windows moves. | 286 // Make sure lock related windows moves. |
| 298 TEST_P(RootWindowControllerTest, MoveWindows_LockWindowsInUnified) { | 287 TEST_F(RootWindowControllerTest, MoveWindows_LockWindowsInUnified) { |
| 299 display_manager()->SetUnifiedDesktopEnabled(true); | 288 display_manager()->SetUnifiedDesktopEnabled(true); |
| 300 | 289 |
| 301 UpdateDisplay("500x500"); | 290 UpdateDisplay("500x500"); |
| 302 const int kLockScreenWindowId = 1000; | 291 const int kLockScreenWindowId = 1000; |
| 303 const int kLockWallpaperWindowId = 1001; | 292 const int kLockWallpaperWindowId = 1001; |
| 304 | 293 |
| 305 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); | 294 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); |
| 306 | 295 |
| 307 aura::Window* lock_container = | 296 aura::Window* lock_container = |
| 308 controller->GetContainer(kShellWindowId_LockScreenContainer); | 297 controller->GetContainer(kShellWindowId_LockScreenContainer); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 | 355 |
| 367 controller = Shell::GetPrimaryRootWindowController(); | 356 controller = Shell::GetPrimaryRootWindowController(); |
| 368 | 357 |
| 369 ASSERT_EQ(lock_screen->GetNativeWindow(), | 358 ASSERT_EQ(lock_screen->GetNativeWindow(), |
| 370 controller->GetRootWindow()->GetChildById(kLockScreenWindowId)); | 359 controller->GetRootWindow()->GetChildById(kLockScreenWindowId)); |
| 371 ASSERT_EQ(lock_wallpaper->GetNativeWindow(), | 360 ASSERT_EQ(lock_wallpaper->GetNativeWindow(), |
| 372 controller->GetRootWindow()->GetChildById(kLockWallpaperWindowId)); | 361 controller->GetRootWindow()->GetChildById(kLockWallpaperWindowId)); |
| 373 EXPECT_EQ("0,0 600x500", lock_screen->GetNativeWindow()->bounds().ToString()); | 362 EXPECT_EQ("0,0 600x500", lock_screen->GetNativeWindow()->bounds().ToString()); |
| 374 } | 363 } |
| 375 | 364 |
| 376 TEST_P(RootWindowControllerTest, ModalContainer) { | 365 TEST_F(RootWindowControllerTest, ModalContainer) { |
| 377 UpdateDisplay("600x600"); | 366 UpdateDisplay("600x600"); |
| 378 WmShell* wm_shell = WmShell::Get(); | 367 WmShell* wm_shell = WmShell::Get(); |
| 379 RootWindowController* controller = wm_shell->GetPrimaryRootWindowController(); | 368 RootWindowController* controller = wm_shell->GetPrimaryRootWindowController(); |
| 380 EXPECT_EQ(LoginStatus::USER, | 369 EXPECT_EQ(LoginStatus::USER, |
| 381 wm_shell->system_tray_delegate()->GetUserLoginStatus()); | 370 wm_shell->system_tray_delegate()->GetUserLoginStatus()); |
| 382 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), | 371 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), |
| 383 controller->GetSystemModalLayoutManager(NULL)); | 372 controller->GetSystemModalLayoutManager(NULL)); |
| 384 | 373 |
| 385 views::Widget* session_modal_widget = | 374 views::Widget* session_modal_widget = |
| 386 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 375 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 403 GetLayoutManager(controller, kShellWindowId_LockSystemModalContainer), | 392 GetLayoutManager(controller, kShellWindowId_LockSystemModalContainer), |
| 404 controller->GetSystemModalLayoutManager( | 393 controller->GetSystemModalLayoutManager( |
| 405 WmLookup::Get()->GetWindowForWidget(lock_modal_widget))); | 394 WmLookup::Get()->GetWindowForWidget(lock_modal_widget))); |
| 406 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), | 395 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), |
| 407 controller->GetSystemModalLayoutManager( | 396 controller->GetSystemModalLayoutManager( |
| 408 WmLookup::Get()->GetWindowForWidget(session_modal_widget))); | 397 WmLookup::Get()->GetWindowForWidget(session_modal_widget))); |
| 409 | 398 |
| 410 wm_shell->GetSessionStateDelegate()->UnlockScreen(); | 399 wm_shell->GetSessionStateDelegate()->UnlockScreen(); |
| 411 } | 400 } |
| 412 | 401 |
| 413 TEST_P(RootWindowControllerTest, ModalContainerNotLoggedInLoggedIn) { | 402 TEST_F(RootWindowControllerTest, ModalContainerNotLoggedInLoggedIn) { |
| 414 UpdateDisplay("600x600"); | 403 UpdateDisplay("600x600"); |
| 415 | 404 |
| 416 // Configure login screen environment. | 405 // Configure login screen environment. |
| 417 SessionStateDelegate* session_state_delegate = | 406 SessionStateDelegate* session_state_delegate = |
| 418 WmShell::Get()->GetSessionStateDelegate(); | 407 WmShell::Get()->GetSessionStateDelegate(); |
| 419 SetUserLoggedIn(false); | 408 SetUserLoggedIn(false); |
| 420 EXPECT_EQ(LoginStatus::NOT_LOGGED_IN, | 409 EXPECT_EQ(LoginStatus::NOT_LOGGED_IN, |
| 421 WmShell::Get()->system_tray_delegate()->GetUserLoginStatus()); | 410 WmShell::Get()->system_tray_delegate()->GetUserLoginStatus()); |
| 422 EXPECT_EQ(0, session_state_delegate->NumberOfLoggedInUsers()); | 411 EXPECT_EQ(0, session_state_delegate->NumberOfLoggedInUsers()); |
| 423 EXPECT_FALSE(session_state_delegate->IsActiveUserSessionStarted()); | 412 EXPECT_FALSE(session_state_delegate->IsActiveUserSessionStarted()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 448 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), | 437 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), |
| 449 controller->GetSystemModalLayoutManager(NULL)); | 438 controller->GetSystemModalLayoutManager(NULL)); |
| 450 | 439 |
| 451 views::Widget* session_modal_widget = | 440 views::Widget* session_modal_widget = |
| 452 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 441 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| 453 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), | 442 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), |
| 454 controller->GetSystemModalLayoutManager( | 443 controller->GetSystemModalLayoutManager( |
| 455 WmLookup::Get()->GetWindowForWidget(session_modal_widget))); | 444 WmLookup::Get()->GetWindowForWidget(session_modal_widget))); |
| 456 } | 445 } |
| 457 | 446 |
| 458 TEST_P(RootWindowControllerTest, ModalContainerBlockedSession) { | 447 TEST_F(RootWindowControllerTest, ModalContainerBlockedSession) { |
| 459 UpdateDisplay("600x600"); | 448 UpdateDisplay("600x600"); |
| 460 RootWindowController* controller = | 449 RootWindowController* controller = |
| 461 WmShell::Get()->GetPrimaryRootWindowController(); | 450 WmShell::Get()->GetPrimaryRootWindowController(); |
| 462 aura::Window* lock_container = | 451 aura::Window* lock_container = |
| 463 controller->GetContainer(kShellWindowId_LockScreenContainer); | 452 controller->GetContainer(kShellWindowId_LockScreenContainer); |
| 464 for (int block_reason = FIRST_BLOCK_REASON; | 453 for (int block_reason = FIRST_BLOCK_REASON; |
| 465 block_reason < NUMBER_OF_BLOCK_REASONS; ++block_reason) { | 454 block_reason < NUMBER_OF_BLOCK_REASONS; ++block_reason) { |
| 466 views::Widget* session_modal_widget = | 455 views::Widget* session_modal_widget = |
| 467 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 456 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| 468 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), | 457 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 489 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), | 478 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), |
| 490 controller->GetSystemModalLayoutManager( | 479 controller->GetSystemModalLayoutManager( |
| 491 WmLookup::Get()->GetWindowForWidget(session_modal_widget))); | 480 WmLookup::Get()->GetWindowForWidget(session_modal_widget))); |
| 492 session_modal_widget->Close(); | 481 session_modal_widget->Close(); |
| 493 | 482 |
| 494 lock_modal_widget->Close(); | 483 lock_modal_widget->Close(); |
| 495 UnblockUserSession(); | 484 UnblockUserSession(); |
| 496 } | 485 } |
| 497 } | 486 } |
| 498 | 487 |
| 499 TEST_P(RootWindowControllerTest, GetWindowForFullscreenMode) { | 488 TEST_F(RootWindowControllerTest, GetWindowForFullscreenMode) { |
| 500 UpdateDisplay("600x600"); | 489 UpdateDisplay("600x600"); |
| 501 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); | 490 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); |
| 502 | 491 |
| 503 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 492 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 504 w1->Maximize(); | 493 w1->Maximize(); |
| 505 Widget* w2 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 494 Widget* w2 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 506 w2->SetFullscreen(true); | 495 w2->SetFullscreen(true); |
| 507 // |w3| is a transient child of |w2|. | 496 // |w3| is a transient child of |w2|. |
| 508 Widget* w3 = Widget::CreateWindowWithParentAndBounds( | 497 Widget* w3 = Widget::CreateWindowWithParentAndBounds( |
| 509 NULL, w2->GetNativeWindow(), gfx::Rect(0, 0, 100, 100)); | 498 NULL, w2->GetNativeWindow(), gfx::Rect(0, 0, 100, 100)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 520 w3->Close(); | 509 w3->Close(); |
| 521 | 510 |
| 522 // Only w2 remains, if minimized GetWindowForFullscreenMode should return | 511 // Only w2 remains, if minimized GetWindowForFullscreenMode should return |
| 523 // NULL. | 512 // NULL. |
| 524 w2->Activate(); | 513 w2->Activate(); |
| 525 EXPECT_EQ(w2->GetNativeWindow(), controller->GetWindowForFullscreenMode()); | 514 EXPECT_EQ(w2->GetNativeWindow(), controller->GetWindowForFullscreenMode()); |
| 526 w2->Minimize(); | 515 w2->Minimize(); |
| 527 EXPECT_EQ(NULL, controller->GetWindowForFullscreenMode()); | 516 EXPECT_EQ(NULL, controller->GetWindowForFullscreenMode()); |
| 528 } | 517 } |
| 529 | 518 |
| 530 TEST_P(RootWindowControllerTest, MultipleDisplaysGetWindowForFullscreenMode) { | 519 TEST_F(RootWindowControllerTest, MultipleDisplaysGetWindowForFullscreenMode) { |
| 531 UpdateDisplay("600x600,600x600"); | 520 UpdateDisplay("600x600,600x600"); |
| 532 Shell::RootWindowControllerList controllers = | 521 Shell::RootWindowControllerList controllers = |
| 533 Shell::GetInstance()->GetAllRootWindowControllers(); | 522 Shell::GetInstance()->GetAllRootWindowControllers(); |
| 534 | 523 |
| 535 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 524 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 536 w1->Maximize(); | 525 w1->Maximize(); |
| 537 Widget* w2 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 526 Widget* w2 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 538 w2->SetFullscreen(true); | 527 w2->SetFullscreen(true); |
| 539 Widget* w3 = CreateTestWidget(gfx::Rect(600, 0, 100, 100)); | 528 Widget* w3 = CreateTestWidget(gfx::Rect(600, 0, 100, 100)); |
| 540 | 529 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 557 // Verify that the first root window controller remains in fullscreen mode | 546 // Verify that the first root window controller remains in fullscreen mode |
| 558 // when a window on the other display is activated. | 547 // when a window on the other display is activated. |
| 559 w3->Activate(); | 548 w3->Activate(); |
| 560 EXPECT_EQ(w2->GetNativeWindow(), | 549 EXPECT_EQ(w2->GetNativeWindow(), |
| 561 controllers[0]->GetWindowForFullscreenMode()); | 550 controllers[0]->GetWindowForFullscreenMode()); |
| 562 EXPECT_EQ(NULL, controllers[1]->GetWindowForFullscreenMode()); | 551 EXPECT_EQ(NULL, controllers[1]->GetWindowForFullscreenMode()); |
| 563 } | 552 } |
| 564 | 553 |
| 565 // Test that GetRootWindowController() works with multiple displays and | 554 // Test that GetRootWindowController() works with multiple displays and |
| 566 // child widgets. | 555 // child widgets. |
| 567 TEST_P(RootWindowControllerTest, GetRootWindowController) { | 556 TEST_F(RootWindowControllerTest, GetRootWindowController) { |
| 568 UpdateDisplay("600x600,600x600"); | 557 UpdateDisplay("600x600,600x600"); |
| 569 Shell::RootWindowControllerList controllers = | 558 Shell::RootWindowControllerList controllers = |
| 570 Shell::GetInstance()->GetAllRootWindowControllers(); | 559 Shell::GetInstance()->GetAllRootWindowControllers(); |
| 571 ASSERT_EQ(2u, controllers.size()); | 560 ASSERT_EQ(2u, controllers.size()); |
| 572 | 561 |
| 573 // Test null. | 562 // Test null. |
| 574 EXPECT_FALSE(GetRootWindowController(nullptr)); | 563 EXPECT_FALSE(GetRootWindowController(nullptr)); |
| 575 | 564 |
| 576 // Test a widget on the first display. | 565 // Test a widget on the first display. |
| 577 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 566 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 578 EXPECT_EQ(controllers[0], | 567 EXPECT_EQ(controllers[0], |
| 579 GetRootWindowController(w1->GetNativeWindow()->GetRootWindow())); | 568 GetRootWindowController(w1->GetNativeWindow()->GetRootWindow())); |
| 580 | 569 |
| 581 // Test a child widget. | 570 // Test a child widget. |
| 582 Widget* w2 = Widget::CreateWindowWithParentAndBounds( | 571 Widget* w2 = Widget::CreateWindowWithParentAndBounds( |
| 583 nullptr, w1->GetNativeWindow(), gfx::Rect(0, 0, 100, 100)); | 572 nullptr, w1->GetNativeWindow(), gfx::Rect(0, 0, 100, 100)); |
| 584 EXPECT_EQ(controllers[0], | 573 EXPECT_EQ(controllers[0], |
| 585 GetRootWindowController(w2->GetNativeWindow()->GetRootWindow())); | 574 GetRootWindowController(w2->GetNativeWindow()->GetRootWindow())); |
| 586 | 575 |
| 587 // Test a widget on the second display. | 576 // Test a widget on the second display. |
| 588 Widget* w3 = CreateTestWidget(gfx::Rect(600, 0, 100, 100)); | 577 Widget* w3 = CreateTestWidget(gfx::Rect(600, 0, 100, 100)); |
| 589 EXPECT_EQ(controllers[1], | 578 EXPECT_EQ(controllers[1], |
| 590 GetRootWindowController(w3->GetNativeWindow()->GetRootWindow())); | 579 GetRootWindowController(w3->GetNativeWindow()->GetRootWindow())); |
| 591 } | 580 } |
| 592 | 581 |
| 593 // Test that user session window can't be focused if user session blocked by | 582 // Test that user session window can't be focused if user session blocked by |
| 594 // some overlapping UI. | 583 // some overlapping UI. |
| 595 TEST_P(RootWindowControllerTest, FocusBlockedWindow) { | 584 TEST_F(RootWindowControllerTest, FocusBlockedWindow) { |
| 596 UpdateDisplay("600x600"); | 585 UpdateDisplay("600x600"); |
| 597 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); | 586 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); |
| 598 aura::Window* lock_container = | 587 aura::Window* lock_container = |
| 599 controller->GetContainer(kShellWindowId_LockScreenContainer); | 588 controller->GetContainer(kShellWindowId_LockScreenContainer); |
| 600 aura::Window* lock_window = | 589 aura::Window* lock_window = |
| 601 Widget::CreateWindowWithParentAndBounds(NULL, lock_container, | 590 Widget::CreateWindowWithParentAndBounds(NULL, lock_container, |
| 602 gfx::Rect(0, 0, 100, 100)) | 591 gfx::Rect(0, 0, 100, 100)) |
| 603 ->GetNativeView(); | 592 ->GetNativeView(); |
| 604 lock_window->Show(); | 593 lock_window->Show(); |
| 605 aura::Window* session_window = | 594 aura::Window* session_window = |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 window_ = NULL; | 633 window_ = NULL; |
| 645 } | 634 } |
| 646 | 635 |
| 647 bool destroyed_; | 636 bool destroyed_; |
| 648 Window* window_; | 637 Window* window_; |
| 649 | 638 |
| 650 DISALLOW_COPY_AND_ASSIGN(DestroyedWindowObserver); | 639 DISALLOW_COPY_AND_ASSIGN(DestroyedWindowObserver); |
| 651 }; | 640 }; |
| 652 | 641 |
| 653 // Verifies shutdown doesn't delete windows that are not owned by the parent. | 642 // Verifies shutdown doesn't delete windows that are not owned by the parent. |
| 654 TEST_P(RootWindowControllerTest, DontDeleteWindowsNotOwnedByParent) { | 643 TEST_F(RootWindowControllerTest, DontDeleteWindowsNotOwnedByParent) { |
| 655 DestroyedWindowObserver observer1; | 644 DestroyedWindowObserver observer1; |
| 656 aura::test::TestWindowDelegate delegate1; | 645 aura::test::TestWindowDelegate delegate1; |
| 657 aura::Window* window1 = new aura::Window(&delegate1); | 646 aura::Window* window1 = new aura::Window(&delegate1); |
| 658 window1->SetType(ui::wm::WINDOW_TYPE_CONTROL); | 647 window1->SetType(ui::wm::WINDOW_TYPE_CONTROL); |
| 659 window1->set_owned_by_parent(false); | 648 window1->set_owned_by_parent(false); |
| 660 observer1.SetWindow(window1); | 649 observer1.SetWindow(window1); |
| 661 window1->Init(ui::LAYER_NOT_DRAWN); | 650 window1->Init(ui::LAYER_NOT_DRAWN); |
| 662 aura::client::ParentWindowWithContext( | 651 aura::client::ParentWindowWithContext( |
| 663 window1, Shell::GetInstance()->GetPrimaryRootWindow(), gfx::Rect()); | 652 window1, Shell::GetInstance()->GetPrimaryRootWindow(), gfx::Rect()); |
| 664 | 653 |
| (...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1215 keyboard_controller->ui()->GetKeyboardWindow()->SetBounds( | 1204 keyboard_controller->ui()->GetKeyboardWindow()->SetBounds( |
| 1216 gfx::Rect(0, 400, 800, 200)); | 1205 gfx::Rect(0, 400, 800, 200)); |
| 1217 EXPECT_EQ("0,400 800x200", keyboard_container->bounds().ToString()); | 1206 EXPECT_EQ("0,400 800x200", keyboard_container->bounds().ToString()); |
| 1218 | 1207 |
| 1219 UpdateDisplay("600x800"); | 1208 UpdateDisplay("600x800"); |
| 1220 EXPECT_EQ("0,600 600x200", keyboard_container->bounds().ToString()); | 1209 EXPECT_EQ("0,600 600x200", keyboard_container->bounds().ToString()); |
| 1221 } | 1210 } |
| 1222 | 1211 |
| 1223 } // namespace test | 1212 } // namespace test |
| 1224 } // namespace ash | 1213 } // namespace ash |
| OLD | NEW |