Index: content/browser/battery_status/battery_monitor_integration_browsertest.cc |
diff --git a/content/browser/battery_status/battery_monitor_integration_browsertest.cc b/content/browser/battery_status/battery_monitor_integration_browsertest.cc |
index 16a819c3c673c0f907b9c9df55dc2775453a6de0..7b60ff60a2a8092b52a839bcce10e5ef40bb0589 100644 |
--- a/content/browser/battery_status/battery_monitor_integration_browsertest.cc |
+++ b/content/browser/battery_status/battery_monitor_integration_browsertest.cc |
@@ -50,23 +50,38 @@ class FakeBatteryMonitor : public device::BatteryMonitor { |
} |
private: |
+ typedef mojo::Callback<void(device::BatteryStatusPtr)> BatteryStatusCallback; |
+ |
FakeBatteryMonitor(mojo::InterfaceRequest<BatteryMonitor> request) |
- : subscription_( |
- g_callback_list.Get().Add(base::Bind(&FakeBatteryMonitor::DidChange, |
- base::Unretained(this)))), |
- binding_(this, request.Pass()) { |
- DidChange(g_battery_status); |
+ : binding_(this, request.Pass()) { |
} |
~FakeBatteryMonitor() override {} |
+ void QueryNextStatus(const BatteryStatusCallback& callback) override { |
+ // We don't expect overlapped calls to QueryNextStatus. |
+ DCHECK(callback_.is_null()); |
+ |
+ callback_ = callback; |
+ |
+ if (!subscription_) { |
+ subscription_ = |
+ g_callback_list.Get().Add(base::Bind(&FakeBatteryMonitor::DidChange, |
+ base::Unretained(this))); |
+ // Report initial value. |
+ DidChange(g_battery_status); |
+ } |
+ } |
+ |
void DidChange(const device::BatteryStatus& battery_status) { |
- device::BatteryStatusPtr status(device::BatteryStatus::New()); |
- *status = battery_status; |
- binding_.client()->DidChange(status.Pass()); |
+ if (!callback_.is_null()) { |
+ callback_.Run(battery_status.Clone()); |
+ callback_.reset(); |
+ } |
} |
scoped_ptr<BatteryUpdateSubscription> subscription_; |
mojo::StrongBinding<BatteryMonitor> binding_; |
+ BatteryStatusCallback callback_; |
}; |
// Overrides the default service implementation with the test implementation |