blob: 3cf836d690f09eba8b73dd8a8769fd31552e3c08 [file] [log] [blame]
// Copyright 2020 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 CHROME_CREDENTIAL_PROVIDER_EXTENSION_TASK_MANAGER_H_
#define CHROME_CREDENTIAL_PROVIDER_EXTENSION_TASK_MANAGER_H_
#include <map>
#include <memory>
#include <string>
#include "base/callback.h"
#include "base/single_thread_task_runner.h"
#include "chrome/credential_provider/extension/task.h"
#include "net/base/backoff_entry.h"
namespace credential_provider {
namespace extension {
using TaskCreator = base::RepeatingCallback<std::unique_ptr<Task>()>;
// Manager for all the tasks that are supposed to be executed by GCPW
// extension. Tasks are registered and execution is triggered via TaskManager.
class TaskManager {
public:
// Used to retrieve singleton instance of the TaskManager.
static TaskManager* Get();
// This function schedules periodic tasks using PostDelayedTask interface. It
// schedules the tasks on the provided |task_runner|.
virtual void RunTasks(
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
// Each implementation needs to register the task with the task manager so
// that they can be executed at runtime.
virtual void RegisterTask(const std::string& task_name,
TaskCreator task_creator);
protected:
TaskManager();
virtual ~TaskManager();
// Returns the storage used for the instance pointer.
static TaskManager** GetInstanceStorage();
// Executes the task with the name |task_name| and re-schedules it for the
// next execution.
virtual void ExecuteTask(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
const std::string& task_name);
private:
// List of tasks registered to be executed at every periodic run.
std::map<std::string, TaskCreator> task_list_;
// If a task fails, the next execution time is calculated based on the backoff
// entry created and kept as long as task fails.
std::map<std::string, std::unique_ptr<net::BackoffEntry>>
task_execution_backoffs_;
// Set of backoff policies for the tasks where there is a backoff entry.
std::map<std::string, std::unique_ptr<net::BackoffEntry::Policy>>
task_execution_policies_;
};
} // namespace extension
} // namespace credential_provider
#endif // CHROME_CREDENTIAL_PROVIDER_EXTENSION_TASK_MANAGER_H_