Index: base/task_runner.cc |
diff --git a/base/task_runner.cc b/base/task_runner.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..734674f09aeb4ffa902449960cab749dec4469bc |
--- /dev/null |
+++ b/base/task_runner.cc |
@@ -0,0 +1,68 @@ |
+// Copyright (c) 2012 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/task_runner.h" |
+ |
+#include "base/compiler_specific.h" |
+#include "base/logging.h" |
+#include "base/threading/post_task_and_reply_impl.h" |
+ |
+namespace base { |
+ |
+namespace { |
+ |
+// TODO(akalin): There's only one other implementation of |
+// PostTaskAndReplyImpl in WorkerPool. Investigate whether it'll be |
+// possible to merge the two. |
+class PostTaskAndReplyTaskRunner : public internal::PostTaskAndReplyImpl { |
+ public: |
+ PostTaskAndReplyTaskRunner(TaskRunner* destination); |
+ |
+ private: |
+ virtual bool PostTask(const tracked_objects::Location& from_here, |
+ const Closure& task) OVERRIDE; |
+ |
+ // Non-owning. |
+ TaskRunner* destination_; |
+}; |
+ |
+PostTaskAndReplyTaskRunner::PostTaskAndReplyTaskRunner( |
+ TaskRunner* destination) : destination_(destination) { |
+ DCHECK(destination_); |
+} |
+ |
+bool PostTaskAndReplyTaskRunner::PostTask( |
+ const tracked_objects::Location& from_here, |
+ const Closure& task) { |
+ return destination_->PostTask(from_here, task); |
+} |
+ |
+} // namespace |
+ |
+bool TaskRunner::PostTask(const tracked_objects::Location& from_here, |
+ const Closure& task) { |
+ return PostDelayedTask(from_here, task, 0); |
+} |
+ |
+bool TaskRunner::PostTaskAndReply( |
+ const tracked_objects::Location& from_here, |
+ const Closure& task, |
+ const Closure& reply) { |
+ return PostTaskAndReplyTaskRunner(this).PostTaskAndReply( |
+ from_here, task, reply); |
+} |
+ |
+TaskRunner::TaskRunner() {} |
+ |
+TaskRunner::~TaskRunner() {} |
+ |
+void TaskRunner::OnDestruct() const { |
+ delete this; |
+} |
+ |
+void TaskRunnerTraits::Destruct(const TaskRunner* task_runner) { |
+ task_runner->OnDestruct(); |
+} |
+ |
+} // namespace base |