blob: d12ad230a5103b680e2001ee5c2a63f5f9e54b97 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/enterprise_reporting/request_timer.h"
#include "base/time/time.h"
namespace enterprise_reporting {
RequestTimer::RequestTimer() = default;
RequestTimer::~RequestTimer() = default;
void RequestTimer::Start(const base::Location& posted_from,
base::TimeDelta first_delay,
base::TimeDelta repeat_delay,
base::RepeatingClosure user_task) {
// Create |repeat_request_timer| but not start it because the first request is
// sent after |first_delay|.
repeat_request_timer_ = std::make_unique<base::RetainingOneShotTimer>(
FROM_HERE, repeat_delay, user_task);
if (first_delay >= repeat_delay) {
repeat_request_timer_->Reset();
} else {
first_request_timer_.Start(FROM_HERE, first_delay,
base::BindOnce(user_task));
}
}
void RequestTimer::Stop() {
if (repeat_request_timer_)
repeat_request_timer_->Stop();
first_request_timer_.Stop();
}
void RequestTimer::Reset() {
DCHECK(!first_request_timer_.IsRunning());
DCHECK(repeat_request_timer_);
repeat_request_timer_->Reset();
}
bool RequestTimer::IsRepeatTimerRunning() const {
return repeat_request_timer_ && repeat_request_timer_->IsRunning();
}
bool RequestTimer::IsFirstTimerRunning() const {
return first_request_timer_.IsRunning();
}
} // namespace enterprise_reporting