| Index: google_apis/gcm/engine/heartbeat_manager.cc
|
| diff --git a/google_apis/gcm/engine/heartbeat_manager.cc b/google_apis/gcm/engine/heartbeat_manager.cc
|
| index 5b5ae476a4b80be6ed896e98289d56fc0e771e48..ac9c1227e69b99850a852e77b530cc1917d3d109 100644
|
| --- a/google_apis/gcm/engine/heartbeat_manager.cc
|
| +++ b/google_apis/gcm/engine/heartbeat_manager.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "google_apis/gcm/engine/heartbeat_manager.h"
|
|
|
| +#include "base/timer/timer.h"
|
| #include "google_apis/gcm/protocol/mcs.pb.h"
|
| #include "net/base/network_change_notifier.h"
|
|
|
| @@ -19,11 +20,12 @@ const int64 kHeartbeatAckDefaultMs = 1000 * 60 * 1; // 1 minute.
|
| } // namespace
|
|
|
| HeartbeatManager::HeartbeatManager()
|
| - : waiting_for_ack_(false),
|
| + : started_(false),
|
| + waiting_for_ack_(false),
|
| heartbeat_interval_ms_(0),
|
| server_interval_ms_(0),
|
| - heartbeat_timer_(true /* retain user task */,
|
| - false /* not repeating */),
|
| + heartbeat_timer_(new base::Timer(true /* retain user task */,
|
| + false /* not repeating */)),
|
| weak_ptr_factory_(this) {}
|
|
|
| HeartbeatManager::~HeartbeatManager() {}
|
| @@ -37,17 +39,18 @@ void HeartbeatManager::Start(
|
| trigger_reconnect_callback_ = trigger_reconnect_callback;
|
|
|
| // Kicks off the timer.
|
| + started_ = true;
|
| waiting_for_ack_ = false;
|
| RestartTimer();
|
| }
|
|
|
| void HeartbeatManager::Stop() {
|
| - heartbeat_timer_.Stop();
|
| + heartbeat_timer_->Stop();
|
| waiting_for_ack_ = false;
|
| }
|
|
|
| void HeartbeatManager::OnHeartbeatAcked() {
|
| - if (!heartbeat_timer_.IsRunning())
|
| + if (!heartbeat_timer_->IsRunning())
|
| return;
|
|
|
| DCHECK(!send_heartbeat_callback_.is_null());
|
| @@ -68,12 +71,18 @@ void HeartbeatManager::UpdateHeartbeatConfig(
|
| }
|
|
|
| base::TimeTicks HeartbeatManager::GetNextHeartbeatTime() const {
|
| - if (heartbeat_timer_.IsRunning())
|
| - return heartbeat_timer_.desired_run_time();
|
| + if (heartbeat_timer_->IsRunning())
|
| + return heartbeat_timer_->desired_run_time();
|
| else
|
| return base::TimeTicks();
|
| }
|
|
|
| +void HeartbeatManager::SetHeartbeatTimer(scoped_ptr<base::Timer> timer) {
|
| + DCHECK(!started_) << "Attempting to set heartbeat timer after Start() has "
|
| + << "been called";
|
| + heartbeat_timer_ = timer.Pass();
|
| +}
|
| +
|
| void HeartbeatManager::OnHeartbeatTriggered() {
|
| if (waiting_for_ack_) {
|
| LOG(WARNING) << "Lost connection to MCS, reconnecting.";
|
| @@ -109,7 +118,7 @@ void HeartbeatManager::RestartTimer() {
|
| DVLOG(1) << "Resetting timer for ack with "
|
| << heartbeat_interval_ms_ << " ms interval.";
|
| }
|
| - heartbeat_timer_.Start(FROM_HERE,
|
| + heartbeat_timer_->Start(FROM_HERE,
|
| base::TimeDelta::FromMilliseconds(
|
| heartbeat_interval_ms_),
|
| base::Bind(&HeartbeatManager::OnHeartbeatTriggered,
|
|
|