1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_SERVICE_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_SERVICE_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback_list.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/singleton.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/common/content_export.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebBatteryStatus.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content { 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class BatteryStatusManager; 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class CONTENT_EXPORT BatteryStatusService { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef base::Callback<void(const blink::WebBatteryStatus&)> 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BatteryUpdateCallback; 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef base::CallbackList<void(const blink::WebBatteryStatus&)> 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BatteryUpdateCallbackList; 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef BatteryUpdateCallbackList::Subscription BatteryUpdateSubscription; 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns the BatteryStatusService singleton. 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static BatteryStatusService* GetInstance(); 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Adds a callback to receive battery status updates. 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Must be called on the I/O thread. 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<BatteryUpdateSubscription> AddCallback( 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const BatteryUpdateCallback& callback); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Gracefully clean-up. 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Shutdown(); 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Injects a custom battery status manager for testing purposes. 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This class takes ownership of the injected object. 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetBatteryManagerForTesting(BatteryStatusManager* test_battery_manager); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns callback to invoke when battery is changed. Used for testing. 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const BatteryUpdateCallback& GetUpdateCallbackForTesting() const; 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) friend struct DefaultSingletonTraits<BatteryStatusService>; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BatteryStatusService(); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~BatteryStatusService(); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Updates current battery status and sends new status to interested 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // render processes. Can be called on any thread via a callback. 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UpdateBatteryStatus(const blink::WebBatteryStatus& status); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void NotifyConsumers(const blink::WebBatteryStatus& status); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void ConsumersChanged(); 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<BatteryStatusManager> battery_fetcher_; 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BatteryUpdateCallbackList callback_list_; 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BatteryUpdateCallback update_callback_; 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebBatteryStatus status_; 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool status_updated_; 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_shutdown_; 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BatteryStatusService); 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace content 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_SERVICE_H_ 67