diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-13 22:53:29 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-13 22:53:29 +0000 |
commit | 8c60793bd95a39f9e820f0ca62e7a12c74810f54 (patch) | |
tree | 91804be0c94acf40dd57be434b501e31d3a74b53 /chrome/browser/chromeos/cros | |
parent | 40ec0567cd066f4b6a88d7e50d0f21d14712b313 (diff) | |
download | chromium_src-8c60793bd95a39f9e820f0ca62e7a12c74810f54.zip chromium_src-8c60793bd95a39f9e820f0ca62e7a12c74810f54.tar.gz chromium_src-8c60793bd95a39f9e820f0ca62e7a12c74810f54.tar.bz2 |
Hook up ScreenLocker to screen lock cros library.
* Added ScreenLockerLibrary and its mock class.
* Call NotifyScreenLockCompleted when screen locker is shown
* Call NotifyScreenUnlocked when authentication is sucessful.
* Replace includes in cros_in_process_browser_test.cc with forward declarations.
* Added ScreenLockerTester for testing
* Added new browser test ScreenLockerTest.TestBasic
BUG=2914
TEST=added ScreenLockerTest.TestBasic browser test.
Review URL: http://codereview.chromium.org/2025009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47216 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/cros')
7 files changed, 228 insertions, 6 deletions
diff --git a/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc b/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc index 73d74f0..7128a9b 100644 --- a/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc +++ b/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc @@ -9,6 +9,13 @@ #include "base/time.h" #include "chrome/browser/browser.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/cros/mock_cryptohome_library.h" +#include "chrome/browser/chromeos/cros/mock_language_library.h" +#include "chrome/browser/chromeos/cros/mock_library_loader.h" +#include "chrome/browser/chromeos/cros/mock_network_library.h" +#include "chrome/browser/chromeos/cros/mock_power_library.h" +#include "chrome/browser/chromeos/cros/mock_screen_lock_library.h" +#include "chrome/browser/chromeos/cros/mock_synaptics_library.h" #include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_screen.h" #include "chrome/test/in_process_browser_test.h" @@ -29,6 +36,7 @@ CrosInProcessBrowserTest::CrosInProcessBrowserTest() mock_language_library_(NULL), mock_network_library_(NULL), mock_power_library_(NULL), + mock_screen_lock_library_(NULL), mock_synaptics_library_(NULL) {} CrosInProcessBrowserTest::~CrosInProcessBrowserTest() { @@ -87,6 +95,14 @@ void CrosInProcessBrowserTest::InitMockPowerLibrary() { test_api()->SetPowerLibrary(mock_power_library_, true); } +void CrosInProcessBrowserTest::InitMockScreenLockLibrary() { + InitMockLibraryLoader(); + if (mock_screen_lock_library_) + return; + mock_screen_lock_library_ = new MockScreenLockLibrary(); + test_api()->SetScreenLockLibrary(mock_screen_lock_library_, true); +} + void CrosInProcessBrowserTest::InitMockSynapticsLibrary() { InitMockLibraryLoader(); if (mock_synaptics_library_) @@ -208,6 +224,8 @@ void CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture() { test_api()->SetNetworkLibrary(NULL, false); if (mock_power_library_) test_api()->SetPowerLibrary(NULL, false); + if (mock_screen_lock_library_) + test_api()->SetScreenLockLibrary(NULL, false); if (mock_synaptics_library_) test_api()->SetSynapticsLibrary(NULL, false); } diff --git a/chrome/browser/chromeos/cros/cros_in_process_browser_test.h b/chrome/browser/chromeos/cros/cros_in_process_browser_test.h index 524ad93..f46c2ce 100644 --- a/chrome/browser/chromeos/cros/cros_in_process_browser_test.h +++ b/chrome/browser/chromeos/cros/cros_in_process_browser_test.h @@ -7,17 +7,20 @@ #include "base/scoped_ptr.h" #include "chrome/browser/chromeos/cros/cros_library.h" -#include "chrome/browser/chromeos/cros/mock_cryptohome_library.h" -#include "chrome/browser/chromeos/cros/mock_language_library.h" -#include "chrome/browser/chromeos/cros/mock_library_loader.h" -#include "chrome/browser/chromeos/cros/mock_network_library.h" -#include "chrome/browser/chromeos/cros/mock_power_library.h" -#include "chrome/browser/chromeos/cros/mock_synaptics_library.h" #include "chrome/test/in_process_browser_test.h" #include "third_party/cros/chromeos_language.h" namespace chromeos { +class MockLibraryLoader; +class MockScreenLockLibrary; +class MockCryptohomeLibrary; +class MockLanguageLibrary; +class MockNetworkLibrary; +class MockPowerLibrary; +class MockScreenLockLibrary; +class MockSynapticsLibrary; + // Base class for Chromium OS tests wanting to bring up a browser in the // unit test process and mock some parts of CrosLibrary. Once you mock part of // CrosLibrary it will be considered as successfully loaded and libraries @@ -47,6 +50,7 @@ class CrosInProcessBrowserTest : public InProcessBrowserTest { void InitMockLanguageLibrary(); void InitMockNetworkLibrary(); void InitMockPowerLibrary(); + void InitMockScreenLockLibrary(); void InitMockSynapticsLibrary(); // This method setups corresponding expectations for basic mocks that @@ -75,6 +79,7 @@ class CrosInProcessBrowserTest : public InProcessBrowserTest { MockLanguageLibrary* mock_language_library_; MockNetworkLibrary* mock_network_library_; MockPowerLibrary* mock_power_library_; + MockScreenLockLibrary* mock_screen_lock_library_; MockSynapticsLibrary* mock_synaptics_library_; ImePropertyList ime_properties_; diff --git a/chrome/browser/chromeos/cros/cros_library.cc b/chrome/browser/chromeos/cros/cros_library.cc index 5fafab8..c44fe43 100644 --- a/chrome/browser/chromeos/cros/cros_library.cc +++ b/chrome/browser/chromeos/cros/cros_library.cc @@ -11,6 +11,7 @@ #include "chrome/browser/chromeos/cros/mount_library.h" #include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/chromeos/cros/power_library.h" +#include "chrome/browser/chromeos/cros/screen_lock_library.h" #include "chrome/browser/chromeos/cros/speech_synthesis_library.h" #include "chrome/browser/chromeos/cros/synaptics_library.h" @@ -23,6 +24,7 @@ CrosLibrary::CrosLibrary() : library_loader_(NULL), mount_lib_(NULL), network_lib_(NULL), power_lib_(NULL), + screen_lock_lib_(NULL), speech_synthesis_lib_(NULL), synaptics_lib_(NULL), own_library_loader_(true), @@ -55,6 +57,8 @@ CrosLibrary::~CrosLibrary() { delete network_lib_; if (own_power_loader_ && power_lib_) delete power_lib_; + if (own_screen_lock_lib_ && screen_lock_lib_) + delete screen_lock_lib_; if (own_speech_synthesis_library_ && speech_synthesis_lib_) delete speech_synthesis_lib_; if (own_synaptics_library_ && synaptics_lib_) @@ -104,6 +108,12 @@ PowerLibrary* CrosLibrary::GetPowerLibrary() { return power_lib_; } +ScreenLockLibrary* CrosLibrary::GetScreenLockLibrary() { + if (!screen_lock_lib_) + screen_lock_lib_ = new ScreenLockLibraryImpl(); + return screen_lock_lib_; +} + SpeechSynthesisLibrary* CrosLibrary::GetSpeechSynthesisLibrary() { if (!speech_synthesis_lib_) speech_synthesis_lib_ = new SpeechSynthesisLibraryImpl(); @@ -190,6 +200,14 @@ void CrosLibrary::TestApi::SetPowerLibrary(PowerLibrary* library, bool own) { library_->power_lib_ = library; } +void CrosLibrary::TestApi::SetScreenLockLibrary(ScreenLockLibrary* library, + bool own) { + if (library_->own_screen_lock_lib_ && library_->screen_lock_lib_) + delete library_->screen_lock_lib_; + library_->own_screen_lock_lib_ = own; + library_->screen_lock_lib_ = library; +} + void CrosLibrary::TestApi::SetSpeechSynthesisLibrary( SpeechSynthesisLibrary* library, bool own) { if (library_->own_speech_synthesis_library_ && diff --git a/chrome/browser/chromeos/cros/cros_library.h b/chrome/browser/chromeos/cros/cros_library.h index 9578883..035ab4d 100644 --- a/chrome/browser/chromeos/cros/cros_library.h +++ b/chrome/browser/chromeos/cros/cros_library.h @@ -18,6 +18,7 @@ class LoginLibrary; class MountLibrary; class NetworkLibrary; class PowerLibrary; +class ScreenLockLibrary; class SpeechSynthesisLibrary; class SynapticsLibrary; @@ -48,6 +49,8 @@ class CrosLibrary { void SetNetworkLibrary(NetworkLibrary* library, bool own); // Setter for PowerLibrary. void SetPowerLibrary(PowerLibrary* library, bool own); + // Setter for ScreenLockLibrary. + void SetScreenLockLibrary(ScreenLockLibrary* library, bool own); // Setter for SpeechSynthesisLibrary. void SetSpeechSynthesisLibrary(SpeechSynthesisLibrary* library, bool own); // Setter for SynapticsLibrary. @@ -80,6 +83,9 @@ class CrosLibrary { // Getter for PowerLibrary PowerLibrary* GetPowerLibrary(); + // Getter for ScreenLockLibrary + ScreenLockLibrary* GetScreenLockLibrary(); + // This gets the singleton SpeechSynthesisLibrary. SpeechSynthesisLibrary* GetSpeechSynthesisLibrary(); @@ -112,6 +118,7 @@ class CrosLibrary { MountLibrary* mount_lib_; NetworkLibrary* network_lib_; PowerLibrary* power_lib_; + ScreenLockLibrary* screen_lock_lib_; SpeechSynthesisLibrary* speech_synthesis_lib_; SynapticsLibrary* synaptics_lib_; @@ -122,6 +129,7 @@ class CrosLibrary { bool own_mount_loader_; bool own_network_loader_; bool own_power_loader_; + bool own_screen_lock_lib_; bool own_speech_synthesis_library_; bool own_synaptics_library_; diff --git a/chrome/browser/chromeos/cros/mock_screen_lock_library.h b/chrome/browser/chromeos/cros/mock_screen_lock_library.h new file mode 100644 index 0000000..7043c28 --- /dev/null +++ b/chrome/browser/chromeos/cros/mock_screen_lock_library.h @@ -0,0 +1,27 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_CROS_MOCK_SCREEN_LOCK_LIBRARY_H_ +#define CHROME_BROWSER_CHROMEOS_CROS_MOCK_SCREEN_LOCK_LIBRARY_H_ + +#include "chrome/browser/chromeos/cros/screen_lock_library.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace chromeos { + +class MockScreenLockLibrary : public ScreenLockLibrary { + public: + MockScreenLockLibrary() {} + virtual ~MockScreenLockLibrary() {} + MOCK_METHOD1(AddObserver, void(Observer*)); + MOCK_METHOD1(RemoveObserver, void(Observer*)); + + MOCK_METHOD0(NotifyScreenLockCompleted, void()); + MOCK_METHOD0(NotifyScreenLockRequested, void()); + MOCK_METHOD0(NotifyScreenUnlocked, void()); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_CROS_MOCK_SCREEN_LOCK_LIBRARY_H_ diff --git a/chrome/browser/chromeos/cros/screen_lock_library.cc b/chrome/browser/chromeos/cros/screen_lock_library.cc new file mode 100644 index 0000000..84c01c0 --- /dev/null +++ b/chrome/browser/chromeos/cros/screen_lock_library.cc @@ -0,0 +1,76 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/cros/screen_lock_library.h" + +#include "base/message_loop.h" +#include "base/string_util.h" +#include "chrome/browser/chrome_thread.h" +#include "chrome/browser/chromeos/cros/cros_library.h" + +// Allows InvokeLater without adding refcounting. This class is a Singleton and +// won't be deleted until it's last InvokeLater is run. +template <> +struct RunnableMethodTraits<chromeos::ScreenLockLibraryImpl> { + void RetainCallee(chromeos::ScreenLockLibraryImpl* obj) {} + void ReleaseCallee(chromeos::ScreenLockLibraryImpl* obj) {} +}; + +namespace chromeos { + +ScreenLockLibraryImpl::ScreenLockLibraryImpl() { + if (CrosLibrary::Get()->EnsureLoaded()) { + Init(); + } +} + +ScreenLockLibraryImpl::~ScreenLockLibraryImpl() { + if (screen_lock_connection_) { + chromeos::DisconnectScreenLock(screen_lock_connection_); + } +} + +void ScreenLockLibraryImpl::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + +void ScreenLockLibraryImpl::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); +} + +void ScreenLockLibraryImpl::NotifyScreenLockCompleted() { + chromeos::NotifyScreenLockCompleted(); +} + +void ScreenLockLibraryImpl::NotifyScreenLockRequested() { + chromeos::NotifyScreenLockRequested(); +} + +void ScreenLockLibraryImpl::NotifyScreenUnlocked() { + chromeos::NotifyScreenUnlocked(); +} + +void ScreenLockLibraryImpl::Init() { + screen_lock_connection_ = chromeos::MonitorScreenLock( + &ScreenLockedHandler, this); +} + +void ScreenLockLibraryImpl::ScreenLocked() { + // Make sure we run on UI thread. + if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) { + ChromeThread::PostTask( + ChromeThread::UI, FROM_HERE, + NewRunnableMethod(this, &ScreenLockLibraryImpl::ScreenLocked)); + return; + } + FOR_EACH_OBSERVER(Observer, observers_, ScreenLocked(this)); +} + +// static +void ScreenLockLibraryImpl::ScreenLockedHandler(void* object) { + ScreenLockLibraryImpl* self = static_cast<ScreenLockLibraryImpl*>(object); + self->ScreenLocked(); +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/cros/screen_lock_library.h b/chrome/browser/chromeos/cros/screen_lock_library.h new file mode 100644 index 0000000..f36ca80 --- /dev/null +++ b/chrome/browser/chromeos/cros/screen_lock_library.h @@ -0,0 +1,70 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_CROS_SCREEN_LOCK_LIBRARY_H_ +#define CHROME_BROWSER_CHROMEOS_CROS_SCREEN_LOCK_LIBRARY_H_ + +#include "base/observer_list.h" +#include "third_party/cros/chromeos_screen_lock.h" + +namespace chromeos { + +// This interface defines interaction with the ChromeOS screen lock +// APIs. +class ScreenLockLibrary { + public: + class Observer { + public: + virtual ~Observer() {} + virtual void ScreenLocked(ScreenLockLibrary* obj) = 0; + }; + ScreenLockLibrary() {} + virtual ~ScreenLockLibrary() {} + virtual void AddObserver(Observer* observer) = 0; + virtual void RemoveObserver(Observer* observer) = 0; + + // Notifies PowerManager that screen lock has been completed. + virtual void NotifyScreenLockCompleted() = 0; + // Notifies PowerManager that a user requested to lock the screen. + virtual void NotifyScreenLockRequested() = 0; + // Notifies PowerManager that a user unlocked the screen. + virtual void NotifyScreenUnlocked() = 0; +}; + +// This class handles the interaction with the ChromeOS screen lock APIs. +class ScreenLockLibraryImpl : public ScreenLockLibrary { + public: + ScreenLockLibraryImpl(); + virtual ~ScreenLockLibraryImpl(); + + // ScreenLockLibrary implementations: + virtual void AddObserver(Observer* observer); + virtual void RemoveObserver(Observer* observer); + virtual void NotifyScreenLockCompleted(); + virtual void NotifyScreenLockRequested(); + virtual void NotifyScreenUnlocked(); + + private: + // This method is called when PowerManager requests to lock the screen. + // This method is called on a background thread. + static void ScreenLockedHandler(void* object); + + // This methods starts the monitoring of screen lock request. + void Init(); + + // Called by the handler to notify the screen lock request from + // PowerManager. + void ScreenLocked(); + + ObserverList<Observer> observers_; + + // A reference to the screen lock api + chromeos::ScreenLockConnection screen_lock_connection_; + + DISALLOW_COPY_AND_ASSIGN(ScreenLockLibraryImpl); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_CROS_SCREEN_LOCK_LIBRARY_H_ |