#ifndef CONTENT_BROWSER_BTM_PERSISTENT_REPEATING_TIMER_H_
#define CONTENT_BROWSER_BTM_PERSISTENT_REPEATING_TIMER_H_
#include <memory>
#include <optional>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "content/common/content_export.h"
namespace content {
class CONTENT_EXPORT PersistentRepeatingTimer {
public:
class CONTENT_EXPORT Storage {
public:
using TimeCallback = base::OnceCallback<void(std::optional<base::Time>)>;
virtual ~Storage();
virtual void GetLastFired(TimeCallback callback) const = 0;
virtual void SetLastFired(base::Time time) = 0;
};
PersistentRepeatingTimer(std::unique_ptr<Storage> timer_storage,
base::TimeDelta delay,
base::RepeatingClosure task);
~PersistentRepeatingTimer();
void Start();
private:
void OnTimerFired();
void StartWithLastFired(std::optional<base::Time> last_fired);
std::unique_ptr<Storage> storage_;
base::TimeDelta delay_;
base::RepeatingClosure user_task_;
base::RetainingOneShotTimer timer_;
base::WeakPtrFactory<PersistentRepeatingTimer> weak_factory_{this};
};
}
#endif