| // 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<void()>; |
| // 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<void(OnFinishedCallback on_finished)>; |
| using OnStopTaskCallback = base::RepeatingCallback<void()>; |
| |
| 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_ |