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 #ifndef REMOTING_HOST_BACKOFF_TIMER_H_
6 #define REMOTING_HOST_BACKOFF_TIMER_H_
8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/timer/timer.h"
11 #include "net/base/backoff_entry.h"
15 // An object similar to a base::Timer with exponential backoff.
21 // Invokes |user_task| at intervals specified by |delay|, and
22 // increasing up to |max_delay|. Always invokes |user_task| before
23 // the first scheduled delay.
24 void Start(const tracked_objects::Location
& posted_from
,
25 base::TimeDelta delay
,
26 base::TimeDelta max_delay
,
27 const base::Closure
& user_task
);
29 // Prevents the user task from being invoked again.
32 // Returns true if the user task may be invoked in the future.
33 bool IsRunning() const { return backoff_entry_
; }
35 void SetTimerForTest(scoped_ptr
<base::Timer
> timer
) { timer_
= timer
.Pass(); }
41 scoped_ptr
<base::Timer
> timer_
;
42 base::Closure user_task_
;
43 tracked_objects::Location posted_from_
;
44 net::BackoffEntry::Policy backoff_policy_
= {};
45 scoped_ptr
<net::BackoffEntry
> backoff_entry_
;
47 DISALLOW_COPY_AND_ASSIGN(BackoffTimer
);
50 } // namespace remoting
52 #endif // REMOTING_HOST_BACKOFF_TIMER_H_