// Copyright 2016 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_OFFLINE_PAGES_TASK_TASK_H_ #define COMPONENTS_OFFLINE_PAGES_TASK_TASK_H_ #include "base/callback.h" namespace offline_pages { // A task which may run asynchronous steps. Its primary purpose is to implement // operations to be inserted into a |TaskQueue|, however, tasks can also be run // outside of a |TaskQueue|. class Task { public: Task(); virtual ~Task(); Task(const Task&) = delete; Task& operator=(const Task&) = delete; void Execute(base::OnceClosure complete_callback); protected: // Entry point to the task. Called by |Execute()| to perform the task. // Must call |TaskComplete()| as the final step. virtual void Run() = 0; // Tasks must call |TaskComplete()| as their last step. void TaskComplete(); base::OnceClosure task_completion_callback_; bool completed_ = false; bool started_ = false; }; } // namespace offline_pages #endif // COMPONENTS_OFFLINE_PAGES_TASK_TASK_H_