1 // Copyright 2015 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.
5 #include "remoting/host/backoff_timer.h"
9 BackoffTimer::BackoffTimer() : timer_(new base::Timer(false, false)) {
12 BackoffTimer::~BackoffTimer() {
15 void BackoffTimer::Start(const tracked_objects::Location
& posted_from
,
16 base::TimeDelta delay
,
17 base::TimeDelta max_delay
,
18 const base::Closure
& user_task
) {
19 backoff_policy_
.multiply_factor
= 2;
20 backoff_policy_
.initial_delay_ms
= delay
.InMilliseconds();
21 backoff_policy_
.maximum_backoff_ms
= max_delay
.InMilliseconds();
22 backoff_policy_
.entry_lifetime_ms
= -1;
23 backoff_entry_
.reset(new net::BackoffEntry(&backoff_policy_
));
25 posted_from_
= posted_from
;
26 user_task_
= user_task
;
30 void BackoffTimer::Stop() {
33 backoff_entry_
.reset();
36 void BackoffTimer::StartTimer() {
38 posted_from_
, backoff_entry_
->GetTimeUntilRelease(),
39 base::Bind(&BackoffTimer::OnTimerFired
, base::Unretained(this)));
42 void BackoffTimer::OnTimerFired() {
44 DCHECK(!user_task_
.is_null());
45 backoff_entry_
->InformOfRequest(false);
48 // Running the user task may destroy this object, so don't reference
49 // any fields of this object after running it.
50 base::Closure
user_task(user_task_
);
54 } // namespace remoting