#ifndef REMOTING_HOST_BACKOFF_TIMER_H_
#define REMOTING_HOST_BACKOFF_TIMER_H_
#include <memory>
#include "base/functional/callback.h"
#include "base/timer/timer.h"
#include "net/base/backoff_entry.h"
namespace remoting {
class BackoffTimer {
public:
BackoffTimer();
BackoffTimer(const BackoffTimer&) = delete;
BackoffTimer& operator=(const BackoffTimer&) = delete;
~BackoffTimer();
void Start(const base::Location& posted_from,
base::TimeDelta delay,
base::TimeDelta max_delay,
const base::RepeatingClosure& user_task);
void Stop();
bool IsRunning() const { return !!backoff_entry_; }
private:
void StartTimer();
void OnTimerFired();
base::OneShotTimer timer_;
base::RepeatingClosure user_task_;
base::Location posted_from_;
net::BackoffEntry::Policy backoff_policy_ = {};
std::unique_ptr<net::BackoffEntry> backoff_entry_;
};
}
#endif