11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/system/chromeos/power/power_event_observer.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/test/ash_test_base.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/time/time.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace ash { 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class PowerEventObserverTest : public test::AshTestBase { 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PowerEventObserverTest() {} 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~PowerEventObserverTest() {} 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // test::AshTestBase::SetUp() overrides: 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetUp() OVERRIDE { 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) test::AshTestBase::SetUp(); 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_.reset(new PowerEventObserver()); 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void TearDown() OVERRIDE { 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_.reset(); 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) test::AshTestBase::TearDown(); 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected: 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<PowerEventObserver> observer_; 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PowerEventObserverTest); 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(PowerEventObserverTest, LockBeforeSuspend) { 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) chromeos::PowerManagerClient* client = 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Check that the observer requests a suspend-readiness callback when it hears 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // that the system is about to suspend. 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetCanLockScreen(true); 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetShouldLockScreenBeforeSuspending(true); 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_->SuspendImminent(); 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, client->GetNumPendingSuspendReadinessCallbacks()); 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // It should run the callback when it hears that the screen is locked. 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_->ScreenIsLocked(); 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RunAllPendingInMessageLoop(); 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If the system is already locked, no callback should be requested. 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observer_->SuspendDone(base::TimeDelta()); 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_->ScreenIsUnlocked(); 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_->ScreenIsLocked(); 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_->SuspendImminent(); 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // It also shouldn't request a callback if it isn't instructed to lock the 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // screen. 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observer_->SuspendDone(base::TimeDelta()); 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetShouldLockScreenBeforeSuspending(false); 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) observer_->SuspendImminent(); 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace ash 71