Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: content/browser/battery_status/battery_status_service.cc

Issue 258173004: [NO SUBMIT] Battery Status API skeleton implementation ASYNC Base URL: https://chromium.googlesource.com/chromium/src.git@April-17-battery-status-renderer-and-IPC
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/battery_status/battery_status_service.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "content/public/browser/browser_thread.h"
10
11 namespace content {
12
13 static void AddCallback(std::vector<BatteryStatusService::BatteryStatusUpdateCal lback>& callbacks,
14 const BatteryStatusService::BatteryStatusUpdateCallback& callback) {
15 for (size_t i = 0; i < callbacks.size(); ++i) {
16 if (callbacks[i].Equals(callback))
17 return;
18 }
19 callbacks.push_back(callback);
20 }
21
22 static void RemoveCallback(std::vector<BatteryStatusService::BatteryStatusUpdate Callback>& callbacks,
23 const BatteryStatusService::BatteryStatusUpdateCallback& callback) {
24 for (size_t i = 0; i < callbacks.size(); ++i) {
25 if (callbacks[i].Equals(callback)) {
26 callbacks[i] = callbacks.back();
27 callbacks.pop_back();
28 return;
29 }
30 }
31 }
32
33 BatteryStatusService::BatteryStatusService() : is_shutdown_(false) {
34 }
35
36 BatteryStatusService::~BatteryStatusService() {
37 }
38
39 BatteryStatusService* BatteryStatusService::GetInstance() {
40 return Singleton<BatteryStatusService,
41 LeakySingletonTraits<BatteryStatusService> >::get();
42 }
43
44 void BatteryStatusService::AddConsumer(const BatteryStatusService::BatteryStatus UpdateCallback& callback) {
45 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
46
47 if (!battery_fetcher_)
48 battery_fetcher_.reset(new BatteryStatusManagerAndroid);
49
50 if (callbacks_.empty())
51 battery_fetcher_->StartListeningBatteryChange();
52
53 AddCallback(callbacks_, callback);
54 }
55
56 void BatteryStatusService::RemoveConsumer(const BatteryStatusService::BatterySta tusUpdateCallback& callback) {
57 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
58
59 RemoveCallback(callbacks_, callback);
60
61 if (callbacks_.empty())
62 battery_fetcher_->StopListeningBatteryChange();
63 }
64
65 const blink::WebBatteryStatus& BatteryStatusService::GetBatteryStatus() const {
66 return status_;
67 }
68
69 void BatteryStatusService::UpdateBatteryStatus(bool charging,
70 double chargingTime, double dischargingTime, double level) {
71 status_.charging = charging;
72 status_.chargingTime = chargingTime;
73 status_.dischargingTime = dischargingTime;
74 status_.level = level;
75 BrowserThread::PostTask(BrowserThread::IO,
76 FROM_HERE,
77 base::Bind(&BatteryStatusService::NotifyConsumers,
78 base::Unretained(this)));
79 }
80
81 void BatteryStatusService::NotifyConsumers() {
82 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
83 std::vector<BatteryStatusUpdateCallback>::const_iterator it = callbacks_.begin ();
84 for (; it != callbacks_.end(); ++it)
85 (*it).Run(status_);
86 }
87
88 void BatteryStatusService::Shutdown() {
89 battery_fetcher_.reset();
90 is_shutdown_ = true;
91 }
92
93 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/battery_status/battery_status_service.h ('k') | content/browser/browser_main_loop.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698