Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2037)

Unified Diff: chrome/browser/chromeos/login/screen_locker.cc

Issue 167663004: chromeos: Remove old LockScreen signal. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: bleh Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/screen_locker.cc
diff --git a/chrome/browser/chromeos/login/screen_locker.cc b/chrome/browser/chromeos/login/screen_locker.cc
index 8424a419f5fffa09b2e997702a37d19e976a0e22..1ccd74d4fad87e9291b9c2ec351c74264032b0d5 100644
--- a/chrome/browser/chromeos/login/screen_locker.cc
+++ b/chrome/browser/chromeos/login/screen_locker.cc
@@ -69,56 +69,46 @@ namespace {
// unlock happens even if animations are broken.
const int kUnlockGuardTimeoutMs = 400;
-// Observer to start ScreenLocker when the screen lock
-class ScreenLockObserver : public SessionManagerClient::Observer,
+// Observer to start ScreenLocker when locking the screen is requested.
+class ScreenLockObserver : public SessionManagerClient::StubDelegate,
public content::NotificationObserver,
public UserAddingScreen::Observer {
public:
ScreenLockObserver() : session_started_(false) {
registrar_.Add(this,
- chrome::NOTIFICATION_LOGIN_USER_CHANGED,
- content::NotificationService::AllSources());
- registrar_.Add(this,
chrome::NOTIFICATION_SESSION_STARTED,
content::NotificationService::AllSources());
+ DBusThreadManager::Get()->GetSessionManagerClient()->SetStubDelegate(this);
+ }
+
+ virtual ~ScreenLockObserver() {
+ if (DBusThreadManager::IsInitialized()) {
+ DBusThreadManager::Get()->GetSessionManagerClient()->SetStubDelegate(
+ NULL);
+ }
}
bool session_started() const { return session_started_; }
+ // SessionManagerClient::StubDelegate overrides:
+ virtual void LockScreenForStub() OVERRIDE {
+ ScreenLocker::HandleLockScreenRequest();
+ }
+
// NotificationObserver overrides:
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE {
- switch (type) {
- case chrome::NOTIFICATION_LOGIN_USER_CHANGED: {
- // Register Screen Lock only after a user has logged in.
- SessionManagerClient* session_manager =
- DBusThreadManager::Get()->GetSessionManagerClient();
- if (!session_manager->HasObserver(this))
- session_manager->AddObserver(this);
- break;
- }
-
- case chrome::NOTIFICATION_SESSION_STARTED: {
- session_started_ = true;
- break;
- }
-
- default:
- NOTREACHED();
- }
- }
-
- // TODO(derat): Remove this once the session manager is calling the LockScreen
- // method instead of emitting a signal.
- virtual void LockScreen() OVERRIDE {
- VLOG(1) << "Received LockScreen D-Bus signal from session manager";
- ScreenLocker::HandleLockScreenRequest();
+ if (type == chrome::NOTIFICATION_SESSION_STARTED)
+ session_started_ = true;
+ else
+ NOTREACHED() << "Unexpected notification " << type;
}
+ // UserAddingScreen::Observer overrides:
virtual void OnUserAddingFinished() OVERRIDE {
UserAddingScreen::Get()->RemoveObserver(this);
- LockScreen();
+ ScreenLocker::HandleLockScreenRequest();
}
private:
@@ -128,8 +118,7 @@ class ScreenLockObserver : public SessionManagerClient::Observer,
DISALLOW_COPY_AND_ASSIGN(ScreenLockObserver);
};
-static base::LazyInstance<ScreenLockObserver> g_screen_lock_observer =
- LAZY_INSTANCE_INITIALIZER;
+ScreenLockObserver* g_screen_lock_observer = NULL;
} // namespace
@@ -375,21 +364,31 @@ void ScreenLocker::SetLoginStatusConsumer(
// static
void ScreenLocker::InitClass() {
- g_screen_lock_observer.Get();
+ DCHECK(!g_screen_lock_observer);
+ g_screen_lock_observer = new ScreenLockObserver;
+}
+
+// static
+void ScreenLocker::ShutDownClass() {
+ DCHECK(g_screen_lock_observer);
+ delete g_screen_lock_observer;
+ g_screen_lock_observer = NULL;
}
// static
void ScreenLocker::HandleLockScreenRequest() {
VLOG(1) << "Received LockScreen request from session manager";
+ DCHECK(g_screen_lock_observer);
if (UserAddingScreen::Get()->IsRunning()) {
VLOG(1) << "Waiting for user adding screen to stop";
- UserAddingScreen::Get()->AddObserver(g_screen_lock_observer.Pointer());
+ UserAddingScreen::Get()->AddObserver(g_screen_lock_observer);
UserAddingScreen::Get()->Cancel();
return;
}
- if (g_screen_lock_observer.Get().session_started() &&
+ if (g_screen_lock_observer->session_started() &&
UserManager::Get()->CanCurrentUserLock()) {
ScreenLocker::Show();
+ ash::Shell::GetInstance()->lock_state_controller()->OnStartingLock();
} else {
// If the current user's session cannot be locked or the user has not
// completed all sign-in steps yet, log out instead. The latter is done to
@@ -492,6 +491,7 @@ ScreenLocker::~ScreenLocker() {
content::Source<ScreenLocker>(this),
content::Details<bool>(&state));
VLOG(1) << "Calling session manager's HandleLockScreenDismissed D-Bus method";
+
DBusThreadManager::Get()->GetSessionManagerClient()->
NotifyLockScreenDismissed();
}
« no previous file with comments | « chrome/browser/chromeos/login/screen_locker.h ('k') | chrome/browser/chromeos/power/power_button_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698