summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-18 07:04:06 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-18 07:04:06 +0000
commit69803a4f13f3eb26b982e82493672367e984907a (patch)
tree7129dda29bb0b45ae287e3d0b8d6c34e83ae98cc /ui
parentc7e136fc8a564f1a30ef6214e4f2b5d598cfbe94 (diff)
downloadchromium_src-69803a4f13f3eb26b982e82493672367e984907a.zip
chromium_src-69803a4f13f3eb26b982e82493672367e984907a.tar.gz
chromium_src-69803a4f13f3eb26b982e82493672367e984907a.tar.bz2
Move SystemMonitor to base/.
I plan to use SystemMonitor in net/. Fix up the Mac implementation not to use Cocoa APIs since @interface is not allowed in base. BUG=none TEST=none Review URL: http://codereview.chromium.org/7015017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85732 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/base/system_monitor/system_monitor.cc108
-rw-r--r--ui/base/system_monitor/system_monitor.h143
-rw-r--r--ui/base/system_monitor/system_monitor_mac.mm67
-rw-r--r--ui/base/system_monitor/system_monitor_posix.cc14
-rw-r--r--ui/base/system_monitor/system_monitor_unittest.cc91
-rw-r--r--ui/base/system_monitor/system_monitor_win.cc50
-rw-r--r--ui/views/widget/native_widget_win.cc2
7 files changed, 1 insertions, 474 deletions
diff --git a/ui/base/system_monitor/system_monitor.cc b/ui/base/system_monitor/system_monitor.cc
deleted file mode 100644
index 80110cb..0000000
--- a/ui/base/system_monitor/system_monitor.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h"
-
-#include "base/logging.h"
-#include "base/message_loop.h"
-#include "base/time.h"
-
-namespace ui {
-
-static SystemMonitor* g_system_monitor = NULL;
-
-#if defined(ENABLE_BATTERY_MONITORING)
-// The amount of time (in ms) to wait before running the initial
-// battery check.
-static int kDelayedBatteryCheckMs = 10 * 1000;
-#endif // defined(ENABLE_BATTERY_MONITORING)
-
-SystemMonitor::SystemMonitor()
- : observer_list_(new ObserverListThreadSafe<PowerObserver>()),
- battery_in_use_(false),
- suspended_(false) {
- DCHECK(!g_system_monitor);
- g_system_monitor = this;
-
- DCHECK(MessageLoop::current());
-#if defined(ENABLE_BATTERY_MONITORING)
- delayed_battery_check_.Start(
- base::TimeDelta::FromMilliseconds(kDelayedBatteryCheckMs), this,
- &SystemMonitor::BatteryCheck);
-#endif // defined(ENABLE_BATTERY_MONITORING)
-#if defined(OS_MACOSX)
- PlatformInit();
-#endif
-}
-
-SystemMonitor::~SystemMonitor() {
-#if defined(OS_MACOSX)
- PlatformDestroy();
-#endif
- DCHECK_EQ(this, g_system_monitor);
- g_system_monitor = NULL;
-}
-
-// static
-SystemMonitor* SystemMonitor::Get() {
- return g_system_monitor;
-}
-
-void SystemMonitor::ProcessPowerMessage(PowerEvent event_id) {
- // Suppress duplicate notifications. Some platforms may
- // send multiple notifications of the same event.
- switch (event_id) {
- case POWER_STATE_EVENT:
- {
- bool on_battery = IsBatteryPower();
- if (on_battery != battery_in_use_) {
- battery_in_use_ = on_battery;
- NotifyPowerStateChange();
- }
- }
- break;
- case RESUME_EVENT:
- if (suspended_) {
- suspended_ = false;
- NotifyResume();
- }
- break;
- case SUSPEND_EVENT:
- if (!suspended_) {
- suspended_ = true;
- NotifySuspend();
- }
- break;
- }
-}
-
-void SystemMonitor::AddObserver(PowerObserver* obs) {
- observer_list_->AddObserver(obs);
-}
-
-void SystemMonitor::RemoveObserver(PowerObserver* obs) {
- observer_list_->RemoveObserver(obs);
-}
-
-void SystemMonitor::NotifyPowerStateChange() {
- VLOG(1) << "PowerStateChange: " << (BatteryPower() ? "On" : "Off")
- << " battery";
- observer_list_->Notify(&PowerObserver::OnPowerStateChange, BatteryPower());
-}
-
-void SystemMonitor::NotifySuspend() {
- VLOG(1) << "Power Suspending";
- observer_list_->Notify(&PowerObserver::OnSuspend);
-}
-
-void SystemMonitor::NotifyResume() {
- VLOG(1) << "Power Resuming";
- observer_list_->Notify(&PowerObserver::OnResume);
-}
-
-void SystemMonitor::BatteryCheck() {
- ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT);
-}
-
-} // namespace ui
diff --git a/ui/base/system_monitor/system_monitor.h b/ui/base/system_monitor/system_monitor.h
deleted file mode 100644
index b1e26cf..0000000
--- a/ui/base/system_monitor/system_monitor.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef UI_BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_
-#define UI_BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_
-#pragma once
-
-#include "build/build_config.h"
-
-// Windows HiRes timers drain the battery faster so we need to know the battery
-// status. This isn't true for other platforms.
-#if defined(OS_WIN)
-#define ENABLE_BATTERY_MONITORING 1
-#else
-#undef ENABLE_BATTERY_MONITORING
-#endif // !OS_WIN
-
-#include "base/observer_list_threadsafe.h"
-#if defined(ENABLE_BATTERY_MONITORING)
-#include "base/timer.h"
-#endif // defined(ENABLE_BATTERY_MONITORING)
-
-#if defined(OS_MACOSX)
-#ifdef __OBJC__
-@class SystemMonitorBridge;
-#else
-class SystemMonitorBridge;
-#endif
-#endif
-
-namespace ui {
-
-// Class for monitoring various system-related subsystems
-// such as power management, network status, etc.
-// TODO(mbelshe): Add support beyond just power management.
-class SystemMonitor {
- public:
- // Normalized list of power events.
- enum PowerEvent {
- POWER_STATE_EVENT, // The Power status of the system has changed.
- SUSPEND_EVENT, // The system is being suspended.
- RESUME_EVENT // The system is being resumed.
- };
-
- // Create SystemMonitor. Only one SystemMonitor instance per application
- // is allowed.
- SystemMonitor();
- ~SystemMonitor();
-
- // Get the application-wide SystemMonitor (if not present, returns NULL).
- static SystemMonitor* Get();
-
- //
- // Power-related APIs
- //
-
- // Is the computer currently on battery power.
- // Can be called on any thread.
- bool BatteryPower() const {
- // Using a lock here is not necessary for just a bool.
- return battery_in_use_;
- }
-
- // Callbacks will be called on the thread which creates the SystemMonitor.
- // During the callback, Add/RemoveObserver will block until the callbacks
- // are finished. Observers should implement quick callback functions; if
- // lengthy operations are needed, the observer should take care to invoke
- // the operation on an appropriate thread.
- class PowerObserver {
- public:
- // Notification of a change in power status of the computer, such
- // as from switching between battery and A/C power.
- virtual void OnPowerStateChange(bool on_battery_power) {}
-
- // Notification that the system is suspending.
- virtual void OnSuspend() {}
-
- // Notification that the system is resuming.
- virtual void OnResume() {}
-
- protected:
- virtual ~PowerObserver() {}
- };
-
- // Add a new observer.
- // Can be called from any thread.
- // Must not be called from within a notification callback.
- void AddObserver(PowerObserver* obs);
-
- // Remove an existing observer.
- // Can be called from any thread.
- // Must not be called from within a notification callback.
- void RemoveObserver(PowerObserver* obs);
-
-#if defined(OS_WIN)
- // Windows-specific handling of a WM_POWERBROADCAST message.
- // Embedders of this API should hook their top-level window
- // message loop and forward WM_POWERBROADCAST through this call.
- void ProcessWmPowerBroadcastMessage(int event_id);
-#endif
-
- // Cross-platform handling of a power event.
- void ProcessPowerMessage(PowerEvent event_id);
-
- private:
-#if defined(OS_MACOSX)
- void PlatformInit();
- void PlatformDestroy();
-#endif
-
- // Platform-specific method to check whether the system is currently
- // running on battery power. Returns true if running on batteries,
- // false otherwise.
- bool IsBatteryPower();
-
- // Checks the battery status and notifies observers if the battery
- // status has changed.
- void BatteryCheck();
-
- // Functions to trigger notifications.
- void NotifyPowerStateChange();
- void NotifySuspend();
- void NotifyResume();
-
- scoped_refptr<ObserverListThreadSafe<PowerObserver> > observer_list_;
- bool battery_in_use_;
- bool suspended_;
-
-#if defined(ENABLE_BATTERY_MONITORING)
- base::OneShotTimer<SystemMonitor> delayed_battery_check_;
-#endif
-
-#if defined(OS_MACOSX)
- SystemMonitorBridge* system_monitor_bridge_;
-#endif
-
- DISALLOW_COPY_AND_ASSIGN(SystemMonitor);
-};
-
-} // namespace ui
-
-#endif // UI_BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_
diff --git a/ui/base/system_monitor/system_monitor_mac.mm b/ui/base/system_monitor/system_monitor_mac.mm
deleted file mode 100644
index ffcb2a2..0000000
--- a/ui/base/system_monitor/system_monitor_mac.mm
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h"
-
-#import <AppKit/AppKit.h>
-
-@interface SystemMonitorBridge : NSObject {
- @private
- ui::SystemMonitor* systemMonitor_; // weak
-}
-
-- (id)initWithSystemMonitor:(ui::SystemMonitor*)monitor;
-- (void)computerDidSleep:(NSNotification*)notification;
-- (void)computerDidWake:(NSNotification*)notification;
-
-@end
-
-@implementation SystemMonitorBridge
-
-- (id)initWithSystemMonitor:(ui::SystemMonitor*)monitor {
- self = [super init];
- if (self) {
- systemMonitor_ = monitor;
-
- // See QA1340
- // <http://developer.apple.com/library/mac/#qa/qa2004/qa1340.html> for more
- // details.
- [[[NSWorkspace sharedWorkspace] notificationCenter]
- addObserver:self
- selector:@selector(computerDidSleep:)
- name:NSWorkspaceWillSleepNotification
- object:nil];
- [[[NSWorkspace sharedWorkspace] notificationCenter]
- addObserver:self
- selector:@selector(computerDidWake:)
- name:NSWorkspaceDidWakeNotification
- object:nil];
- }
- return self;
-}
-
-- (void)dealloc {
- [[[NSWorkspace sharedWorkspace] notificationCenter]
- removeObserver:self];
- [super dealloc];
-}
-
-- (void)computerDidSleep:(NSNotification*)notification {
- systemMonitor_->ProcessPowerMessage(ui::SystemMonitor::SUSPEND_EVENT);
-}
-
-- (void)computerDidWake:(NSNotification*)notification {
- systemMonitor_->ProcessPowerMessage(ui::SystemMonitor::RESUME_EVENT);
-}
-
-@end
-
-void ui::SystemMonitor::PlatformInit() {
- system_monitor_bridge_ =
- [[SystemMonitorBridge alloc] initWithSystemMonitor:this];
-}
-
-void ui::SystemMonitor::PlatformDestroy() {
- [system_monitor_bridge_ release];
-}
diff --git a/ui/base/system_monitor/system_monitor_posix.cc b/ui/base/system_monitor/system_monitor_posix.cc
deleted file mode 100644
index ddd0fe0..0000000
--- a/ui/base/system_monitor/system_monitor_posix.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h"
-
-namespace ui {
-
-bool SystemMonitor::IsBatteryPower() {
- NOTIMPLEMENTED();
- return false;
-}
-
-} // namespace ui
diff --git a/ui/base/system_monitor/system_monitor_unittest.cc b/ui/base/system_monitor/system_monitor_unittest.cc
deleted file mode 100644
index 28b2cbf..0000000
--- a/ui/base/system_monitor/system_monitor_unittest.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace ui {
-
-class PowerTest : public SystemMonitor::PowerObserver {
- public:
- PowerTest()
- : battery_(false),
- power_state_changes_(0),
- suspends_(0),
- resumes_(0) {
- }
-
- // PowerObserver callbacks.
- void OnPowerStateChange(bool on_battery_power) {
- power_state_changes_++;
- }
-
- void OnSuspend() {
- suspends_++;
- }
-
- void OnResume() {
- resumes_++;
- }
-
- // Test status counts.
- bool battery() { return battery_; }
- int power_state_changes() { return power_state_changes_; }
- int suspends() { return suspends_; }
- int resumes() { return resumes_; }
-
- private:
- bool battery_; // Do we currently think we're on battery power.
- int power_state_changes_; // Count of OnPowerStateChange notifications.
- int suspends_; // Count of OnSuspend notifications.
- int resumes_; // Count of OnResume notifications.
-};
-
-TEST(SystemMonitor, PowerNotifications) {
- const int kObservers = 5;
-
- // Initialize a message loop for this to run on.
- MessageLoop loop;
- // Initialize time() since it registers as a SystemMonitor observer.
- base::Time now = base::Time::Now();
-
- SystemMonitor system_monitor;
- PowerTest test[kObservers];
- for (int index = 0; index < kObservers; ++index)
- system_monitor.AddObserver(&test[index]);
-
- // Send a bunch of power changes. Since the battery power hasn't
- // actually changed, we shouldn't get notifications.
- for (int index = 0; index < 5; index++) {
- system_monitor.ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT);
- EXPECT_EQ(test[0].power_state_changes(), 0);
- }
-
- // Sending resume when not suspended should have no effect.
- system_monitor.ProcessPowerMessage(SystemMonitor::RESUME_EVENT);
- loop.RunAllPending();
- EXPECT_EQ(test[0].resumes(), 0);
-
- // Pretend we suspended.
- system_monitor.ProcessPowerMessage(SystemMonitor::SUSPEND_EVENT);
- loop.RunAllPending();
- EXPECT_EQ(test[0].suspends(), 1);
-
- // Send a second suspend notification. This should be suppressed.
- system_monitor.ProcessPowerMessage(SystemMonitor::SUSPEND_EVENT);
- loop.RunAllPending();
- EXPECT_EQ(test[0].suspends(), 1);
-
- // Pretend we were awakened.
- system_monitor.ProcessPowerMessage(SystemMonitor::RESUME_EVENT);
- loop.RunAllPending();
- EXPECT_EQ(test[0].resumes(), 1);
-
- // Send a duplicate resume notification. This should be suppressed.
- system_monitor.ProcessPowerMessage(SystemMonitor::RESUME_EVENT);
- loop.RunAllPending();
- EXPECT_EQ(test[0].resumes(), 1);
-}
-
-} // namespace ui
diff --git a/ui/base/system_monitor/system_monitor_win.cc b/ui/base/system_monitor/system_monitor_win.cc
deleted file mode 100644
index df8aabf..0000000
--- a/ui/base/system_monitor/system_monitor_win.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h"
-
-namespace ui {
-
-void SystemMonitor::ProcessWmPowerBroadcastMessage(int event_id) {
- PowerEvent power_event;
- switch (event_id) {
- case PBT_APMPOWERSTATUSCHANGE: // The power status changed.
- power_event = POWER_STATE_EVENT;
- break;
- case PBT_APMRESUMEAUTOMATIC: // Resume from suspend.
- //case PBT_APMRESUMESUSPEND: // User-initiated resume from suspend.
- // We don't notify for this latter event
- // because if it occurs it is always sent as a
- // second event after PBT_APMRESUMEAUTOMATIC.
- power_event = RESUME_EVENT;
- break;
- case PBT_APMSUSPEND: // System has been suspended.
- power_event = SUSPEND_EVENT;
- break;
- default:
- return;
-
- // Other Power Events:
- // PBT_APMBATTERYLOW - removed in Vista.
- // PBT_APMOEMEVENT - removed in Vista.
- // PBT_APMQUERYSUSPEND - removed in Vista.
- // PBT_APMQUERYSUSPENDFAILED - removed in Vista.
- // PBT_APMRESUMECRITICAL - removed in Vista.
- // PBT_POWERSETTINGCHANGE - user changed the power settings.
- }
- ProcessPowerMessage(power_event);
-}
-
-// Function to query the system to see if it is currently running on
-// battery power. Returns true if running on battery.
-bool SystemMonitor::IsBatteryPower() {
- SYSTEM_POWER_STATUS status;
- if (!GetSystemPowerStatus(&status)) {
- LOG(ERROR) << "GetSystemPowerStatus failed: " << GetLastError();
- return false;
- }
- return (status.ACLineStatus == 0);
-}
-
-} // namespace ui
diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc
index 8a5ad92..4247547 100644
--- a/ui/views/widget/native_widget_win.cc
+++ b/ui/views/widget/native_widget_win.cc
@@ -5,7 +5,7 @@
#include "ui/views/widget/native_widget_win.h"
#include "base/memory/scoped_ptr.h"
-#include "ui/base/system_monitor/system_monitor.h"
+#include "base/system_monitor/system_monitor.h"
#include "ui/base/view_prop.h"
#include "ui/base/win/hwnd_util.h"
#include "ui/gfx/canvas_skia.h"