summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/cros
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-13 22:53:29 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-13 22:53:29 +0000
commit8c60793bd95a39f9e820f0ca62e7a12c74810f54 (patch)
tree91804be0c94acf40dd57be434b501e31d3a74b53 /chrome/browser/chromeos/cros
parent40ec0567cd066f4b6a88d7e50d0f21d14712b313 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/chromeos/cros/cros_in_process_browser_test.cc18
-rw-r--r--chrome/browser/chromeos/cros/cros_in_process_browser_test.h17
-rw-r--r--chrome/browser/chromeos/cros/cros_library.cc18
-rw-r--r--chrome/browser/chromeos/cros/cros_library.h8
-rw-r--r--chrome/browser/chromeos/cros/mock_screen_lock_library.h27
-rw-r--r--chrome/browser/chromeos/cros/screen_lock_library.cc76
-rw-r--r--chrome/browser/chromeos/cros/screen_lock_library.h70
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_