summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravayvod@chromium.org <avayvod@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-18 19:02:28 +0000
committeravayvod@chromium.org <avayvod@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-18 19:02:28 +0000
commit00f71870f67dcb264c0eabe3060fd06a3c9259af (patch)
tree4b05e79ce35348bbb7666b586b4a86f12d60a63a
parentea3761e2f33c58dfbe67b1acb7e8ccea77f932ef (diff)
downloadchromium_src-00f71870f67dcb264c0eabe3060fd06a3c9259af.zip
chromium_src-00f71870f67dcb264c0eabe3060fd06a3c9259af.tar.gz
chromium_src-00f71870f67dcb264c0eabe3060fd06a3c9259af.tar.bz2
Stop capturing video when screen is locked. Restart image capturing when screen is unlocked.
BUG=none TEST=(with new screen locker on L13) Login from new user login. Notice that camera light is on. Lock the screen with Ctrl-Alt-L. Notice that camera light is off. Unlock the screen. Notice that camera light is on and video is shown. Review URL: http://codereview.chromium.org/2847019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50267 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/login/user_image_screen.cc20
-rw-r--r--chrome/browser/chromeos/login/user_image_screen.h12
2 files changed, 31 insertions, 1 deletions
diff --git a/chrome/browser/chromeos/login/user_image_screen.cc b/chrome/browser/chromeos/login/user_image_screen.cc
index b39bd30b..b8b6ed9 100644
--- a/chrome/browser/chromeos/login/user_image_screen.cc
+++ b/chrome/browser/chromeos/login/user_image_screen.cc
@@ -11,6 +11,8 @@
#include "chrome/browser/chromeos/login/user_image_downloader.h"
#include "chrome/browser/chromeos/login/user_image_view.h"
#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/common/notification_service.h"
+#include "chrome/common/notification_type.h"
namespace chromeos {
@@ -29,6 +31,10 @@ const int kFrameRate = 40;
UserImageScreen::UserImageScreen(WizardScreenDelegate* delegate)
: ViewScreen<UserImageView>(delegate),
ALLOW_THIS_IN_INITIALIZER_LIST(camera_(new Camera(this))) {
+ registrar_.Add(
+ this,
+ NotificationType::SCREEN_LOCK_STATE_CHANGED,
+ NotificationService::AllSources());
if (!camera_->Initialize(kFrameWidth, kFrameHeight))
camera_.reset();
}
@@ -80,5 +86,19 @@ void UserImageScreen::OnCancel() {
delegate()->GetObserver(this)->OnExit(ScreenObserver::USER_IMAGE_SKIPPED);
}
+void UserImageScreen::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type != NotificationType::SCREEN_LOCK_STATE_CHANGED ||
+ !camera_.get())
+ return;
+
+ bool is_screen_locked = *Details<bool>(details).ptr();
+ if (is_screen_locked)
+ camera_->StopCapturing();
+ else
+ camera_->StartCapturing(base::TimeDelta::FromMilliseconds(kFrameRate));
+}
+
} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/user_image_screen.h b/chrome/browser/chromeos/login/user_image_screen.h
index f290304..609e5f6 100644
--- a/chrome/browser/chromeos/login/user_image_screen.h
+++ b/chrome/browser/chromeos/login/user_image_screen.h
@@ -8,13 +8,16 @@
#include "chrome/browser/chromeos/login/camera.h"
#include "chrome/browser/chromeos/login/user_image_view.h"
#include "chrome/browser/chromeos/login/view_screen.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
#include "third_party/skia/include/core/SkBitmap.h"
namespace chromeos {
class UserImageScreen: public ViewScreen<UserImageView>,
public Camera::Delegate,
- public UserImageView::Delegate {
+ public UserImageView::Delegate,
+ public NotificationObserver {
public:
explicit UserImageScreen(WizardScreenDelegate* delegate);
virtual ~UserImageScreen();
@@ -31,10 +34,17 @@ class UserImageScreen: public ViewScreen<UserImageView>,
virtual void OnOK(const SkBitmap& image);
virtual void OnCancel();
+ // NotificationObserver implementation:
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
private:
// Object that handles video capturing.
scoped_ptr<Camera> camera_;
+ NotificationRegistrar registrar_;
+
DISALLOW_COPY_AND_ASSIGN(UserImageScreen);
};