summaryrefslogtreecommitdiff
path: root/chromium/google_apis/gcm/engine/heartbeat_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/google_apis/gcm/engine/heartbeat_manager.cc')
-rw-r--r--chromium/google_apis/gcm/engine/heartbeat_manager.cc32
1 files changed, 18 insertions, 14 deletions
diff --git a/chromium/google_apis/gcm/engine/heartbeat_manager.cc b/chromium/google_apis/gcm/engine/heartbeat_manager.cc
index dc5429672ec..71e3f0227a6 100644
--- a/chromium/google_apis/gcm/engine/heartbeat_manager.cc
+++ b/chromium/google_apis/gcm/engine/heartbeat_manager.cc
@@ -11,7 +11,6 @@
#include "base/location.h"
#include "base/metrics/histogram_macros.h"
#include "base/power_monitor/power_monitor.h"
-#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "build/build_config.h"
@@ -42,19 +41,28 @@ const int kHeartbeatMissedCheckMs = 1000 * 60 * 5; // 5 minutes.
} // namespace
-HeartbeatManager::HeartbeatManager()
+HeartbeatManager::HeartbeatManager(
+ scoped_refptr<base::SequencedTaskRunner> io_task_runner,
+ scoped_refptr<base::SequencedTaskRunner> maybe_power_wrapped_io_task_runner)
: waiting_for_ack_(false),
heartbeat_interval_ms_(0),
server_interval_ms_(0),
client_interval_ms_(0),
+ io_task_runner_(std::move(io_task_runner)),
heartbeat_timer_(new base::RetainingOneShotTimer()),
- weak_ptr_factory_(this) {}
+ weak_ptr_factory_(this) {
+ DCHECK(io_task_runner_);
+ DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
+ // Set the heartbeat timer task runner to |maybe_power_wrapped_io_task_runner|
+ // so that a delayed task posted to it can wake the system up from sleep to
+ // perform the task.
+ heartbeat_timer_->SetTaskRunner(
+ std::move(maybe_power_wrapped_io_task_runner));
+}
HeartbeatManager::~HeartbeatManager() {
// Stop listening for system suspend and resume events.
- base::PowerMonitor* monitor = base::PowerMonitor::Get();
- if (monitor)
- monitor->RemoveObserver(this);
+ base::PowerMonitor::RemoveObserver(this);
}
void HeartbeatManager::Start(
@@ -66,9 +74,7 @@ void HeartbeatManager::Start(
trigger_reconnect_callback_ = trigger_reconnect_callback;
// Listen for system suspend and resume events.
- base::PowerMonitor* monitor = base::PowerMonitor::Get();
- if (monitor)
- monitor->AddObserver(this);
+ base::PowerMonitor::AddObserver(this);
// Calculated the heartbeat interval just before we start the timer.
UpdateHeartbeatInterval();
@@ -84,9 +90,7 @@ void HeartbeatManager::Stop() {
heartbeat_timer_->Stop();
waiting_for_ack_ = false;
- base::PowerMonitor* monitor = base::PowerMonitor::Get();
- if (monitor)
- monitor->RemoveObserver(this);
+ base::PowerMonitor::RemoveObserver(this);
}
void HeartbeatManager::OnHeartbeatAcked() {
@@ -192,7 +196,7 @@ void HeartbeatManager::RestartTimer() {
// Windows, Mac, Android, iOS, and Chrome OS all provide a way to be notified
// when the system is suspending or resuming. The only one that does not is
// Linux so we need to poll to check for missed heartbeats.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ io_task_runner_->PostDelayedTask(
FROM_HERE,
base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
weak_ptr_factory_.GetWeakPtr()),
@@ -215,7 +219,7 @@ void HeartbeatManager::CheckForMissedHeartbeat() {
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// Otherwise check again later.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ io_task_runner_->PostDelayedTask(
FROM_HERE,
base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
weak_ptr_factory_.GetWeakPtr()),