chromium/chromeos/ash/components/kiosk/vision/internal/retry_timer.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_RETRY_TIMER_H_
#define CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_RETRY_TIMER_H_

#include "base/functional/callback_forward.h"
#include "base/timer/timer.h"

namespace ash::kiosk_vision {

// Implements an exponential backoff timer. Meant to be used to retry Kiosk
// Vision tasks after failure.
class RetryTimer {
 public:
  RetryTimer();
  RetryTimer(const RetryTimer&) = delete;
  RetryTimer& operator=(const RetryTimer&) = delete;
  ~RetryTimer();

  // Sets up `retry_timer_` to run `on_retry` after an exponential delay based
  // on `run_count_`.
  void Start(base::OnceClosure on_retry);

  // Stops `retry_timer_` if it is running. Does nothing otherwise.
  void Stop();

 private:
  int run_count_ = 0;
  base::OneShotTimer retry_timer_;
};

}  // namespace ash::kiosk_vision

#endif  // CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_RETRY_TIMER_H_