| // 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. |
| |
| #ifndef DEVICE_BATTERY_BATTERY_STATUS_SERVICE_H_ |
| #define DEVICE_BATTERY_BATTERY_STATUS_SERVICE_H_ |
| |
| #include <memory> |
| |
| #include "base/callback_list.h" |
| #include "base/macros.h" |
| #include "base/memory/singleton.h" |
| #include "device/battery/battery_export.h" |
| #include "device/battery/battery_status.mojom.h" |
| |
| namespace base { |
| class SingleThreadTaskRunner; |
| } |
| |
| namespace device { |
| class BatteryStatusManager; |
| |
| class DEVICE_BATTERY_EXPORT BatteryStatusService { |
| public: |
| typedef base::Callback<void(const BatteryStatus&)> BatteryUpdateCallback; |
| typedef base::CallbackList<void(const BatteryStatus&)> |
| BatteryUpdateCallbackList; |
| typedef BatteryUpdateCallbackList::Subscription BatteryUpdateSubscription; |
| |
| // Returns the BatteryStatusService singleton. |
| static BatteryStatusService* GetInstance(); |
| |
| // Adds a callback to receive battery status updates. Must be called on the |
| // main thread. The callback itself will be called on the main thread as well. |
| // NOTE: The callback may be run before AddCallback returns! |
| std::unique_ptr<BatteryUpdateSubscription> AddCallback( |
| const BatteryUpdateCallback& callback); |
| |
| // Gracefully clean-up. |
| void Shutdown(); |
| |
| // Injects a custom battery status manager for testing purposes. |
| void SetBatteryManagerForTesting( |
| std::unique_ptr<BatteryStatusManager> test_battery_manager); |
| |
| // Returns callback to invoke when battery is changed. Used for testing. |
| const BatteryUpdateCallback& GetUpdateCallbackForTesting() const; |
| |
| private: |
| friend struct base::DefaultSingletonTraits<BatteryStatusService>; |
| friend class BatteryStatusServiceTest; |
| |
| BatteryStatusService(); |
| virtual ~BatteryStatusService(); |
| |
| // Updates current battery status and sends new status to interested |
| // render processes. Can be called on any thread via a callback. |
| void NotifyConsumers(const BatteryStatus& status); |
| void NotifyConsumersOnMainThread(const BatteryStatus& status); |
| void ConsumersChanged(); |
| |
| scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; |
| std::unique_ptr<BatteryStatusManager> battery_fetcher_; |
| BatteryUpdateCallbackList callback_list_; |
| BatteryUpdateCallback update_callback_; |
| BatteryStatus status_; |
| bool status_updated_; |
| bool is_shutdown_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BatteryStatusService); |
| }; |
| |
| } // namespace device |
| |
| #endif // DEVICE_BATTERY_BATTERY_STATUS_SERVICE_H_ |