summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-19 21:37:51 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-19 21:37:51 +0000
commitbb1a29f87a4c1de9ffe44b8029af64f62ee0a194 (patch)
tree298e86907837c7b795f5043f50726a2bb30d0b15 /chrome/browser
parent853fff581a3005eac1f9dd3a060c5ec448218e4f (diff)
downloadchromium_src-bb1a29f87a4c1de9ffe44b8029af64f62ee0a194.zip
chromium_src-bb1a29f87a4c1de9ffe44b8029af64f62ee0a194.tar.gz
chromium_src-bb1a29f87a4c1de9ffe44b8029af64f62ee0a194.tar.bz2
Show user's picture in screen locker immediately.
This also fixes a flasing when screen saver kicks in. BUG=chromium-os:7900 TEST=manual. when locking screen, the user's view should be shown along with background screen. The input field will still be disabled until both keyboard and pointer input are grabbed by screen locker. Review URL: http://codereview.chromium.org/3815015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63114 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chromeos/login/screen_locker.cc12
-rw-r--r--chrome/browser/chromeos/login/screen_locker.h5
-rw-r--r--chrome/browser/chromeos/login/screen_locker_tester.cc4
3 files changed, 14 insertions, 7 deletions
diff --git a/chrome/browser/chromeos/login/screen_locker.cc b/chrome/browser/chromeos/login/screen_locker.cc
index 4fb0eb0..db5365d 100644
--- a/chrome/browser/chromeos/login/screen_locker.cc
+++ b/chrome/browser/chromeos/login/screen_locker.cc
@@ -504,7 +504,8 @@ ScreenLocker::ScreenLocker(const UserManager::User& user)
input_grabbed_(false),
// TODO(oshima): support auto login mode (this is not implemented yet)
// http://crosbug.com/1881
- unlock_on_input_(user_.email().empty()) {
+ unlock_on_input_(user_.email().empty()),
+ locked_(false) {
DCHECK(!screen_locker_);
screen_locker_ = this;
}
@@ -527,6 +528,7 @@ void ScreenLocker::Init() {
if (!unlock_on_input_) {
screen_lock_view_ = new ScreenLockView(this);
screen_lock_view_->Init();
+ screen_lock_view_->SetEnabled(false);
size = screen_lock_view_->GetPreferredSize();
} else {
input_event_observer_.reset(new InputEventObserver(this));
@@ -538,7 +540,6 @@ void ScreenLocker::Init() {
lock_widget_->InitWithWidget(lock_window_, gfx::Rect(size));
if (screen_lock_view_)
lock_widget_->SetContentsView(screen_lock_view_);
- lock_widget_->GetRootView()->SetVisible(false);
lock_widget_->Show();
// Configuring the background url.
@@ -547,6 +548,8 @@ void ScreenLocker::Init() {
switches::kScreenSaverUrl);
background_view_ = new ScreenLockerBackgroundView(lock_widget_);
background_view_->Init(GURL(url_string));
+ if (background_view_->ScreenSaverEnabled())
+ StartScreenSaver();
DCHECK(GTK_WIDGET_REALIZED(lock_window_->GetNativeView()));
WmIpc::instance()->SetWindowType(
@@ -767,16 +770,15 @@ void ScreenLocker::SetAuthenticator(Authenticator* authenticator) {
void ScreenLocker::ScreenLockReady() {
LOG(INFO) << "ScreenLockReady: sending completed signal to power manager.";
- // Don't show the password field until we grab all inputs.
- lock_widget_->GetRootView()->SetVisible(true);
+ locked_ = true;
if (background_view_->ScreenSaverEnabled()) {
lock_widget_->GetFocusManager()->RegisterAccelerator(
views::Accelerator(app::VKEY_ESCAPE, false, false, false), this);
locker_input_event_observer_.reset(new LockerInputEventObserver(this));
MessageLoopForUI::current()->AddObserver(
locker_input_event_observer_.get());
- StartScreenSaver();
} else {
+ // Don't enable the password field until we grab all inputs.
EnableInput();
}
diff --git a/chrome/browser/chromeos/login/screen_locker.h b/chrome/browser/chromeos/login/screen_locker.h
index dc0014b..929a026 100644
--- a/chrome/browser/chromeos/login/screen_locker.h
+++ b/chrome/browser/chromeos/login/screen_locker.h
@@ -172,6 +172,11 @@ class ScreenLocker : public LoginStatusConsumer,
// password. True when chrome is in BWSI or auto login mode.
bool unlock_on_input_;
+ // True if the screen is locked, or false otherwise. This changes
+ // from false to true, but will never change from true to
+ // false. Instead, ScreenLocker object gets deleted when unlocked.
+ bool locked_;
+
// Reference to the single instance of the screen locker object.
// This is used to make sure there is only one screen locker instance.
static ScreenLocker* screen_locker_;
diff --git a/chrome/browser/chromeos/login/screen_locker_tester.cc b/chrome/browser/chromeos/login/screen_locker_tester.cc
index aeec099..34f23c8 100644
--- a/chrome/browser/chromeos/login/screen_locker_tester.cc
+++ b/chrome/browser/chromeos/login/screen_locker_tester.cc
@@ -26,8 +26,8 @@ test::ScreenLockerTester* ScreenLocker::GetTester() {
namespace test {
bool ScreenLockerTester::IsLocked() {
- return ScreenLocker::screen_locker_ != NULL &&
- ScreenLocker::screen_locker_->lock_widget_->GetRootView()->IsVisible();
+ return ScreenLocker::screen_locker_ &&
+ ScreenLocker::screen_locker_->locked_;
}
void ScreenLockerTester::InjectMockAuthenticator(