| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/system/power/tablet_power_button_controller.h" | 5 #include "ash/system/power/tablet_power_button_controller.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "ash/ash_switches.h" | 9 #include "ash/ash_switches.h" |
| 10 #include "ash/public/cpp/config.h" | 10 #include "ash/public/cpp/config.h" |
| 11 #include "ash/session/session_controller.h" | 11 #include "ash/session/session_controller.h" |
| 12 #include "ash/shell.h" | 12 #include "ash/shell.h" |
| 13 #include "ash/shell_port.h" | 13 #include "ash/shell_port.h" |
| 14 #include "ash/test/ash_test_base.h" | 14 #include "ash/test/ash_test_base.h" |
| 15 #include "ash/test/lock_state_controller_test_api.h" | 15 #include "ash/test/lock_state_controller_test_api.h" |
| 16 #include "ash/test/test_session_controller_client.h" | 16 #include "ash/test/test_session_controller_client.h" |
| 17 #include "ash/test/test_shell_delegate.h" | 17 #include "ash/test/test_shell_delegate.h" |
| 18 #include "ash/wm/lock_state_controller.h" | 18 #include "ash/wm/lock_state_controller.h" |
| 19 #include "ash/wm/maximize_mode/maximize_mode_controller.h" | |
| 20 #include "ash/wm/power_button_controller.h" | 19 #include "ash/wm/power_button_controller.h" |
| 20 #include "ash/wm/tablet_mode/tablet_mode_controller.h" |
| 21 #include "base/command_line.h" | 21 #include "base/command_line.h" |
| 22 #include "base/compiler_specific.h" | 22 #include "base/compiler_specific.h" |
| 23 #include "base/memory/ptr_util.h" | 23 #include "base/memory/ptr_util.h" |
| 24 #include "base/run_loop.h" | 24 #include "base/run_loop.h" |
| 25 #include "base/test/simple_test_tick_clock.h" | 25 #include "base/test/simple_test_tick_clock.h" |
| 26 #include "chromeos/dbus/dbus_thread_manager.h" | 26 #include "chromeos/dbus/dbus_thread_manager.h" |
| 27 #include "chromeos/dbus/fake_power_manager_client.h" | 27 #include "chromeos/dbus/fake_power_manager_client.h" |
| 28 #include "ui/events/event.h" | 28 #include "ui/events/event.h" |
| 29 #include "ui/events/test/event_generator.h" | 29 #include "ui/events/test/event_generator.h" |
| 30 | 30 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 | 105 |
| 106 void UnlockScreen() { | 106 void UnlockScreen() { |
| 107 lock_state_controller_->OnLockStateChanged(false); | 107 lock_state_controller_->OnLockStateChanged(false); |
| 108 GetSessionControllerClient()->UnlockScreen(); | 108 GetSessionControllerClient()->UnlockScreen(); |
| 109 } | 109 } |
| 110 | 110 |
| 111 void Initialize(LoginStatus status) { | 111 void Initialize(LoginStatus status) { |
| 112 SetUserLoggedIn(status != LoginStatus::NOT_LOGGED_IN); | 112 SetUserLoggedIn(status != LoginStatus::NOT_LOGGED_IN); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void EnableMaximizeMode(bool enabled) { | 115 void EnableTabletMode(bool enabled) { |
| 116 Shell::Get()->maximize_mode_controller()->EnableMaximizeModeWindowManager( | 116 Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager( |
| 117 enabled); | 117 enabled); |
| 118 } | 118 } |
| 119 | 119 |
| 120 bool GetLockedState() { | 120 bool GetLockedState() { |
| 121 // LockScreen is an async mojo call. Spin message loop to ensure it is | 121 // LockScreen is an async mojo call. Spin message loop to ensure it is |
| 122 // delivered. | 122 // delivered. |
| 123 SessionController* const session_controller = | 123 SessionController* const session_controller = |
| 124 Shell::Get()->session_controller(); | 124 Shell::Get()->session_controller(); |
| 125 session_controller->FlushMojoForTest(); | 125 session_controller->FlushMojoForTest(); |
| 126 return session_controller->IsScreenLocked(); | 126 return session_controller->IsScreenLocked(); |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 EXPECT_TRUE(test_api_->ShutdownTimerIsRunning()); | 295 EXPECT_TRUE(test_api_->ShutdownTimerIsRunning()); |
| 296 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); | 296 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 297 power_manager_client_->SendBrightnessChanged(0, false); | 297 power_manager_client_->SendBrightnessChanged(0, false); |
| 298 EXPECT_FALSE(test_api_->ShutdownTimerIsRunning()); | 298 EXPECT_FALSE(test_api_->ShutdownTimerIsRunning()); |
| 299 EXPECT_TRUE(GetBacklightsForcedOff()); | 299 EXPECT_TRUE(GetBacklightsForcedOff()); |
| 300 } | 300 } |
| 301 | 301 |
| 302 // For convertible device working on laptop mode, tests keyboard/mouse event | 302 // For convertible device working on laptop mode, tests keyboard/mouse event |
| 303 // when screen is off. | 303 // when screen is off. |
| 304 TEST_F(TabletPowerButtonControllerTest, ConvertibleOnLaptopMode) { | 304 TEST_F(TabletPowerButtonControllerTest, ConvertibleOnLaptopMode) { |
| 305 EnableMaximizeMode(false); | 305 EnableTabletMode(false); |
| 306 | 306 |
| 307 // KeyEvent should SetBacklightsForcedOff(false). | 307 // KeyEvent should SetBacklightsForcedOff(false). |
| 308 PressPowerButton(); | 308 PressPowerButton(); |
| 309 ReleasePowerButton(); | 309 ReleasePowerButton(); |
| 310 power_manager_client_->SendBrightnessChanged(0, false); | 310 power_manager_client_->SendBrightnessChanged(0, false); |
| 311 ASSERT_TRUE(GetBacklightsForcedOff()); | 311 ASSERT_TRUE(GetBacklightsForcedOff()); |
| 312 generator_->PressKey(ui::VKEY_L, ui::EF_NONE); | 312 generator_->PressKey(ui::VKEY_L, ui::EF_NONE); |
| 313 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 313 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 314 EXPECT_FALSE(GetBacklightsForcedOff()); | 314 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 315 | 315 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 328 power_manager_client_->SendBrightnessChanged(0, false); | 328 power_manager_client_->SendBrightnessChanged(0, false); |
| 329 ASSERT_TRUE(GetBacklightsForcedOff()); | 329 ASSERT_TRUE(GetBacklightsForcedOff()); |
| 330 generator_->set_flags(ui::EF_IS_SYNTHESIZED); | 330 generator_->set_flags(ui::EF_IS_SYNTHESIZED); |
| 331 generator_->MoveMouseBy(1, 1); | 331 generator_->MoveMouseBy(1, 1); |
| 332 generator_->set_flags(ui::EF_NONE); | 332 generator_->set_flags(ui::EF_NONE); |
| 333 EXPECT_TRUE(GetBacklightsForcedOff()); | 333 EXPECT_TRUE(GetBacklightsForcedOff()); |
| 334 } | 334 } |
| 335 | 335 |
| 336 // For convertible device working on tablet mode, keyboard/mouse event should | 336 // For convertible device working on tablet mode, keyboard/mouse event should |
| 337 // not SetBacklightsForcedOff(false) when screen is off. | 337 // not SetBacklightsForcedOff(false) when screen is off. |
| 338 TEST_F(TabletPowerButtonControllerTest, ConvertibleOnMaximizeMode) { | 338 TEST_F(TabletPowerButtonControllerTest, ConvertibleOnTabletMode) { |
| 339 EnableMaximizeMode(true); | 339 EnableTabletMode(true); |
| 340 | 340 |
| 341 PressPowerButton(); | 341 PressPowerButton(); |
| 342 ReleasePowerButton(); | 342 ReleasePowerButton(); |
| 343 power_manager_client_->SendBrightnessChanged(0, false); | 343 power_manager_client_->SendBrightnessChanged(0, false); |
| 344 ASSERT_TRUE(GetBacklightsForcedOff()); | 344 ASSERT_TRUE(GetBacklightsForcedOff()); |
| 345 generator_->PressKey(ui::VKEY_L, ui::EF_NONE); | 345 generator_->PressKey(ui::VKEY_L, ui::EF_NONE); |
| 346 EXPECT_TRUE(GetBacklightsForcedOff()); | 346 EXPECT_TRUE(GetBacklightsForcedOff()); |
| 347 | 347 |
| 348 generator_->MoveMouseBy(1, 1); | 348 generator_->MoveMouseBy(1, 1); |
| 349 EXPECT_TRUE(GetBacklightsForcedOff()); | 349 EXPECT_TRUE(GetBacklightsForcedOff()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 PressPowerButton(); | 382 PressPowerButton(); |
| 383 ReleasePowerButton(); | 383 ReleasePowerButton(); |
| 384 power_manager_client_->SendBrightnessChanged(0, false); | 384 power_manager_client_->SendBrightnessChanged(0, false); |
| 385 EXPECT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); | 385 EXPECT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); |
| 386 | 386 |
| 387 PressPowerButton(); | 387 PressPowerButton(); |
| 388 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 388 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 389 ReleasePowerButton(); | 389 ReleasePowerButton(); |
| 390 EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); | 390 EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); |
| 391 | 391 |
| 392 EnableMaximizeMode(false); | 392 EnableTabletMode(false); |
| 393 // KeyEvent on laptop mode when screen is off. | 393 // KeyEvent on laptop mode when screen is off. |
| 394 PressPowerButton(); | 394 PressPowerButton(); |
| 395 ReleasePowerButton(); | 395 ReleasePowerButton(); |
| 396 power_manager_client_->SendBrightnessChanged(0, false); | 396 power_manager_client_->SendBrightnessChanged(0, false); |
| 397 ASSERT_TRUE(GetBacklightsForcedOff()); | 397 ASSERT_TRUE(GetBacklightsForcedOff()); |
| 398 ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); | 398 ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); |
| 399 generator_->PressKey(ui::VKEY_L, ui::EF_NONE); | 399 generator_->PressKey(ui::VKEY_L, ui::EF_NONE); |
| 400 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 400 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 401 EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); | 401 EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); |
| 402 | 402 |
| 403 // MouseEvent on laptop mode when screen is off. | 403 // MouseEvent on laptop mode when screen is off. |
| 404 PressPowerButton(); | 404 PressPowerButton(); |
| 405 ReleasePowerButton(); | 405 ReleasePowerButton(); |
| 406 power_manager_client_->SendBrightnessChanged(0, false); | 406 power_manager_client_->SendBrightnessChanged(0, false); |
| 407 ASSERT_TRUE(GetBacklightsForcedOff()); | 407 ASSERT_TRUE(GetBacklightsForcedOff()); |
| 408 ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); | 408 ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); |
| 409 generator_->MoveMouseBy(1, 1); | 409 generator_->MoveMouseBy(1, 1); |
| 410 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 410 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 411 EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); | 411 EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); |
| 412 } | 412 } |
| 413 | 413 |
| 414 // When user switches convertible device between laptop mode and tablet mode, | 414 // When user switches convertible device between laptop mode and tablet mode, |
| 415 // power button may be pressed and held, which may cause unwanted shutdown. | 415 // power button may be pressed and held, which may cause unwanted shutdown. |
| 416 TEST_F(TabletPowerButtonControllerTest, | 416 TEST_F(TabletPowerButtonControllerTest, |
| 417 EnterOrLeaveMaximizeModeWhilePressingPowerButton) { | 417 EnterOrLeaveTabletModeWhilePressingPowerButton) { |
| 418 Initialize(LoginStatus::USER); | 418 Initialize(LoginStatus::USER); |
| 419 SetShouldLockScreenAutomatically(true); | 419 SetShouldLockScreenAutomatically(true); |
| 420 ASSERT_FALSE(GetLockedState()); | 420 ASSERT_FALSE(GetLockedState()); |
| 421 | 421 |
| 422 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); | 422 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 423 EXPECT_TRUE(test_api_->ShutdownTimerIsRunning()); | 423 EXPECT_TRUE(test_api_->ShutdownTimerIsRunning()); |
| 424 tablet_controller_->OnMaximizeModeStarted(); | 424 tablet_controller_->OnTabletModeStarted(); |
| 425 EXPECT_FALSE(test_api_->ShutdownTimerIsRunning()); | 425 EXPECT_FALSE(test_api_->ShutdownTimerIsRunning()); |
| 426 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(1500)); | 426 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(1500)); |
| 427 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); | 427 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 428 EXPECT_FALSE(GetLockedState()); | 428 EXPECT_FALSE(GetLockedState()); |
| 429 EXPECT_FALSE(GetBacklightsForcedOff()); | 429 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 430 | 430 |
| 431 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); | 431 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 432 test_api_->TriggerShutdownTimeout(); | 432 test_api_->TriggerShutdownTimeout(); |
| 433 EXPECT_TRUE(lock_state_test_api_->shutdown_timer_is_running()); | 433 EXPECT_TRUE(lock_state_test_api_->shutdown_timer_is_running()); |
| 434 tablet_controller_->OnMaximizeModeStarted(); | 434 tablet_controller_->OnTabletModeStarted(); |
| 435 EXPECT_FALSE(lock_state_test_api_->shutdown_timer_is_running()); | 435 EXPECT_FALSE(lock_state_test_api_->shutdown_timer_is_running()); |
| 436 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(2500)); | 436 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(2500)); |
| 437 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); | 437 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 438 EXPECT_FALSE(GetLockedState()); | 438 EXPECT_FALSE(GetLockedState()); |
| 439 EXPECT_FALSE(GetBacklightsForcedOff()); | 439 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 440 | 440 |
| 441 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); | 441 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 442 EXPECT_TRUE(test_api_->ShutdownTimerIsRunning()); | 442 EXPECT_TRUE(test_api_->ShutdownTimerIsRunning()); |
| 443 tablet_controller_->OnMaximizeModeEnded(); | 443 tablet_controller_->OnTabletModeEnded(); |
| 444 EXPECT_FALSE(test_api_->ShutdownTimerIsRunning()); | 444 EXPECT_FALSE(test_api_->ShutdownTimerIsRunning()); |
| 445 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(3500)); | 445 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(3500)); |
| 446 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); | 446 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 447 EXPECT_FALSE(GetLockedState()); | 447 EXPECT_FALSE(GetLockedState()); |
| 448 EXPECT_FALSE(GetBacklightsForcedOff()); | 448 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 449 | 449 |
| 450 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); | 450 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 451 test_api_->TriggerShutdownTimeout(); | 451 test_api_->TriggerShutdownTimeout(); |
| 452 EXPECT_TRUE(lock_state_test_api_->shutdown_timer_is_running()); | 452 EXPECT_TRUE(lock_state_test_api_->shutdown_timer_is_running()); |
| 453 tablet_controller_->OnMaximizeModeEnded(); | 453 tablet_controller_->OnTabletModeEnded(); |
| 454 EXPECT_FALSE(lock_state_test_api_->shutdown_timer_is_running()); | 454 EXPECT_FALSE(lock_state_test_api_->shutdown_timer_is_running()); |
| 455 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(4500)); | 455 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(4500)); |
| 456 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); | 456 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 457 EXPECT_FALSE(GetLockedState()); | 457 EXPECT_FALSE(GetLockedState()); |
| 458 EXPECT_FALSE(GetBacklightsForcedOff()); | 458 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 459 } | 459 } |
| 460 | 460 |
| 461 // Tests that repeated power button releases are ignored (crbug.com/675291). | 461 // Tests that repeated power button releases are ignored (crbug.com/675291). |
| 462 TEST_F(TabletPowerButtonControllerTest, IgnoreRepeatedPowerButtonReleases) { | 462 TEST_F(TabletPowerButtonControllerTest, IgnoreRepeatedPowerButtonReleases) { |
| 463 // Advance a long duration from initialized last resume time in | 463 // Advance a long duration from initialized last resume time in |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 | 553 |
| 554 SendAccelerometerUpdate(); | 554 SendAccelerometerUpdate(); |
| 555 tablet_controller_ = Shell::Get() | 555 tablet_controller_ = Shell::Get() |
| 556 ->power_button_controller() | 556 ->power_button_controller() |
| 557 ->tablet_power_button_controller_for_test(); | 557 ->tablet_power_button_controller_for_test(); |
| 558 EXPECT_TRUE(tablet_controller_); | 558 EXPECT_TRUE(tablet_controller_); |
| 559 } | 559 } |
| 560 | 560 |
| 561 } // namespace test | 561 } // namespace test |
| 562 } // namespace ash | 562 } // namespace ash |
| OLD | NEW |