|  | // Copyright 2015 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. | 
|  |  | 
|  | // This file provides an interface for "task runners", which are used within the | 
|  | // EDK itself. | 
|  |  | 
|  | #ifndef MOJO_EDK_PLATFORM_TASK_RUNNER_H_ | 
|  | #define MOJO_EDK_PLATFORM_TASK_RUNNER_H_ | 
|  |  | 
|  | #include <functional> | 
|  |  | 
|  | #include "mojo/edk/util/ref_counted.h" | 
|  | #include "mojo/public/cpp/system/macros.h" | 
|  |  | 
|  | namespace mojo { | 
|  | namespace platform { | 
|  |  | 
|  | // Interface for "task runners", which can be used to schedule tasks to be run | 
|  | // asynchronously (possibly on a different thread). Implementations must be | 
|  | // thread-safe. | 
|  | class TaskRunner : public util::RefCountedThreadSafe<TaskRunner> { | 
|  | public: | 
|  | virtual ~TaskRunner() {} | 
|  |  | 
|  | // Posts a task to this task runner (i.e., schedule the task). The task must | 
|  | // be run (insofar as this can be guaranteed). (This must not run the task | 
|  | // synchronously.) | 
|  | virtual void PostTask(std::function<void()>&& task) = 0; | 
|  |  | 
|  | // Returns true if this task runner may run tasks on the current thread, false | 
|  | // otherwise (e.g., if this task runner only runs tasks on a different | 
|  | // thread). | 
|  | virtual bool RunsTasksOnCurrentThread() const = 0; | 
|  |  | 
|  | protected: | 
|  | TaskRunner() {} | 
|  |  | 
|  | private: | 
|  | MOJO_DISALLOW_COPY_AND_ASSIGN(TaskRunner); | 
|  | }; | 
|  |  | 
|  | }  // namespace platform | 
|  | }  // namespace mojo | 
|  |  | 
|  | #endif  // MOJO_EDK_PLATFORM_TASK_RUNNER_H_ |