1 // Copyright 2017 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ash/system/power/power_button_test_base.h" 6 7 #include "ash/public/cpp/ash_switches.h" 8 #include "ash/public/cpp/test/shell_test_api.h" 9 #include "ash/session/session_controller_impl.h" 10 #include "ash/session/test_session_controller_client.h" 11 #include "ash/shell.h" 12 #include "ash/system/power/power_button_controller.h" 13 #include "ash/system/power/power_button_controller_test_api.h" 14 #include "ash/wm/lock_state_controller.h" 15 #include "ash/wm/lock_state_controller_test_api.h" 16 #include "ash/wm/tablet_mode/tablet_mode_controller.h" 17 #include "base/command_line.h" 18 #include "base/memory/ptr_util.h" 19 #include "base/test/simple_test_tick_clock.h" 20 #include "chromeos/dbus/power/power_manager_client.h" 21 #include "ui/events/event.h" 22 #include "ui/events/test/event_generator.h" 23 24 namespace ash { 25 26 PowerButtonTestBase::PowerButtonTestBase() = default; 27 28 PowerButtonTestBase::~PowerButtonTestBase() = default; 29 SetUp()30void PowerButtonTestBase::SetUp() { 31 AshTestBase::SetUp(); 32 33 lock_state_controller_ = Shell::Get()->lock_state_controller(); 34 lock_state_test_api_ = 35 std::make_unique<LockStateControllerTestApi>(lock_state_controller_); 36 } 37 TearDown()38void PowerButtonTestBase::TearDown() { 39 AshTestBase::TearDown(); 40 } 41 ResetPowerButtonController()42void PowerButtonTestBase::ResetPowerButtonController() { 43 ShellTestApi().ResetPowerButtonControllerForTest(); 44 power_button_test_api_ = nullptr; 45 InitPowerButtonControllerMembers( 46 chromeos::PowerManagerClient::TabletMode::UNSUPPORTED); 47 } 48 InitPowerButtonControllerMembers(chromeos::PowerManagerClient::TabletMode initial_tablet_mode_switch_state)49void PowerButtonTestBase::InitPowerButtonControllerMembers( 50 chromeos::PowerManagerClient::TabletMode initial_tablet_mode_switch_state) { 51 power_button_controller_ = Shell::Get()->power_button_controller(); 52 power_button_test_api_ = 53 std::make_unique<PowerButtonControllerTestApi>(power_button_controller_); 54 power_button_test_api_->SetTickClock(&tick_clock_); 55 56 if (initial_tablet_mode_switch_state != 57 chromeos::PowerManagerClient::TabletMode::UNSUPPORTED) { 58 SetTabletModeSwitchState(initial_tablet_mode_switch_state); 59 } else { 60 screenshot_controller_ = nullptr; 61 } 62 } 63 SetTabletModeSwitchState(chromeos::PowerManagerClient::TabletMode tablet_mode_switch_state)64void PowerButtonTestBase::SetTabletModeSwitchState( 65 chromeos::PowerManagerClient::TabletMode tablet_mode_switch_state) { 66 power_button_controller_->OnGetSwitchStates( 67 chromeos::PowerManagerClient::SwitchStates{ 68 chromeos::PowerManagerClient::LidState::OPEN, 69 tablet_mode_switch_state}); 70 71 screenshot_controller_ = power_button_test_api_->GetScreenshotController(); 72 } 73 PressPowerButton()74void PowerButtonTestBase::PressPowerButton() { 75 power_button_controller_->PowerButtonEventReceived(true, 76 tick_clock_.NowTicks()); 77 } 78 ReleasePowerButton()79void PowerButtonTestBase::ReleasePowerButton() { 80 power_button_controller_->PowerButtonEventReceived(false, 81 tick_clock_.NowTicks()); 82 } 83 PressKey(ui::KeyboardCode key_code)84void PowerButtonTestBase::PressKey(ui::KeyboardCode key_code) { 85 GetEventGenerator()->PressKey(key_code, ui::EF_NONE); 86 } 87 ReleaseKey(ui::KeyboardCode key_code)88void PowerButtonTestBase::ReleaseKey(ui::KeyboardCode key_code) { 89 GetEventGenerator()->ReleaseKey(key_code, ui::EF_NONE); 90 } 91 GenerateMouseMoveEvent()92void PowerButtonTestBase::GenerateMouseMoveEvent() { 93 GetEventGenerator()->MoveMouseTo(10, 10); 94 } 95 Initialize(PowerButtonController::ButtonType button_type,LoginStatus status)96void PowerButtonTestBase::Initialize( 97 PowerButtonController::ButtonType button_type, 98 LoginStatus status) { 99 power_button_test_api_->SetPowerButtonType(button_type); 100 if (status == LoginStatus::NOT_LOGGED_IN) 101 ClearLogin(); 102 else 103 CreateUserSessions(1); 104 105 if (status == LoginStatus::GUEST) 106 SetCanLockScreen(false); 107 } 108 LockScreen()109void PowerButtonTestBase::LockScreen() { 110 lock_state_controller_->OnLockStateChanged(true); 111 GetSessionControllerClient()->LockScreen(); 112 } 113 UnlockScreen()114void PowerButtonTestBase::UnlockScreen() { 115 lock_state_controller_->OnLockStateChanged(false); 116 GetSessionControllerClient()->UnlockScreen(); 117 } 118 EnableTabletMode(bool enable)119void PowerButtonTestBase::EnableTabletMode(bool enable) { 120 Shell::Get()->tablet_mode_controller()->SetEnabledForTest(enable); 121 } 122 AdvanceClockToAvoidIgnoring()123void PowerButtonTestBase::AdvanceClockToAvoidIgnoring() { 124 tick_clock_.Advance(PowerButtonController::kIgnoreRepeatedButtonUpDelay + 125 base::TimeDelta::FromMilliseconds(1)); 126 } 127 128 } // namespace ash 129