| 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 "ash/session_state_delegate.h" | 7 #include "ash/session_state_delegate.h" |
| 8 #include "ash/shelf/shelf_layout_manager.h" | 8 #include "ash/shelf/shelf_layout_manager.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/shell_window_ids.h" | 10 #include "ash/shell_window_ids.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 gfx::NativeWindow parent) { | 111 gfx::NativeWindow parent) { |
| 112 views::Widget* widget = | 112 views::Widget* widget = |
| 113 views::Widget::CreateWindowWithParentAndBounds(new TestDelegate(true), | 113 views::Widget::CreateWindowWithParentAndBounds(new TestDelegate(true), |
| 114 parent, | 114 parent, |
| 115 bounds); | 115 bounds); |
| 116 widget->Show(); | 116 widget->Show(); |
| 117 return widget; | 117 return widget; |
| 118 } | 118 } |
| 119 | 119 |
| 120 aura::Window* GetModalContainer(aura::Window* root_window) { | 120 aura::Window* GetModalContainer(aura::Window* root_window) { |
| 121 return Shell::GetContainer( | 121 return Shell::GetContainer(root_window, |
| 122 root_window, | 122 ash::kShellWindowId_SystemModalContainer); |
| 123 ash::internal::kShellWindowId_SystemModalContainer); | |
| 124 } | 123 } |
| 125 }; | 124 }; |
| 126 | 125 |
| 127 TEST_F(RootWindowControllerTest, MoveWindows_Basic) { | 126 TEST_F(RootWindowControllerTest, MoveWindows_Basic) { |
| 128 if (!SupportsMultipleDisplays()) | 127 if (!SupportsMultipleDisplays()) |
| 129 return; | 128 return; |
| 130 // Windows origin should be doubled when moved to the 1st display. | 129 // Windows origin should be doubled when moved to the 1st display. |
| 131 UpdateDisplay("600x600,300x300"); | 130 UpdateDisplay("600x600,300x300"); |
| 132 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 131 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 133 internal::RootWindowController* controller = | 132 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); |
| 134 Shell::GetPrimaryRootWindowController(); | 133 ShelfLayoutManager* shelf_layout_manager = |
| 135 internal::ShelfLayoutManager* shelf_layout_manager = | |
| 136 controller->GetShelfLayoutManager(); | 134 controller->GetShelfLayoutManager(); |
| 137 shelf_layout_manager->SetAutoHideBehavior( | 135 shelf_layout_manager->SetAutoHideBehavior( |
| 138 ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 136 ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
| 139 | 137 |
| 140 views::Widget* normal = CreateTestWidget(gfx::Rect(650, 10, 100, 100)); | 138 views::Widget* normal = CreateTestWidget(gfx::Rect(650, 10, 100, 100)); |
| 141 EXPECT_EQ(root_windows[1], normal->GetNativeView()->GetRootWindow()); | 139 EXPECT_EQ(root_windows[1], normal->GetNativeView()->GetRootWindow()); |
| 142 EXPECT_EQ("650,10 100x100", normal->GetWindowBoundsInScreen().ToString()); | 140 EXPECT_EQ("650,10 100x100", normal->GetWindowBoundsInScreen().ToString()); |
| 143 EXPECT_EQ("50,10 100x100", | 141 EXPECT_EQ("50,10 100x100", |
| 144 normal->GetNativeView()->GetBoundsInRootWindow().ToString()); | 142 normal->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 145 | 143 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 166 fullscreen->GetNativeView()->GetBoundsInRootWindow().ToString()); | 164 fullscreen->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 167 | 165 |
| 168 views::Widget* unparented_control = new Widget; | 166 views::Widget* unparented_control = new Widget; |
| 169 Widget::InitParams params; | 167 Widget::InitParams params; |
| 170 params.bounds = gfx::Rect(650, 10, 100, 100); | 168 params.bounds = gfx::Rect(650, 10, 100, 100); |
| 171 params.context = CurrentContext(); | 169 params.context = CurrentContext(); |
| 172 params.type = Widget::InitParams::TYPE_CONTROL; | 170 params.type = Widget::InitParams::TYPE_CONTROL; |
| 173 unparented_control->Init(params); | 171 unparented_control->Init(params); |
| 174 EXPECT_EQ(root_windows[1], | 172 EXPECT_EQ(root_windows[1], |
| 175 unparented_control->GetNativeView()->GetRootWindow()); | 173 unparented_control->GetNativeView()->GetRootWindow()); |
| 176 EXPECT_EQ(internal::kShellWindowId_UnparentedControlContainer, | 174 EXPECT_EQ(kShellWindowId_UnparentedControlContainer, |
| 177 unparented_control->GetNativeView()->parent()->id()); | 175 unparented_control->GetNativeView()->parent()->id()); |
| 178 | 176 |
| 179 aura::Window* panel = CreateTestWindowInShellWithDelegateAndType( | 177 aura::Window* panel = CreateTestWindowInShellWithDelegateAndType( |
| 180 NULL, ui::wm::WINDOW_TYPE_PANEL, 0, gfx::Rect(700, 100, 100, 100)); | 178 NULL, ui::wm::WINDOW_TYPE_PANEL, 0, gfx::Rect(700, 100, 100, 100)); |
| 181 EXPECT_EQ(root_windows[1], panel->GetRootWindow()); | 179 EXPECT_EQ(root_windows[1], panel->GetRootWindow()); |
| 182 EXPECT_EQ(internal::kShellWindowId_PanelContainer, panel->parent()->id()); | 180 EXPECT_EQ(kShellWindowId_PanelContainer, panel->parent()->id()); |
| 183 | 181 |
| 184 // Make sure a window that will delete itself when losing focus | 182 // Make sure a window that will delete itself when losing focus |
| 185 // will not crash. | 183 // will not crash. |
| 186 aura::WindowTracker tracker; | 184 aura::WindowTracker tracker; |
| 187 DeleteOnBlurDelegate delete_on_blur_delegate; | 185 DeleteOnBlurDelegate delete_on_blur_delegate; |
| 188 aura::Window* d2 = CreateTestWindowInShellWithDelegate( | 186 aura::Window* d2 = CreateTestWindowInShellWithDelegate( |
| 189 &delete_on_blur_delegate, 0, gfx::Rect(50, 50, 100, 100)); | 187 &delete_on_blur_delegate, 0, gfx::Rect(50, 50, 100, 100)); |
| 190 delete_on_blur_delegate.SetWindow(d2); | 188 delete_on_blur_delegate.SetWindow(d2); |
| 191 aura::client::GetFocusClient(root_windows[0])->FocusWindow(d2); | 189 aura::client::GetFocusClient(root_windows[0])->FocusWindow(d2); |
| 192 tracker.Add(d2); | 190 tracker.Add(d2); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 239 |
| 242 fullscreen->SetFullscreen(false); | 240 fullscreen->SetFullscreen(false); |
| 243 EXPECT_EQ("500,20 100x100", | 241 EXPECT_EQ("500,20 100x100", |
| 244 fullscreen->GetWindowBoundsInScreen().ToString()); | 242 fullscreen->GetWindowBoundsInScreen().ToString()); |
| 245 EXPECT_EQ("500,20 100x100", | 243 EXPECT_EQ("500,20 100x100", |
| 246 fullscreen->GetNativeView()->GetBoundsInRootWindow().ToString()); | 244 fullscreen->GetNativeView()->GetBoundsInRootWindow().ToString()); |
| 247 | 245 |
| 248 // Test if the unparented widget has moved. | 246 // Test if the unparented widget has moved. |
| 249 EXPECT_EQ(root_windows[0], | 247 EXPECT_EQ(root_windows[0], |
| 250 unparented_control->GetNativeView()->GetRootWindow()); | 248 unparented_control->GetNativeView()->GetRootWindow()); |
| 251 EXPECT_EQ(internal::kShellWindowId_UnparentedControlContainer, | 249 EXPECT_EQ(kShellWindowId_UnparentedControlContainer, |
| 252 unparented_control->GetNativeView()->parent()->id()); | 250 unparented_control->GetNativeView()->parent()->id()); |
| 253 | 251 |
| 254 // Test if the panel has moved. | 252 // Test if the panel has moved. |
| 255 EXPECT_EQ(root_windows[0], panel->GetRootWindow()); | 253 EXPECT_EQ(root_windows[0], panel->GetRootWindow()); |
| 256 EXPECT_EQ(internal::kShellWindowId_PanelContainer, panel->parent()->id()); | 254 EXPECT_EQ(kShellWindowId_PanelContainer, panel->parent()->id()); |
| 257 } | 255 } |
| 258 | 256 |
| 259 TEST_F(RootWindowControllerTest, MoveWindows_Modal) { | 257 TEST_F(RootWindowControllerTest, MoveWindows_Modal) { |
| 260 if (!SupportsMultipleDisplays()) | 258 if (!SupportsMultipleDisplays()) |
| 261 return; | 259 return; |
| 262 | 260 |
| 263 UpdateDisplay("500x500,500x500"); | 261 UpdateDisplay("500x500,500x500"); |
| 264 | 262 |
| 265 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 263 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 266 // Emulate virtual screen coordinate system. | 264 // Emulate virtual screen coordinate system. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 284 UpdateDisplay("500x500"); | 282 UpdateDisplay("500x500"); |
| 285 EXPECT_EQ(root_windows[0], modal->GetNativeView()->GetRootWindow()); | 283 EXPECT_EQ(root_windows[0], modal->GetNativeView()->GetRootWindow()); |
| 286 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); | 284 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); |
| 287 generator_1st.ClickLeftButton(); | 285 generator_1st.ClickLeftButton(); |
| 288 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); | 286 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); |
| 289 } | 287 } |
| 290 | 288 |
| 291 TEST_F(RootWindowControllerTest, ModalContainer) { | 289 TEST_F(RootWindowControllerTest, ModalContainer) { |
| 292 UpdateDisplay("600x600"); | 290 UpdateDisplay("600x600"); |
| 293 Shell* shell = Shell::GetInstance(); | 291 Shell* shell = Shell::GetInstance(); |
| 294 internal::RootWindowController* controller = | 292 RootWindowController* controller = shell->GetPrimaryRootWindowController(); |
| 295 shell->GetPrimaryRootWindowController(); | |
| 296 EXPECT_EQ(user::LOGGED_IN_USER, | 293 EXPECT_EQ(user::LOGGED_IN_USER, |
| 297 shell->system_tray_delegate()->GetUserLoginStatus()); | 294 shell->system_tray_delegate()->GetUserLoginStatus()); |
| 298 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 295 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 299 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 296 kShellWindowId_SystemModalContainer) |
| 300 controller->GetSystemModalLayoutManager(NULL)); | 297 ->layout_manager(), |
| 298 controller->GetSystemModalLayoutManager(NULL)); |
| 301 | 299 |
| 302 views::Widget* session_modal_widget = | 300 views::Widget* session_modal_widget = |
| 303 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 301 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| 304 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 302 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 305 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 303 kShellWindowId_SystemModalContainer) |
| 306 controller->GetSystemModalLayoutManager( | 304 ->layout_manager(), |
| 307 session_modal_widget->GetNativeView())); | 305 controller->GetSystemModalLayoutManager( |
| 306 session_modal_widget->GetNativeView())); |
| 308 | 307 |
| 309 shell->session_state_delegate()->LockScreen(); | 308 shell->session_state_delegate()->LockScreen(); |
| 310 EXPECT_EQ(user::LOGGED_IN_LOCKED, | 309 EXPECT_EQ(user::LOGGED_IN_LOCKED, |
| 311 shell->system_tray_delegate()->GetUserLoginStatus()); | 310 shell->system_tray_delegate()->GetUserLoginStatus()); |
| 312 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 311 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 313 internal::kShellWindowId_LockSystemModalContainer)->layout_manager(), | 312 kShellWindowId_LockSystemModalContainer) |
| 314 controller->GetSystemModalLayoutManager(NULL)); | 313 ->layout_manager(), |
| 314 controller->GetSystemModalLayoutManager(NULL)); |
| 315 | 315 |
| 316 aura::Window* lock_container = | 316 aura::Window* lock_container = Shell::GetContainer( |
| 317 Shell::GetContainer(controller->root_window(), | 317 controller->root_window(), kShellWindowId_LockScreenContainer); |
| 318 internal::kShellWindowId_LockScreenContainer); | |
| 319 views::Widget* lock_modal_widget = | 318 views::Widget* lock_modal_widget = |
| 320 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), lock_container); | 319 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), lock_container); |
| 321 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 320 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 322 internal::kShellWindowId_LockSystemModalContainer)->layout_manager(), | 321 kShellWindowId_LockSystemModalContainer) |
| 323 controller->GetSystemModalLayoutManager( | 322 ->layout_manager(), |
| 324 lock_modal_widget->GetNativeView())); | 323 controller->GetSystemModalLayoutManager( |
| 324 lock_modal_widget->GetNativeView())); |
| 325 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 325 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 326 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 326 kShellWindowId_SystemModalContainer) |
| 327 ->layout_manager(), |
| 327 controller->GetSystemModalLayoutManager( | 328 controller->GetSystemModalLayoutManager( |
| 328 session_modal_widget->GetNativeView())); | 329 session_modal_widget->GetNativeView())); |
| 329 | 330 |
| 330 shell->session_state_delegate()->UnlockScreen(); | 331 shell->session_state_delegate()->UnlockScreen(); |
| 331 } | 332 } |
| 332 | 333 |
| 333 TEST_F(RootWindowControllerTest, ModalContainerNotLoggedInLoggedIn) { | 334 TEST_F(RootWindowControllerTest, ModalContainerNotLoggedInLoggedIn) { |
| 334 UpdateDisplay("600x600"); | 335 UpdateDisplay("600x600"); |
| 335 Shell* shell = Shell::GetInstance(); | 336 Shell* shell = Shell::GetInstance(); |
| 336 | 337 |
| 337 // Configure login screen environment. | 338 // Configure login screen environment. |
| 338 SetUserLoggedIn(false); | 339 SetUserLoggedIn(false); |
| 339 EXPECT_EQ(user::LOGGED_IN_NONE, | 340 EXPECT_EQ(user::LOGGED_IN_NONE, |
| 340 shell->system_tray_delegate()->GetUserLoginStatus()); | 341 shell->system_tray_delegate()->GetUserLoginStatus()); |
| 341 EXPECT_EQ(0, shell->session_state_delegate()->NumberOfLoggedInUsers()); | 342 EXPECT_EQ(0, shell->session_state_delegate()->NumberOfLoggedInUsers()); |
| 342 EXPECT_FALSE(shell->session_state_delegate()->IsActiveUserSessionStarted()); | 343 EXPECT_FALSE(shell->session_state_delegate()->IsActiveUserSessionStarted()); |
| 343 | 344 |
| 344 internal::RootWindowController* controller = | 345 RootWindowController* controller = shell->GetPrimaryRootWindowController(); |
| 345 shell->GetPrimaryRootWindowController(); | |
| 346 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 346 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 347 internal::kShellWindowId_LockSystemModalContainer)->layout_manager(), | 347 kShellWindowId_LockSystemModalContainer) |
| 348 controller->GetSystemModalLayoutManager(NULL)); | 348 ->layout_manager(), |
| 349 controller->GetSystemModalLayoutManager(NULL)); |
| 349 | 350 |
| 350 aura::Window* lock_container = | 351 aura::Window* lock_container = Shell::GetContainer( |
| 351 Shell::GetContainer(controller->root_window(), | 352 controller->root_window(), kShellWindowId_LockScreenContainer); |
| 352 internal::kShellWindowId_LockScreenContainer); | |
| 353 views::Widget* login_modal_widget = | 353 views::Widget* login_modal_widget = |
| 354 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), lock_container); | 354 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), lock_container); |
| 355 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 355 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 356 internal::kShellWindowId_LockSystemModalContainer)->layout_manager(), | 356 kShellWindowId_LockSystemModalContainer) |
| 357 controller->GetSystemModalLayoutManager( | 357 ->layout_manager(), |
| 358 login_modal_widget->GetNativeView())); | 358 controller->GetSystemModalLayoutManager( |
| 359 login_modal_widget->GetNativeView())); |
| 359 login_modal_widget->Close(); | 360 login_modal_widget->Close(); |
| 360 | 361 |
| 361 // Configure user session environment. | 362 // Configure user session environment. |
| 362 SetUserLoggedIn(true); | 363 SetUserLoggedIn(true); |
| 363 SetSessionStarted(true); | 364 SetSessionStarted(true); |
| 364 EXPECT_EQ(user::LOGGED_IN_USER, | 365 EXPECT_EQ(user::LOGGED_IN_USER, |
| 365 shell->system_tray_delegate()->GetUserLoginStatus()); | 366 shell->system_tray_delegate()->GetUserLoginStatus()); |
| 366 EXPECT_EQ(1, shell->session_state_delegate()->NumberOfLoggedInUsers()); | 367 EXPECT_EQ(1, shell->session_state_delegate()->NumberOfLoggedInUsers()); |
| 367 EXPECT_TRUE(shell->session_state_delegate()->IsActiveUserSessionStarted()); | 368 EXPECT_TRUE(shell->session_state_delegate()->IsActiveUserSessionStarted()); |
| 368 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 369 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 369 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 370 kShellWindowId_SystemModalContainer) |
| 370 controller->GetSystemModalLayoutManager(NULL)); | 371 ->layout_manager(), |
| 372 controller->GetSystemModalLayoutManager(NULL)); |
| 371 | 373 |
| 372 views::Widget* session_modal_widget = | 374 views::Widget* session_modal_widget = |
| 373 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 375 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| 374 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 376 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 375 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 377 kShellWindowId_SystemModalContainer) |
| 376 controller->GetSystemModalLayoutManager( | 378 ->layout_manager(), |
| 377 session_modal_widget->GetNativeView())); | 379 controller->GetSystemModalLayoutManager( |
| 380 session_modal_widget->GetNativeView())); |
| 378 } | 381 } |
| 379 | 382 |
| 380 TEST_F(RootWindowControllerTest, ModalContainerBlockedSession) { | 383 TEST_F(RootWindowControllerTest, ModalContainerBlockedSession) { |
| 381 UpdateDisplay("600x600"); | 384 UpdateDisplay("600x600"); |
| 382 Shell* shell = Shell::GetInstance(); | 385 Shell* shell = Shell::GetInstance(); |
| 383 internal::RootWindowController* controller = | 386 RootWindowController* controller = shell->GetPrimaryRootWindowController(); |
| 384 shell->GetPrimaryRootWindowController(); | 387 aura::Window* lock_container = Shell::GetContainer( |
| 385 aura::Window* lock_container = | 388 controller->root_window(), kShellWindowId_LockScreenContainer); |
| 386 Shell::GetContainer(controller->root_window(), | |
| 387 internal::kShellWindowId_LockScreenContainer); | |
| 388 for (int block_reason = FIRST_BLOCK_REASON; | 389 for (int block_reason = FIRST_BLOCK_REASON; |
| 389 block_reason < NUMBER_OF_BLOCK_REASONS; | 390 block_reason < NUMBER_OF_BLOCK_REASONS; |
| 390 ++block_reason) { | 391 ++block_reason) { |
| 391 views::Widget* session_modal_widget = | 392 views::Widget* session_modal_widget = |
| 392 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 393 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| 393 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 394 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 394 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 395 kShellWindowId_SystemModalContainer) |
| 395 controller->GetSystemModalLayoutManager( | 396 ->layout_manager(), |
| 396 session_modal_widget->GetNativeView())); | 397 controller->GetSystemModalLayoutManager( |
| 398 session_modal_widget->GetNativeView())); |
| 397 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 399 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 398 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 400 kShellWindowId_SystemModalContainer) |
| 399 controller->GetSystemModalLayoutManager(NULL)); | 401 ->layout_manager(), |
| 402 controller->GetSystemModalLayoutManager(NULL)); |
| 400 session_modal_widget->Close(); | 403 session_modal_widget->Close(); |
| 401 | 404 |
| 402 BlockUserSession(static_cast<UserSessionBlockReason>(block_reason)); | 405 BlockUserSession(static_cast<UserSessionBlockReason>(block_reason)); |
| 403 | 406 |
| 404 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 407 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 405 internal::kShellWindowId_LockSystemModalContainer)->layout_manager(), | 408 kShellWindowId_LockSystemModalContainer) |
| 406 controller->GetSystemModalLayoutManager(NULL)); | 409 ->layout_manager(), |
| 410 controller->GetSystemModalLayoutManager(NULL)); |
| 407 | 411 |
| 408 views::Widget* lock_modal_widget = | 412 views::Widget* lock_modal_widget = |
| 409 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), | 413 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), |
| 410 lock_container); | 414 lock_container); |
| 411 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 415 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 412 internal::kShellWindowId_LockSystemModalContainer)->layout_manager(), | 416 kShellWindowId_LockSystemModalContainer) |
| 417 ->layout_manager(), |
| 413 controller->GetSystemModalLayoutManager( | 418 controller->GetSystemModalLayoutManager( |
| 414 lock_modal_widget->GetNativeView())); | 419 lock_modal_widget->GetNativeView())); |
| 415 | 420 |
| 416 session_modal_widget = | 421 session_modal_widget = |
| 417 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); | 422 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); |
| 418 EXPECT_EQ(Shell::GetContainer(controller->root_window(), | 423 EXPECT_EQ(Shell::GetContainer(controller->root_window(), |
| 419 internal::kShellWindowId_SystemModalContainer)->layout_manager(), | 424 kShellWindowId_SystemModalContainer) |
| 420 controller->GetSystemModalLayoutManager( | 425 ->layout_manager(), |
| 421 session_modal_widget->GetNativeView())); | 426 controller->GetSystemModalLayoutManager( |
| 427 session_modal_widget->GetNativeView())); |
| 422 session_modal_widget->Close(); | 428 session_modal_widget->Close(); |
| 423 | 429 |
| 424 lock_modal_widget->Close(); | 430 lock_modal_widget->Close(); |
| 425 UnblockUserSession(); | 431 UnblockUserSession(); |
| 426 } | 432 } |
| 427 } | 433 } |
| 428 | 434 |
| 429 TEST_F(RootWindowControllerTest, GetWindowForFullscreenMode) { | 435 TEST_F(RootWindowControllerTest, GetWindowForFullscreenMode) { |
| 430 UpdateDisplay("600x600"); | 436 UpdateDisplay("600x600"); |
| 431 internal::RootWindowController* controller = | 437 RootWindowController* controller = |
| 432 Shell::GetInstance()->GetPrimaryRootWindowController(); | 438 Shell::GetInstance()->GetPrimaryRootWindowController(); |
| 433 | 439 |
| 434 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 440 Widget* w1 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 435 w1->Maximize(); | 441 w1->Maximize(); |
| 436 Widget* w2 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); | 442 Widget* w2 = CreateTestWidget(gfx::Rect(0, 0, 100, 100)); |
| 437 w2->SetFullscreen(true); | 443 w2->SetFullscreen(true); |
| 438 // |w3| is a transient child of |w2|. | 444 // |w3| is a transient child of |w2|. |
| 439 Widget* w3 = Widget::CreateWindowWithParentAndBounds(NULL, | 445 Widget* w3 = Widget::CreateWindowWithParentAndBounds(NULL, |
| 440 w2->GetNativeWindow(), gfx::Rect(0, 0, 100, 100)); | 446 w2->GetNativeWindow(), gfx::Rect(0, 0, 100, 100)); |
| 441 | 447 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 w3->Activate(); | 499 w3->Activate(); |
| 494 EXPECT_EQ(w2->GetNativeWindow(), | 500 EXPECT_EQ(w2->GetNativeWindow(), |
| 495 controllers[0]->GetWindowForFullscreenMode()); | 501 controllers[0]->GetWindowForFullscreenMode()); |
| 496 EXPECT_EQ(NULL, controllers[1]->GetWindowForFullscreenMode()); | 502 EXPECT_EQ(NULL, controllers[1]->GetWindowForFullscreenMode()); |
| 497 } | 503 } |
| 498 | 504 |
| 499 // Test that user session window can't be focused if user session blocked by | 505 // Test that user session window can't be focused if user session blocked by |
| 500 // some overlapping UI. | 506 // some overlapping UI. |
| 501 TEST_F(RootWindowControllerTest, FocusBlockedWindow) { | 507 TEST_F(RootWindowControllerTest, FocusBlockedWindow) { |
| 502 UpdateDisplay("600x600"); | 508 UpdateDisplay("600x600"); |
| 503 internal::RootWindowController* controller = | 509 RootWindowController* controller = |
| 504 Shell::GetInstance()->GetPrimaryRootWindowController(); | 510 Shell::GetInstance()->GetPrimaryRootWindowController(); |
| 505 aura::Window* lock_container = | 511 aura::Window* lock_container = Shell::GetContainer( |
| 506 Shell::GetContainer(controller->root_window(), | 512 controller->root_window(), kShellWindowId_LockScreenContainer); |
| 507 internal::kShellWindowId_LockScreenContainer); | |
| 508 aura::Window* lock_window = Widget::CreateWindowWithParentAndBounds(NULL, | 513 aura::Window* lock_window = Widget::CreateWindowWithParentAndBounds(NULL, |
| 509 lock_container, gfx::Rect(0, 0, 100, 100))->GetNativeView(); | 514 lock_container, gfx::Rect(0, 0, 100, 100))->GetNativeView(); |
| 510 lock_window->Show(); | 515 lock_window->Show(); |
| 511 aura::Window* session_window = | 516 aura::Window* session_window = |
| 512 CreateTestWidget(gfx::Rect(0, 0, 100, 100))->GetNativeView(); | 517 CreateTestWidget(gfx::Rect(0, 0, 100, 100))->GetNativeView(); |
| 513 session_window->Show(); | 518 session_window->Show(); |
| 514 | 519 |
| 515 for (int block_reason = FIRST_BLOCK_REASON; | 520 for (int block_reason = FIRST_BLOCK_REASON; |
| 516 block_reason < NUMBER_OF_BLOCK_REASONS; | 521 block_reason < NUMBER_OF_BLOCK_REASONS; |
| 517 ++block_reason) { | 522 ++block_reason) { |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 return; | 637 return; |
| 633 | 638 |
| 634 UpdateDisplay("500x500,500x500"); | 639 UpdateDisplay("500x500,500x500"); |
| 635 | 640 |
| 636 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 641 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 637 aura::Window* primary_root_window = Shell::GetPrimaryRootWindow(); | 642 aura::Window* primary_root_window = Shell::GetPrimaryRootWindow(); |
| 638 aura::Window* secondary_root_window = | 643 aura::Window* secondary_root_window = |
| 639 root_windows[0] == primary_root_window ? | 644 root_windows[0] == primary_root_window ? |
| 640 root_windows[1] : root_windows[0]; | 645 root_windows[1] : root_windows[0]; |
| 641 | 646 |
| 642 ASSERT_TRUE(Shell::GetContainer( | 647 ASSERT_TRUE(Shell::GetContainer(primary_root_window, |
| 643 primary_root_window, | 648 kShellWindowId_VirtualKeyboardContainer)); |
| 644 internal::kShellWindowId_VirtualKeyboardContainer)); | 649 ASSERT_FALSE(Shell::GetContainer(secondary_root_window, |
| 645 ASSERT_FALSE(Shell::GetContainer( | 650 kShellWindowId_VirtualKeyboardContainer)); |
| 646 secondary_root_window, | |
| 647 internal::kShellWindowId_VirtualKeyboardContainer)); | |
| 648 } | 651 } |
| 649 | 652 |
| 650 // Test for http://crbug.com/263599. Virtual keyboard should be able to receive | 653 // Test for http://crbug.com/263599. Virtual keyboard should be able to receive |
| 651 // events at blocked user session. | 654 // events at blocked user session. |
| 652 TEST_F(VirtualKeyboardRootWindowControllerTest, | 655 TEST_F(VirtualKeyboardRootWindowControllerTest, |
| 653 ClickVirtualKeyboardInBlockedWindow) { | 656 ClickVirtualKeyboardInBlockedWindow) { |
| 654 aura::Window* root_window = Shell::GetPrimaryRootWindow(); | 657 aura::Window* root_window = Shell::GetPrimaryRootWindow(); |
| 655 aura::Window* keyboard_container = Shell::GetContainer(root_window, | 658 aura::Window* keyboard_container = |
| 656 internal::kShellWindowId_VirtualKeyboardContainer); | 659 Shell::GetContainer(root_window, kShellWindowId_VirtualKeyboardContainer); |
| 657 ASSERT_TRUE(keyboard_container); | 660 ASSERT_TRUE(keyboard_container); |
| 658 keyboard_container->Show(); | 661 keyboard_container->Show(); |
| 659 | 662 |
| 660 aura::Window* keyboard_window = Shell::GetInstance()->keyboard_controller()-> | 663 aura::Window* keyboard_window = Shell::GetInstance()->keyboard_controller()-> |
| 661 proxy()->GetKeyboardWindow(); | 664 proxy()->GetKeyboardWindow(); |
| 662 keyboard_container->AddChild(keyboard_window); | 665 keyboard_container->AddChild(keyboard_window); |
| 663 keyboard_window->set_owned_by_parent(false); | 666 keyboard_window->set_owned_by_parent(false); |
| 664 keyboard_window->SetBounds(gfx::Rect()); | 667 keyboard_window->SetBounds(gfx::Rect()); |
| 665 keyboard_window->Show(); | 668 keyboard_window->Show(); |
| 666 | 669 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 682 UnblockUserSession(); | 685 UnblockUserSession(); |
| 683 } | 686 } |
| 684 } | 687 } |
| 685 | 688 |
| 686 // Test for http://crbug.com/299787. RootWindowController should delete | 689 // Test for http://crbug.com/299787. RootWindowController should delete |
| 687 // the old container since the keyboard controller creates a new window in | 690 // the old container since the keyboard controller creates a new window in |
| 688 // GetWindowContainer(). | 691 // GetWindowContainer(). |
| 689 TEST_F(VirtualKeyboardRootWindowControllerTest, | 692 TEST_F(VirtualKeyboardRootWindowControllerTest, |
| 690 DeleteOldContainerOnVirtualKeyboardInit) { | 693 DeleteOldContainerOnVirtualKeyboardInit) { |
| 691 aura::Window* root_window = Shell::GetPrimaryRootWindow(); | 694 aura::Window* root_window = Shell::GetPrimaryRootWindow(); |
| 692 aura::Window* keyboard_container = Shell::GetContainer(root_window, | 695 aura::Window* keyboard_container = |
| 693 internal::kShellWindowId_VirtualKeyboardContainer); | 696 Shell::GetContainer(root_window, kShellWindowId_VirtualKeyboardContainer); |
| 694 ASSERT_TRUE(keyboard_container); | 697 ASSERT_TRUE(keyboard_container); |
| 695 // Track the keyboard container window. | 698 // Track the keyboard container window. |
| 696 aura::WindowTracker tracker; | 699 aura::WindowTracker tracker; |
| 697 tracker.Add(keyboard_container); | 700 tracker.Add(keyboard_container); |
| 698 // Mock a login user profile change to reinitialize the keyboard. | 701 // Mock a login user profile change to reinitialize the keyboard. |
| 699 ash::Shell::GetInstance()->OnLoginUserProfilePrepared(); | 702 ash::Shell::GetInstance()->OnLoginUserProfilePrepared(); |
| 700 // keyboard_container should no longer be present. | 703 // keyboard_container should no longer be present. |
| 701 EXPECT_FALSE(tracker.Contains(keyboard_container)); | 704 EXPECT_FALSE(tracker.Contains(keyboard_container)); |
| 702 } | 705 } |
| 703 | 706 |
| 704 // Test for crbug.com/342524. After user login, the work space should restore to | 707 // Test for crbug.com/342524. After user login, the work space should restore to |
| 705 // full screen. | 708 // full screen. |
| 706 TEST_F(VirtualKeyboardRootWindowControllerTest, RestoreWorkspaceAfterLogin) { | 709 TEST_F(VirtualKeyboardRootWindowControllerTest, RestoreWorkspaceAfterLogin) { |
| 707 aura::Window* root_window = Shell::GetPrimaryRootWindow(); | 710 aura::Window* root_window = Shell::GetPrimaryRootWindow(); |
| 708 aura::Window* keyboard_container = Shell::GetContainer(root_window, | 711 aura::Window* keyboard_container = |
| 709 internal::kShellWindowId_VirtualKeyboardContainer); | 712 Shell::GetContainer(root_window, kShellWindowId_VirtualKeyboardContainer); |
| 710 keyboard_container->Show(); | 713 keyboard_container->Show(); |
| 711 keyboard::KeyboardController* controller = | 714 keyboard::KeyboardController* controller = |
| 712 Shell::GetInstance()->keyboard_controller(); | 715 Shell::GetInstance()->keyboard_controller(); |
| 713 aura::Window* keyboard_window = controller->proxy()->GetKeyboardWindow(); | 716 aura::Window* keyboard_window = controller->proxy()->GetKeyboardWindow(); |
| 714 keyboard_container->AddChild(keyboard_window); | 717 keyboard_container->AddChild(keyboard_window); |
| 715 keyboard_window->set_owned_by_parent(false); | 718 keyboard_window->set_owned_by_parent(false); |
| 716 keyboard_window->Show(); | 719 keyboard_window->Show(); |
| 717 | 720 |
| 718 gfx::Rect before = ash::Shell::GetScreen()->GetPrimaryDisplay().work_area(); | 721 gfx::Rect before = ash::Shell::GetScreen()->GetPrimaryDisplay().work_area(); |
| 719 | 722 |
| 720 // Notify keyboard bounds changing. | 723 // Notify keyboard bounds changing. |
| 721 controller->NotifyKeyboardBoundsChanging( | 724 controller->NotifyKeyboardBoundsChanging( |
| 722 controller->proxy()->GetKeyboardWindow()->bounds()); | 725 controller->proxy()->GetKeyboardWindow()->bounds()); |
| 723 | 726 |
| 724 gfx::Rect after = ash::Shell::GetScreen()->GetPrimaryDisplay().work_area(); | 727 gfx::Rect after = ash::Shell::GetScreen()->GetPrimaryDisplay().work_area(); |
| 725 EXPECT_LT(after, before); | 728 EXPECT_LT(after, before); |
| 726 | 729 |
| 727 // Mock a login user profile change to reinitialize the keyboard. | 730 // Mock a login user profile change to reinitialize the keyboard. |
| 728 ash::Shell::GetInstance()->OnLoginUserProfilePrepared(); | 731 ash::Shell::GetInstance()->OnLoginUserProfilePrepared(); |
| 729 EXPECT_EQ(ash::Shell::GetScreen()->GetPrimaryDisplay().work_area(), before); | 732 EXPECT_EQ(ash::Shell::GetScreen()->GetPrimaryDisplay().work_area(), before); |
| 730 } | 733 } |
| 731 | 734 |
| 732 // Ensure that system modal dialogs do not block events targeted at the virtual | 735 // Ensure that system modal dialogs do not block events targeted at the virtual |
| 733 // keyboard. | 736 // keyboard. |
| 734 TEST_F(VirtualKeyboardRootWindowControllerTest, ClickWithActiveModalDialog) { | 737 TEST_F(VirtualKeyboardRootWindowControllerTest, ClickWithActiveModalDialog) { |
| 735 aura::Window* root_window = Shell::GetPrimaryRootWindow(); | 738 aura::Window* root_window = Shell::GetPrimaryRootWindow(); |
| 736 aura::Window* keyboard_container = Shell::GetContainer(root_window, | 739 aura::Window* keyboard_container = |
| 737 internal::kShellWindowId_VirtualKeyboardContainer); | 740 Shell::GetContainer(root_window, kShellWindowId_VirtualKeyboardContainer); |
| 738 ASSERT_TRUE(keyboard_container); | 741 ASSERT_TRUE(keyboard_container); |
| 739 keyboard_container->Show(); | 742 keyboard_container->Show(); |
| 740 | 743 |
| 741 aura::Window* keyboard_window = Shell::GetInstance()->keyboard_controller()-> | 744 aura::Window* keyboard_window = Shell::GetInstance()->keyboard_controller()-> |
| 742 proxy()->GetKeyboardWindow(); | 745 proxy()->GetKeyboardWindow(); |
| 743 keyboard_container->AddChild(keyboard_window); | 746 keyboard_container->AddChild(keyboard_window); |
| 744 keyboard_window->set_owned_by_parent(false); | 747 keyboard_window->set_owned_by_parent(false); |
| 745 keyboard_window->SetBounds(gfx::Rect()); | 748 keyboard_window->SetBounds(gfx::Rect()); |
| 746 keyboard_window->Show(); | 749 keyboard_window->Show(); |
| 747 | 750 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 765 | 768 |
| 766 modal_widget->Close(); | 769 modal_widget->Close(); |
| 767 | 770 |
| 768 // Verify that mouse events are now unblocked to the root window. | 771 // Verify that mouse events are now unblocked to the root window. |
| 769 root_window_event_generator.ClickLeftButton(); | 772 root_window_event_generator.ClickLeftButton(); |
| 770 EXPECT_EQ(2, handler->num_mouse_events() / 2); | 773 EXPECT_EQ(2, handler->num_mouse_events() / 2); |
| 771 } | 774 } |
| 772 | 775 |
| 773 } // namespace test | 776 } // namespace test |
| 774 } // namespace ash | 777 } // namespace ash |
| OLD | NEW |