// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_OFFLINE_PAGES_TASK_TASK_QUEUE_H_ #define COMPONENTS_OFFLINE_PAGES_TASK_TASK_QUEUE_H_ #include <memory> #include <vector> #include "base/containers/circular_deque.h" #include "base/functional/callback.h" #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "components/offline_pages/task/task.h" namespace base { class SingleThreadTaskRunner; } // namespace base namespace offline_pages { // Class for coordinating |Task|s in relation to access to a specific resource. // As a task, we understand a set of asynchronous operations (possibly switching // threads) that access a set of sensitive resource(s). Because the resource // state is modified and individual steps of a task are asynchronous, allowing // certain tasks to run in parallel may lead to incorrect results. This class // allows for ordering of tasks in a FIFO manner, to ensure two tasks modifying // a resources are not run at the same time. // // Consumers of this class should create an instance of TaskQueue and implement // tasks that need to be run sequentially. New task will only be started when // the previous one calls |Task::TaskComplete|. // // Methods on TaskQueue should be called from the same thread from which it // is created. class TaskQueue { … }; } // namespace offline_pages #endif // COMPONENTS_OFFLINE_PAGES_TASK_TASK_QUEUE_H_