| 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/chromeos/power/tablet_power_button_controller.h" | 5 #include "ash/system/chromeos/power/tablet_power_button_controller.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "ash/common/ash_switches.h" | 9 #include "ash/common/ash_switches.h" |
| 10 #include "ash/common/session/session_state_delegate.h" | 10 #include "ash/common/session/session_state_delegate.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 54 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 55 switches::kAshEnableTabletPowerButton); | 55 switches::kAshEnableTabletPowerButton); |
| 56 AshTestBase::SetUp(); | 56 AshTestBase::SetUp(); |
| 57 | 57 |
| 58 lock_state_controller_ = Shell::GetInstance()->lock_state_controller(); | 58 lock_state_controller_ = Shell::GetInstance()->lock_state_controller(); |
| 59 tablet_controller_ = Shell::GetInstance() | 59 tablet_controller_ = Shell::GetInstance() |
| 60 ->power_button_controller() | 60 ->power_button_controller() |
| 61 ->tablet_power_button_controller_for_test(); | 61 ->tablet_power_button_controller_for_test(); |
| 62 test_api_ = base::MakeUnique<TabletPowerButtonController::TestApi>( | 62 test_api_ = base::MakeUnique<TabletPowerButtonController::TestApi>( |
| 63 tablet_controller_); | 63 tablet_controller_); |
| 64 tick_clock_ = new base::SimpleTestTickClock; |
| 65 tablet_controller_->SetTickClockForTesting( |
| 66 std::unique_ptr<base::TickClock>(tick_clock_)); |
| 64 generator_ = &AshTestBase::GetEventGenerator(); | 67 generator_ = &AshTestBase::GetEventGenerator(); |
| 65 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 68 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 66 EXPECT_FALSE(GetBacklightsForcedOff()); | 69 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 67 } | 70 } |
| 68 | 71 |
| 69 void TearDown() override { | 72 void TearDown() override { |
| 70 generator_ = nullptr; | 73 generator_ = nullptr; |
| 71 AshTestBase::TearDown(); | 74 AshTestBase::TearDown(); |
| 72 chromeos::DBusThreadManager::Shutdown(); | 75 chromeos::DBusThreadManager::Shutdown(); |
| 73 } | 76 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 base::RunLoop().RunUntilIdle(); | 111 base::RunLoop().RunUntilIdle(); |
| 109 return forced_off; | 112 return forced_off; |
| 110 } | 113 } |
| 111 | 114 |
| 112 // Ownership is passed on to chromeos::DBusThreadManager. | 115 // Ownership is passed on to chromeos::DBusThreadManager. |
| 113 chromeos::FakePowerManagerClient* power_manager_client_; | 116 chromeos::FakePowerManagerClient* power_manager_client_; |
| 114 | 117 |
| 115 LockStateController* lock_state_controller_; // Not owned. | 118 LockStateController* lock_state_controller_; // Not owned. |
| 116 TabletPowerButtonController* tablet_controller_; // Not owned. | 119 TabletPowerButtonController* tablet_controller_; // Not owned. |
| 117 std::unique_ptr<TabletPowerButtonController::TestApi> test_api_; | 120 std::unique_ptr<TabletPowerButtonController::TestApi> test_api_; |
| 121 base::SimpleTestTickClock* tick_clock_; // Not owned. |
| 118 ui::test::EventGenerator* generator_ = nullptr; | 122 ui::test::EventGenerator* generator_ = nullptr; |
| 119 | 123 |
| 120 DISALLOW_COPY_AND_ASSIGN(TabletPowerButtonControllerTest); | 124 DISALLOW_COPY_AND_ASSIGN(TabletPowerButtonControllerTest); |
| 121 }; | 125 }; |
| 122 | 126 |
| 123 TEST_F(TabletPowerButtonControllerTest, LockScreenIfRequired) { | 127 TEST_F(TabletPowerButtonControllerTest, LockScreenIfRequired) { |
| 124 Initialize(LoginStatus::USER); | 128 Initialize(LoginStatus::USER); |
| 125 SetShouldLockScreenAutomatically(true); | 129 SetShouldLockScreenAutomatically(true); |
| 126 EXPECT_FALSE(GetLockedState()); | 130 EXPECT_FALSE(GetLockedState()); |
| 127 | 131 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 // Tests tapping power button when screen is idle off. | 207 // Tests tapping power button when screen is idle off. |
| 204 TEST_F(TabletPowerButtonControllerTest, TappingPowerButtonWhenScreenIsIdleOff) { | 208 TEST_F(TabletPowerButtonControllerTest, TappingPowerButtonWhenScreenIsIdleOff) { |
| 205 power_manager_client_->SendBrightnessChanged(0, false); | 209 power_manager_client_->SendBrightnessChanged(0, false); |
| 206 PressPowerButton(); | 210 PressPowerButton(); |
| 207 EXPECT_FALSE(GetBacklightsForcedOff()); | 211 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 208 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 212 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 209 ReleasePowerButton(); | 213 ReleasePowerButton(); |
| 210 EXPECT_FALSE(GetBacklightsForcedOff()); | 214 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 211 } | 215 } |
| 212 | 216 |
| 213 // Tests tapping power button when device is suspended. | 217 // Tests tapping power button when device is suspended without backlights forced |
| 214 TEST_F(TabletPowerButtonControllerTest, TappingPowerButtonWhenSuspended) { | 218 // off. |
| 215 base::SimpleTestTickClock* tick_clock = new base::SimpleTestTickClock; | 219 TEST_F(TabletPowerButtonControllerTest, |
| 216 // |tick_clock| owned by |tablet_controller_|. | 220 TappingPowerButtonWhenSuspendedWithoutBacklightsForcedOff) { |
| 217 tablet_controller_->SetTickClockForTesting( | |
| 218 std::unique_ptr<base::TickClock>(tick_clock)); | |
| 219 | |
| 220 power_manager_client_->SendSuspendImminent(); | 221 power_manager_client_->SendSuspendImminent(); |
| 221 power_manager_client_->SendBrightnessChanged(0, false); | 222 power_manager_client_->SendBrightnessChanged(0, false); |
| 222 // There is a power button pressed here, but PowerButtonEvent is sent later. | 223 // There is a power button pressed here, but PowerButtonEvent is sent later. |
| 223 power_manager_client_->SendSuspendDone(); | 224 power_manager_client_->SendSuspendDone(); |
| 224 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); | 225 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 225 | 226 |
| 226 // Send the power button event after a short delay and check that it is | 227 // Send the power button event after a short delay and check that it is |
| 227 // ignored. | 228 // ignored. |
| 228 tick_clock->Advance(base::TimeDelta::FromMilliseconds(500)); | 229 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(500)); |
| 229 power_manager_client_->SendPowerButtonEvent(true, tick_clock->NowTicks()); | 230 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 230 power_manager_client_->SendPowerButtonEvent(false, tick_clock->NowTicks()); | 231 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 231 EXPECT_FALSE(GetBacklightsForcedOff()); | 232 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 232 | 233 |
| 233 // Send the power button event after a longer delay and check that it is not | 234 // Send the power button event after a longer delay and check that it is not |
| 234 // ignored. | 235 // ignored. |
| 235 tick_clock->Advance(base::TimeDelta::FromMilliseconds(1600)); | 236 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(1600)); |
| 236 power_manager_client_->SendPowerButtonEvent(true, tick_clock->NowTicks()); | 237 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 237 power_manager_client_->SendPowerButtonEvent(false, tick_clock->NowTicks()); | 238 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 239 power_manager_client_->SendBrightnessChanged(0, false); |
| 238 EXPECT_TRUE(GetBacklightsForcedOff()); | 240 EXPECT_TRUE(GetBacklightsForcedOff()); |
| 239 } | 241 } |
| 240 | 242 |
| 243 // Tests tapping power button when device is suspended with backlights forced |
| 244 // off. |
| 245 TEST_F(TabletPowerButtonControllerTest, |
| 246 TappingPowerButtonWhenSuspendedWithBacklightsForcedOff) { |
| 247 PressPowerButton(); |
| 248 ReleasePowerButton(); |
| 249 power_manager_client_->SendBrightnessChanged(0, false); |
| 250 EXPECT_TRUE(GetBacklightsForcedOff()); |
| 251 power_manager_client_->SendSuspendImminent(); |
| 252 // There is a power button pressed here, but PowerButtonEvent is sent later. |
| 253 // Because of backlights forced off, resuming system will not restore |
| 254 // brightness. |
| 255 power_manager_client_->SendSuspendDone(); |
| 256 |
| 257 // Send the power button event after a short delay and check that it is |
| 258 // ignored. But if backlights are forced off, stop forcing off. |
| 259 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(500)); |
| 260 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 261 power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); |
| 262 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 263 EXPECT_FALSE(GetBacklightsForcedOff()); |
| 264 |
| 265 // Send the power button event after a longer delay and check that it is not |
| 266 // ignored. |
| 267 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(1600)); |
| 268 power_manager_client_->SendPowerButtonEvent(true, tick_clock_->NowTicks()); |
| 269 power_manager_client_->SendPowerButtonEvent(false, tick_clock_->NowTicks()); |
| 270 power_manager_client_->SendBrightnessChanged(0, false); |
| 271 EXPECT_TRUE(GetBacklightsForcedOff()); |
| 272 } |
| 273 |
| 241 // For convertible device working on laptop mode, tests keyboard/mouse event | 274 // For convertible device working on laptop mode, tests keyboard/mouse event |
| 242 // when screen is off. | 275 // when screen is off. |
| 243 TEST_F(TabletPowerButtonControllerTest, ConvertibleOnLaptopMode) { | 276 TEST_F(TabletPowerButtonControllerTest, ConvertibleOnLaptopMode) { |
| 244 EnableMaximizeMode(false); | 277 EnableMaximizeMode(false); |
| 245 | 278 |
| 246 // KeyEvent should SetBacklightsForcedOff(false). | 279 // KeyEvent should SetBacklightsForcedOff(false). |
| 247 PressPowerButton(); | 280 PressPowerButton(); |
| 248 ReleasePowerButton(); | 281 ReleasePowerButton(); |
| 249 power_manager_client_->SendBrightnessChanged(0, false); | 282 power_manager_client_->SendBrightnessChanged(0, false); |
| 250 EXPECT_TRUE(GetBacklightsForcedOff()); | 283 EXPECT_TRUE(GetBacklightsForcedOff()); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 tablet_controller_->OnKeyEvent(&power_key_pressed); | 351 tablet_controller_->OnKeyEvent(&power_key_pressed); |
| 319 tablet_controller_->OnKeyEvent(&power_key_pressed); | 352 tablet_controller_->OnKeyEvent(&power_key_pressed); |
| 320 ReleasePowerButton(); | 353 ReleasePowerButton(); |
| 321 tablet_controller_->OnKeyEvent(&power_key_released); | 354 tablet_controller_->OnKeyEvent(&power_key_released); |
| 322 tablet_controller_->OnKeyEvent(&power_key_released); | 355 tablet_controller_->OnKeyEvent(&power_key_released); |
| 323 EXPECT_EQ(1, power_manager_client_->num_set_backlights_forced_off_calls()); | 356 EXPECT_EQ(1, power_manager_client_->num_set_backlights_forced_off_calls()); |
| 324 } | 357 } |
| 325 | 358 |
| 326 } // namespace test | 359 } // namespace test |
| 327 } // namespace ash | 360 } // namespace ash |
| OLD | NEW |