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

Unified Diff: device/battery/battery_monitor_impl.cc

Issue 833983002: Stop using [Client=...] feature of Mojom for BatteryMonitor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixup per review feedback Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/battery/battery_monitor_impl.h ('k') | device/battery/battery_status_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/battery/battery_monitor_impl.cc
diff --git a/device/battery/battery_monitor_impl.cc b/device/battery/battery_monitor_impl.cc
index dc07b62df1a8a2485016c3a059ee0be294c76c51..62cbf60011d4d1c12e890b8814bef074b0c08510 100644
--- a/device/battery/battery_monitor_impl.cc
+++ b/device/battery/battery_monitor_impl.cc
@@ -17,20 +17,41 @@ void BatteryMonitorImpl::Create(
BatteryMonitorImpl::BatteryMonitorImpl(
mojo::InterfaceRequest<BatteryMonitor> request)
: binding_(this, request.Pass()),
- subscription_(BatteryStatusService::GetInstance()->AddCallback(
- base::Bind(&BatteryMonitorImpl::DidChange, base::Unretained(this)))) {
+ status_to_report_(false) {
+ // NOTE: DidChange may be called before AddCallback returns. This is done to
+ // report current status.
+ subscription_ = BatteryStatusService::GetInstance()->AddCallback(
+ base::Bind(&BatteryMonitorImpl::DidChange, base::Unretained(this)));
}
BatteryMonitorImpl::~BatteryMonitorImpl() {
}
+void BatteryMonitorImpl::QueryNextStatus(
+ const BatteryStatusCallback& callback) {
+ callbacks_.push_back(callback);
+
+ if (status_to_report_)
+ ReportStatus();
+}
+
void BatteryMonitorImpl::RegisterSubscription() {
}
void BatteryMonitorImpl::DidChange(const BatteryStatus& battery_status) {
- BatteryStatusPtr status(BatteryStatus::New());
- *status = battery_status;
- binding_.client()->DidChange(status.Pass());
+ status_ = battery_status;
+ status_to_report_ = true;
+
+ if (!callbacks_.empty())
+ ReportStatus();
+}
+
+void BatteryMonitorImpl::ReportStatus() {
+ for (const auto& callback : callbacks_)
+ callback.Run(status_.Clone());
+ callbacks_.clear();
+
+ status_to_report_ = false;
}
} // namespace device
« no previous file with comments | « device/battery/battery_monitor_impl.h ('k') | device/battery/battery_status_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698