diff options
author | sque@chromium.org <sque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 01:02:13 +0000 |
---|---|---|
committer | sque@chromium.org <sque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 01:02:13 +0000 |
commit | 6f830b94d7e6062a7b2fdafe1694f4023cf65df1 (patch) | |
tree | c7f584ab792af986aef8f4c93672cdd95c66073b | |
parent | d8a008e1268c516c042f59f6c710c168efd23386 (diff) | |
download | chromium_src-6f830b94d7e6062a7b2fdafe1694f4023cf65df1.zip chromium_src-6f830b94d7e6062a7b2fdafe1694f4023cf65df1.tar.gz chromium_src-6f830b94d7e6062a7b2fdafe1694f4023cf65df1.tar.bz2 |
chromeos: Move system resume handling to power manager client
BUG=chromium-os:21115
TEST=Note the time. Suspend for 5 minutes. Resume. The time should have
advanced 5 minutes.
Signed-off-by: Simon Que <sque@chromium.org>
R=satorux@chromium.org,stevenjb@chromium.org
Review URL: http://codereview.chromium.org/8666007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111460 0039d316-1c4b-4281-b951-d872f2087c98
9 files changed, 48 insertions, 23 deletions
diff --git a/chrome/browser/chromeos/accessibility/system_event_observer.cc b/chrome/browser/chromeos/accessibility/system_event_observer.cc index 9b16e7f..85415b4 100644 --- a/chrome/browser/chromeos/accessibility/system_event_observer.cc +++ b/chrome/browser/chromeos/accessibility/system_event_observer.cc @@ -7,6 +7,7 @@ #include "base/logging.h" #include "chrome/browser/accessibility_events.h" #include "chrome/browser/chromeos/cros/cros_library.h" +#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/chrome_notification_types.h" @@ -20,13 +21,11 @@ SystemEventObserver* g_system_event_observer = NULL; } SystemEventObserver::SystemEventObserver() { - CrosLibrary::Get()->GetPowerLibrary()->AddObserver(this); CrosLibrary::Get()->GetScreenLockLibrary()->AddObserver(this); } SystemEventObserver::~SystemEventObserver() { CrosLibrary::Get()->GetScreenLockLibrary()->RemoveObserver(this); - CrosLibrary::Get()->GetPowerLibrary()->RemoveObserver(this); } void SystemEventObserver::SystemResumed() { @@ -55,6 +54,8 @@ void SystemEventObserver::Initialize() { DCHECK(!g_system_event_observer); g_system_event_observer = new SystemEventObserver(); VLOG(1) << "SystemEventObserver initialized"; + DBusThreadManager::Get()->GetPowerManagerClient()-> + AddObserver(g_system_event_observer); } // static @@ -65,6 +66,8 @@ SystemEventObserver* SystemEventObserver::GetInstance() { // static void SystemEventObserver::Shutdown() { DCHECK(g_system_event_observer); + DBusThreadManager::Get()->GetPowerManagerClient()-> + RemoveObserver(g_system_event_observer); delete g_system_event_observer; g_system_event_observer = NULL; VLOG(1) << "SystemEventObserver Shutdown completed"; diff --git a/chrome/browser/chromeos/accessibility/system_event_observer.h b/chrome/browser/chromeos/accessibility/system_event_observer.h index 82fcb6ea..4102b03 100644 --- a/chrome/browser/chromeos/accessibility/system_event_observer.h +++ b/chrome/browser/chromeos/accessibility/system_event_observer.h @@ -6,20 +6,20 @@ #define CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_SYSTEM_EVENT_OBSERVER_H_ #pragma once -#include "chrome/browser/chromeos/cros/power_library.h" #include "chrome/browser/chromeos/cros/screen_lock_library.h" +#include "chrome/browser/chromeos/dbus/power_manager_client.h" namespace chromeos { namespace accessibility { // A singleton class to observe system events like wake up from sleep and // screen unlock. -class SystemEventObserver : public PowerLibrary::Observer, +class SystemEventObserver : public PowerManagerClient::Observer, public ScreenLockLibrary::Observer { public: virtual ~SystemEventObserver(); - // PowerLibrary::Observer override. + // PowerManagerClient::Observer override. virtual void SystemResumed() OVERRIDE; // ScreenLockLibrary::Observer override. diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index e7ce5b8..5d078d3 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -88,14 +88,14 @@ ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos( } ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { + chromeos::accessibility::SystemEventObserver::Shutdown(); + chromeos::disks::DiskMountManager::Shutdown(); chromeos::BluetoothManager::Shutdown(); chromeos::DBusThreadManager::Shutdown(); - chromeos::accessibility::SystemEventObserver::Shutdown(); - if (!parameters().ui_task && chromeos::CrosLibrary::Get()) chromeos::CrosLibrary::Shutdown(); @@ -129,8 +129,6 @@ void ChromeBrowserMainPartsChromeos::PreMainMessageLoopStart() { // implementation. net::NetworkChangeNotifier::SetFactory( new chromeos::CrosNetworkChangeNotifierFactory()); - - chromeos::accessibility::SystemEventObserver::Initialize(); } void ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() { @@ -174,6 +172,9 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopStart() { // Initialize the disk mount manager. chromeos::disks::DiskMountManager::Initialize(); + // Initialize the system event observer. + chromeos::accessibility::SystemEventObserver::Initialize(); + // Initialize the network change notifier for Chrome OS. The network // change notifier starts to monitor changes from the power manager and // the network manager. diff --git a/chrome/browser/chromeos/dbus/power_manager_client.cc b/chrome/browser/chromeos/dbus/power_manager_client.cc index 5b95f0e1..fce1c13 100644 --- a/chrome/browser/chromeos/dbus/power_manager_client.cc +++ b/chrome/browser/chromeos/dbus/power_manager_client.cc @@ -83,6 +83,15 @@ class PowerManagerClientImpl : public PowerManagerClient { weak_ptr_factory_.GetWeakPtr()), base::Bind(&PowerManagerClientImpl::SignalConnected, weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for power state changed signals. + power_manager_proxy_->ConnectToSignal( + power_manager::kPowerManagerInterface, + power_manager::kPowerStateChangedSignal, + base::Bind(&PowerManagerClientImpl::PowerStateChangedSignalReceived, + weak_ptr_factory_.GetWeakPtr()), + base::Bind(&PowerManagerClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); } virtual ~PowerManagerClientImpl() { @@ -211,6 +220,21 @@ class PowerManagerClientImpl : public PowerManagerClient { VLOG(1) << "screen brightness increased: " << response->ToString(); } + // Called when a power state changed signal is received. + void PowerStateChangedSignalReceived(dbus::Signal* signal) { + VLOG(1) << "Received power state changed signal."; + dbus::MessageReader reader(signal); + std::string power_state_string; + if (!reader.PopString(&power_state_string)) { + LOG(ERROR) << "Error reading signal args: " << signal->ToString(); + return; + } + if (power_state_string != "on") + return; + // Notify all observers of resume event. + FOR_EACH_OBSERVER(Observer, observers_, SystemResumed()); + } + // Called when a power supply polling signal is received. void PowerSupplyPollReceived(dbus::Signal* unused_signal) { VLOG(1) << "Received power supply poll signal."; diff --git a/chrome/browser/chromeos/dbus/power_manager_client.h b/chrome/browser/chromeos/dbus/power_manager_client.h index bec0cea..43f58a4 100644 --- a/chrome/browser/chromeos/dbus/power_manager_client.h +++ b/chrome/browser/chromeos/dbus/power_manager_client.h @@ -51,6 +51,9 @@ class PowerManagerClient { // Called when power supply polling takes place. |status| is a data // structure that contains the current state of the power supply. virtual void PowerChanged(const PowerSupplyStatus& status) {} + + // Called when the system resumes from suspend. + virtual void SystemResumed() {} }; // Adds and removes the observer. diff --git a/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc b/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc index 8300151..c948dbe 100644 --- a/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc +++ b/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc @@ -81,8 +81,7 @@ void NetworkChangeNotifierChromeos::Init() { chromeos::CrosLibrary::Get()->GetNetworkLibrary(); network_library->AddNetworkManagerObserver(this); - chromeos::CrosLibrary::Get()->GetPowerLibrary() - ->AddObserver(this); + DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); UpdateNetworkState(network_library); } @@ -99,9 +98,7 @@ void NetworkChangeNotifierChromeos::Shutdown() { lib->RemoveNetworkManagerObserver(this); lib->RemoveObserverForAllNetworks(this); - chromeos::CrosLibrary::Get()->GetPowerLibrary()->RemoveObserver(this); - chromeos::DBusThreadManager::Get()->GetPowerManagerClient() - ->RemoveObserver(this); + DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); } void NetworkChangeNotifierChromeos::PowerChanged( diff --git a/chrome/browser/chromeos/net/network_change_notifier_chromeos.h b/chrome/browser/chromeos/net/network_change_notifier_chromeos.h index c9d68d0..c183982 100644 --- a/chrome/browser/chromeos/net/network_change_notifier_chromeos.h +++ b/chrome/browser/chromeos/net/network_change_notifier_chromeos.h @@ -10,7 +10,6 @@ #include "base/compiler_specific.h" #include "base/task.h" #include "chrome/browser/chromeos/cros/network_library.h" -#include "chrome/browser/chromeos/cros/power_library.h" #include "chrome/browser/chromeos/dbus/power_manager_client.h" #include "net/base/network_change_notifier.h" @@ -20,7 +19,6 @@ class OnlineStatusReportThreadTask; class NetworkChangeNotifierChromeos : public net::NetworkChangeNotifier, - public chromeos::PowerLibrary::Observer, public chromeos::PowerManagerClient::Observer, public chromeos::NetworkLibrary::NetworkObserver, public chromeos::NetworkLibrary::NetworkManagerObserver { @@ -42,7 +40,6 @@ class NetworkChangeNotifierChromeos // PowerManagerClient::Observer overrides. virtual void PowerChanged(const PowerSupplyStatus& status) OVERRIDE; - // PowerLibrary::Observer overrides virtual void SystemResumed() OVERRIDE; // NetworkChangeNotifier overrides. diff --git a/chrome/browser/chromeos/status/status_area_view_chromeos.cc b/chrome/browser/chromeos/status/status_area_view_chromeos.cc index 36d3cfc..b6f08a9 100644 --- a/chrome/browser/chromeos/status/status_area_view_chromeos.cc +++ b/chrome/browser/chromeos/status/status_area_view_chromeos.cc @@ -5,7 +5,7 @@ #include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "base/command_line.h" -#include "chrome/browser/chromeos/cros/cros_library.h" +#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/chromeos/status/accessibility_menu_button.h" #include "chrome/browser/chromeos/status/caps_lock_menu_button.h" #include "chrome/browser/chromeos/status/clock_menu_button.h" @@ -19,12 +19,12 @@ namespace chromeos { StatusAreaViewChromeos::StatusAreaViewChromeos() { - CrosLibrary::Get()->GetPowerLibrary()->AddObserver(this); + DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); system::TimezoneSettings::GetInstance()->AddObserver(this); } StatusAreaViewChromeos::~StatusAreaViewChromeos() { - CrosLibrary::Get()->GetPowerLibrary()->RemoveObserver(this); + DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); system::TimezoneSettings::GetInstance()->RemoveObserver(this); } diff --git a/chrome/browser/chromeos/status/status_area_view_chromeos.h b/chrome/browser/chromeos/status/status_area_view_chromeos.h index 82af1a2..614103c 100644 --- a/chrome/browser/chromeos/status/status_area_view_chromeos.h +++ b/chrome/browser/chromeos/status/status_area_view_chromeos.h @@ -8,7 +8,7 @@ #include "chrome/browser/chromeos/status/status_area_view.h" -#include "chrome/browser/chromeos/cros/power_library.h" +#include "chrome/browser/chromeos/dbus/power_manager_client.h" #include "chrome/browser/chromeos/system/timezone_settings.h" #include "chrome/browser/chromeos/view_ids.h" @@ -17,7 +17,7 @@ class ClockMenuButton; namespace chromeos { class StatusAreaViewChromeos : public StatusAreaView, - public PowerLibrary::Observer, + public PowerManagerClient::Observer, public system::TimezoneSettings::Observer { public: // The type of screen the host window is on. @@ -33,7 +33,7 @@ class StatusAreaViewChromeos : public StatusAreaView, void Init(StatusAreaButton::Delegate* delegate, ScreenMode screen_mode); - // PowerLibrary::Observer: + // PowerManagerClient::Observer: virtual void SystemResumed() OVERRIDE; // TimezoneSettings::Observer: |