summaryrefslogtreecommitdiffstats
path: root/base/power_monitor
diff options
context:
space:
mode:
authorderat <derat@chromium.org>2014-10-06 21:18:44 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-07 04:19:22 +0000
commit07366580ce28f55f6dd242c9d79e7a1f1b3bef44 (patch)
tree478e99d7cd75628ff4904b76114305d17c43db4b /base/power_monitor
parentba722a2a8ddf967dcadb483ea32d5ad31fc4bdf6 (diff)
downloadchromium_src-07366580ce28f55f6dd242c9d79e7a1f1b3bef44.zip
chromium_src-07366580ce28f55f6dd242c9d79e7a1f1b3bef44.tar.gz
chromium_src-07366580ce28f55f6dd242c9d79e7a1f1b3bef44.tar.bz2
Make base::PowerMonitor work on Chrome OS.
On Chrome OS, updates about the system power status are received via D-Bus messages on the UI thread. Being in base/, PowerMonitor can't depend on the code in chromeos/ that receives those messages, so make the Chrome OS code instead notify PowerMonitor when it receives updates. BUG=326534 Review URL: https://codereview.chromium.org/622693004 Cr-Commit-Position: refs/heads/master@{#298367}
Diffstat (limited to 'base/power_monitor')
-rw-r--r--base/power_monitor/power_monitor_device_source.h10
-rw-r--r--base/power_monitor/power_monitor_device_source_chromeos.cc40
2 files changed, 50 insertions, 0 deletions
diff --git a/base/power_monitor/power_monitor_device_source.h b/base/power_monitor/power_monitor_device_source.h
index 37b065a..d29ec0a 100644
--- a/base/power_monitor/power_monitor_device_source.h
+++ b/base/power_monitor/power_monitor_device_source.h
@@ -51,6 +51,16 @@ class BASE_EXPORT PowerMonitorDeviceSource : public PowerMonitorSource {
#endif // OS_IOS
#endif // OS_MACOSX
+#if defined(OS_CHROMEOS)
+ // On Chrome OS, Chrome receives power-related events from powerd, the system
+ // power daemon, via D-Bus signals received on the UI thread. base can't
+ // directly depend on that code, so this class instead exposes static methods
+ // so that events can be passed in.
+ static void SetPowerSource(bool on_battery);
+ static void HandleSystemSuspending();
+ static void HandleSystemResumed();
+#endif
+
private:
#if defined(OS_WIN)
// Represents a message-only window for power message handling on Windows.
diff --git a/base/power_monitor/power_monitor_device_source_chromeos.cc b/base/power_monitor/power_monitor_device_source_chromeos.cc
new file mode 100644
index 0000000..c3466ee
--- /dev/null
+++ b/base/power_monitor/power_monitor_device_source_chromeos.cc
@@ -0,0 +1,40 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/power_monitor/power_monitor.h"
+#include "base/power_monitor/power_monitor_device_source.h"
+#include "base/power_monitor/power_monitor_source.h"
+
+namespace base {
+
+namespace {
+
+// The most-recently-seen power source.
+bool g_on_battery = false;
+
+} // namespace
+
+// static
+void PowerMonitorDeviceSource::SetPowerSource(bool on_battery) {
+ if (on_battery != g_on_battery) {
+ g_on_battery = on_battery;
+ ProcessPowerEvent(POWER_STATE_EVENT);
+ }
+}
+
+// static
+void PowerMonitorDeviceSource::HandleSystemSuspending() {
+ ProcessPowerEvent(SUSPEND_EVENT);
+}
+
+// static
+void PowerMonitorDeviceSource::HandleSystemResumed() {
+ ProcessPowerEvent(RESUME_EVENT);
+}
+
+bool PowerMonitorDeviceSource::IsOnBatteryPowerImpl() {
+ return g_on_battery;
+}
+
+} // namespace base