Index: chromeos/dbus/session_manager_client.cc |
diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc |
index 6dc2dce0414108e2f1ca9b374e9688bd3e0f67c3..27adf8b6c25f60f0db56be41b4c269777d750f14 100644 |
--- a/chromeos/dbus/session_manager_client.cc |
+++ b/chromeos/dbus/session_manager_client.cc |
@@ -66,6 +66,7 @@ class SessionManagerClientImpl : public SessionManagerClient { |
public: |
SessionManagerClientImpl() |
: session_manager_proxy_(NULL), |
+ screen_is_locked_(false), |
weak_ptr_factory_(this) {} |
virtual ~SessionManagerClientImpl() { |
@@ -88,6 +89,8 @@ class SessionManagerClientImpl : public SessionManagerClient { |
return observers_.HasObserver(observer); |
} |
+ virtual bool IsScreenLocked() const override { return screen_is_locked_; } |
+ |
virtual void EmitLoginPromptVisible() override { |
SimpleMethodCallToSessionManager( |
login_manager::kSessionManagerEmitLoginPromptVisible); |
@@ -517,10 +520,12 @@ class SessionManagerClientImpl : public SessionManagerClient { |
} |
void ScreenIsLockedReceived(dbus::Signal* signal) { |
+ screen_is_locked_ = true; |
FOR_EACH_OBSERVER(Observer, observers_, ScreenIsLocked()); |
} |
void ScreenIsUnlockedReceived(dbus::Signal* signal) { |
+ screen_is_locked_ = false; |
FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); |
} |
@@ -568,6 +573,9 @@ class SessionManagerClientImpl : public SessionManagerClient { |
scoped_ptr<BlockingMethodCaller> blocking_method_caller_; |
ObserverList<Observer> observers_; |
+ // Most recent screen-lock state received from session_manager. |
+ bool screen_is_locked_; |
+ |
// Note: This should remain the last member so it'll be destroyed and |
// invalidate its weak pointers before any other members are destroyed. |
base::WeakPtrFactory<SessionManagerClientImpl> weak_ptr_factory_; |
@@ -579,7 +587,7 @@ class SessionManagerClientImpl : public SessionManagerClient { |
// which does nothing. |
class SessionManagerClientStubImpl : public SessionManagerClient { |
public: |
- SessionManagerClientStubImpl() : delegate_(NULL) {} |
+ SessionManagerClientStubImpl() : delegate_(NULL), screen_is_locked_(false) {} |
virtual ~SessionManagerClientStubImpl() {} |
// SessionManagerClient overrides |
@@ -596,6 +604,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
virtual bool HasObserver(const Observer* observer) const override { |
return observers_.HasObserver(observer); |
} |
+ virtual bool IsScreenLocked() const override { return screen_is_locked_; } |
virtual void EmitLoginPromptVisible() override {} |
virtual void RestartJob(int pid, const std::string& command_line) override {} |
virtual void StartSession(const std::string& user_email) override {} |
@@ -608,9 +617,11 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
delegate_->LockScreenForStub(); |
} |
virtual void NotifyLockScreenShown() override { |
+ screen_is_locked_ = true; |
FOR_EACH_OBSERVER(Observer, observers_, ScreenIsLocked()); |
} |
virtual void NotifyLockScreenDismissed() override { |
+ screen_is_locked_ = false; |
FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); |
} |
virtual void RetrieveActiveSessions( |
@@ -732,6 +743,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
StubDelegate* delegate_; // Weak pointer; may be NULL. |
ObserverList<Observer> observers_; |
std::string device_policy_; |
+ bool screen_is_locked_; |
DISALLOW_COPY_AND_ASSIGN(SessionManagerClientStubImpl); |
}; |