Index: base/task_runner.cc |
diff --git a/base/task_runner.cc b/base/task_runner.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..065643d31b3d53d05a9699711853cd458afe770f |
--- /dev/null |
+++ b/base/task_runner.cc |
@@ -0,0 +1,60 @@ |
+// 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/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. |
willchan no longer on Chromium
2012/02/09 20:50:50
Sorry, I'm tired. Why is it OK for this to be non-
akalin
2012/02/10 22:48:59
This class is essentially just to define a PostTas
|
+ TaskRunner* destination_; |
+}; |
+ |
+PostTaskAndReplyTaskRunner::PostTaskAndReplyTaskRunner( |
+ TaskRunner* destination) : destination_(destination) {} |
willchan no longer on Chromium
2012/02/09 20:50:50
DCHECK early on that it's non-NULL.
akalin
2012/02/10 22:48:59
Done.
|
+ |
+bool PostTaskAndReplyTaskRunner::PostTask( |
+ const tracked_objects::Location& from_here, |
+ const Closure& task) { |
+ return destination_->PostTask(from_here, task); |
+} |
+ |
+} // namespace |
+ |
+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 |