Chromium Code Reviews| Index: content/browser/power_monitor_message_broadcaster.h |
| diff --git a/content/browser/power_monitor_message_broadcaster.h b/content/browser/power_monitor_message_broadcaster.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fee8a3e1f435a5cef55639ed4ddcc512540deccc |
| --- /dev/null |
| +++ b/content/browser/power_monitor_message_broadcaster.h |
| @@ -0,0 +1,72 @@ |
| +// Copyright 2013 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 CONTENT_BROWSER_POWER_MONITOR_MESSAGE_BROADCASTER_H_ |
| +#define CONTENT_BROWSER_POWER_MONITOR_MESSAGE_BROADCASTER_H_ |
| + |
| +#include "base/basictypes.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/power_monitor/power_observer.h" |
| +#include "content/common/content_export.h" |
| +#include "content/public/browser/browser_message_filter.h" |
| +#include "content/public/browser/browser_thread.h" |
| + |
| + |
| +namespace IPC { |
| + class Sender; |
| +} |
| + |
| +namespace content { |
| + |
| +// A class used to monitor the power state change and communicate it to child |
| +// processes via IPC. All interaction with this class must be done on the UI |
| +// thread. |
| +class CONTENT_EXPORT PowerMonitorMessageBroadcaster |
| + : public base::PowerObserver, |
| + public base::RefCountedThreadSafe< |
| + PowerMonitorMessageBroadcaster, BrowserThread::DeleteOnUIThread> { |
| +public: |
| + explicit PowerMonitorMessageBroadcaster(IPC::Sender* sender); |
| + |
| + // Implement PowerObserver. |
| + virtual void OnPowerStateChange(bool on_battery_power) OVERRIDE; |
| + virtual void OnSuspend() OVERRIDE; |
| + virtual void OnResume() OVERRIDE; |
| + |
| +private: |
| + friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; |
| + friend class base::DeleteHelper<PowerMonitorMessageBroadcaster>; |
| + virtual ~PowerMonitorMessageBroadcaster(); |
| + |
| + friend class PowerMonitorMessageFilter; |
| + void RemoveSender(); |
| + |
| + IPC::Sender* sender_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PowerMonitorMessageBroadcaster); |
| +}; |
| + |
| +class PowerMonitorMessageFilter : public BrowserMessageFilter { |
|
piman
2013/07/29 21:18:18
At a high level, I'm not sure why you create a fil
bajones
2013/07/29 21:33:36
Please see @jam's two previous comments.
|
| +public: |
| + PowerMonitorMessageFilter(); |
| + |
| + virtual void OnChannelClosing() OVERRIDE; |
| + |
| + virtual bool OnMessageReceived( |
| + const IPC::Message& message, |
| + bool* message_was_ok) OVERRIDE; |
| + |
| +private: |
| + virtual ~PowerMonitorMessageFilter(); |
| + |
| + // These two functions must be called on the UI thread |
| + void CreateBroadcaster(); |
| + void DisableBroadcaster(); |
| + |
| + scoped_refptr<PowerMonitorMessageBroadcaster> broadcaster_; |
| +}; |
| + |
| +} // namespace base |
| + |
| +#endif // CONTENT_BROWSER_POWER_MONITOR_MESSAGE_BROADCASTER_H_ |