blob: ce42eedc5061d5e3eb40d8527fa4b18e3e72a59a [file] [log] [blame]
// 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.
#include "base/callback_forward.h"
#include "base/time/time.h"
namespace component_updater {
// Abstract interface for an update task scheduler.
class UpdateScheduler {
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