summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authorstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-15 17:05:58 +0000
committerstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-15 17:05:58 +0000
commitd40e880e8638f7374f06af11874d24a08baeb232 (patch)
tree70ff459fc6bd41fc412a001ab34691d025c6ae9a /chromeos
parent8d9e70bd93056befc9a5590036bdbdf198e4f2be (diff)
downloadchromium_src-d40e880e8638f7374f06af11874d24a08baeb232.zip
chromium_src-d40e880e8638f7374f06af11874d24a08baeb232.tar.gz
chromium_src-d40e880e8638f7374f06af11874d24a08baeb232.tar.bz2
Don't show system notifications while the screen is locked.
Change-Id: Ie6079866fb0b957e56aff2993745e8976c4fb10b BUG=124402 TEST=Test system notifications (power, network, sms) especially around screen lock/unlock. Review URL: https://chromiumcodereview.appspot.com/10382118 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137159 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r--chromeos/dbus/mock_power_manager_client.h1
-rw-r--r--chromeos/dbus/power_manager_client.cc18
-rw-r--r--chromeos/dbus/power_manager_client.h5
3 files changed, 22 insertions, 2 deletions
diff --git a/chromeos/dbus/mock_power_manager_client.h b/chromeos/dbus/mock_power_manager_client.h
index 81e8fdd..5d03e31 100644
--- a/chromeos/dbus/mock_power_manager_client.h
+++ b/chromeos/dbus/mock_power_manager_client.h
@@ -40,6 +40,7 @@ class MockPowerManagerClient : public PowerManagerClient {
MOCK_METHOD0(NotifyScreenLockCompleted, void(void));
MOCK_METHOD0(NotifyScreenUnlockRequested, void(void));
MOCK_METHOD0(NotifyScreenUnlockCompleted, void(void));
+ MOCK_METHOD0(GetIsScreenLocked, bool(void));
};
} // namespace chromeos
diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
index 5c03a1a..e09e2f8 100644
--- a/chromeos/dbus/power_manager_client.cc
+++ b/chromeos/dbus/power_manager_client.cc
@@ -29,6 +29,7 @@ class PowerManagerClientImpl : public PowerManagerClient {
public:
explicit PowerManagerClientImpl(dbus::Bus* bus)
: power_manager_proxy_(NULL),
+ screen_locked_(false),
weak_ptr_factory_(this) {
power_manager_proxy_ = bus->GetObjectProxy(
power_manager::kPowerManagerServiceName,
@@ -270,6 +271,10 @@ class PowerManagerClientImpl : public PowerManagerClient {
SimpleMethodCallToPowerManager(power_manager::kScreenIsUnlockedMethod);
}
+ virtual bool GetIsScreenLocked() OVERRIDE {
+ return screen_locked_;
+ }
+
private:
// Called when a dbus signal is initially connected.
void SignalConnected(const std::string& interface_name,
@@ -437,10 +442,12 @@ class PowerManagerClientImpl : public PowerManagerClient {
// as expected. As per http://crbug.com/126217, this will help determine
// if the problem is with dbus or in chrome.
LOG(WARNING) << "LockScreen signal received from power manager.";
+ screen_locked_ = true;
FOR_EACH_OBSERVER(Observer, observers_, LockScreen());
}
void ScreenUnlockSignalReceived(dbus::Signal* signal) {
+ screen_locked_ = false;
FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen());
}
@@ -502,6 +509,7 @@ class PowerManagerClientImpl : public PowerManagerClient {
dbus::ObjectProxy* power_manager_proxy_;
dbus::ObjectProxy* session_manager_proxy_;
ObserverList<Observer> observers_;
+ bool screen_locked_;
base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl);
@@ -515,7 +523,8 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
: discharging_(true),
battery_percentage_(40),
brightness_(50.0),
- pause_count_(2) {
+ pause_count_(2),
+ screen_locked_(false) {
}
virtual ~PowerManagerClientStubImpl() {}
@@ -589,14 +598,18 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
const PowerStateRequestIdCallback& callback) OVERRIDE {}
virtual void NotifyScreenLockRequested() OVERRIDE {
+ screen_locked_ = true;
FOR_EACH_OBSERVER(Observer, observers_, LockScreen());
}
virtual void NotifyScreenLockCompleted() OVERRIDE {}
virtual void NotifyScreenUnlockRequested() OVERRIDE {
+ screen_locked_ = false;
FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen());
}
-
virtual void NotifyScreenUnlockCompleted() OVERRIDE {}
+ virtual bool GetIsScreenLocked() OVERRIDE {
+ return screen_locked_;
+ }
private:
void Update() {
@@ -644,6 +657,7 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
ObserverList<Observer> observers_;
base::RepeatingTimer<PowerManagerClientStubImpl> timer_;
PowerSupplyStatus status_;
+ bool screen_locked_;
};
PowerManagerClient::PowerManagerClient() {
diff --git a/chromeos/dbus/power_manager_client.h b/chromeos/dbus/power_manager_client.h
index 00c27b8..e224395 100644
--- a/chromeos/dbus/power_manager_client.h
+++ b/chromeos/dbus/power_manager_client.h
@@ -141,6 +141,11 @@ class CHROMEOS_EXPORT PowerManagerClient {
// Notifies PowerManager that screen is unlocked.
virtual void NotifyScreenUnlockCompleted() = 0;
+ // Return whether or not the screen is locked. Implementation should cache
+ // this state so that it can return immediately. Useful for observers that
+ // need to know the current screen lock state when they are added.
+ virtual bool GetIsScreenLocked() = 0;
+
// Idle management functions:
// Calculates idle time asynchronously, after the idle time request has