// Copyright 2018 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. #ifndef COMPONENTS_COMPONENT_UPDATER_UPDATE_SCHEDULER_H_ #define COMPONENTS_COMPONENT_UPDATER_UPDATE_SCHEDULER_H_ #include "base/callback_forward.h" #include "base/time/time.h" namespace component_updater { // Abstract interface for an update task scheduler. class UpdateScheduler { public: using OnFinishedCallback = base::OnceCallback; // Type of task to be run by the scheduler. The task can start asynchronous // operations and must call |on_finished| when all operations have completed. using UserTask = base::RepeatingCallback; using OnStopTaskCallback = base::RepeatingCallback; virtual ~UpdateScheduler() = default; // Schedules |user_task| to be run periodically with at least an interval of // |delay|. The first time |user_task| will be run after at least // |initial_delay|. If the execution of |user_task| must be stopped before it // called its |on_finished| callback, |on_stop| will be called. virtual void Schedule(const base::TimeDelta& initial_delay, const base::TimeDelta& delay, const UserTask& user_task, const OnStopTaskCallback& on_stop) = 0; // Stops to periodically run |user_task| previously scheduled with |Schedule|. virtual void Stop() = 0; }; } // namespace component_updater #endif // COMPONENTS_COMPONENT_UPDATER_UPDATE_SCHEDULER_H_