1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/task_runner.h" 6 7 #include "base/compiler_specific.h" 8 #include "base/logging.h" 9 #include "base/threading/post_task_and_reply_impl.h" 10 11 namespace base { 12 13 namespace { 14 15 // TODO(akalin): There's only one other implementation of 16 // PostTaskAndReplyImpl in WorkerPool. Investigate whether it'll be 17 // possible to merge the two. 18 class PostTaskAndReplyTaskRunner : public internal::PostTaskAndReplyImpl { 19 public: 20 explicit PostTaskAndReplyTaskRunner(TaskRunner* destination); 21 22 private: 23 virtual bool PostTask(const tracked_objects::Location& from_here, 24 const Closure& task) OVERRIDE; 25 26 // Non-owning. 27 TaskRunner* destination_; 28 }; 29 30 PostTaskAndReplyTaskRunner::PostTaskAndReplyTaskRunner( 31 TaskRunner* destination) : destination_(destination) { 32 DCHECK(destination_); 33 } 34 35 bool PostTaskAndReplyTaskRunner::PostTask( 36 const tracked_objects::Location& from_here, 37 const Closure& task) { 38 return destination_->PostTask(from_here, task); 39 } 40 41 } // namespace 42 43 bool TaskRunner::PostTask(const tracked_objects::Location& from_here, 44 const Closure& task) { 45 return PostDelayedTask(from_here, task, base::TimeDelta()); 46 } 47 48 bool TaskRunner::PostTaskAndReply( 49 const tracked_objects::Location& from_here, 50 const Closure& task, 51 const Closure& reply) { 52 return PostTaskAndReplyTaskRunner(this).PostTaskAndReply( 53 from_here, task, reply); 54 } 55 56 TaskRunner::TaskRunner() {} 57 58 TaskRunner::~TaskRunner() {} 59 60 void TaskRunner::OnDestruct() const { 61 delete this; 62 } 63 64 void TaskRunnerTraits::Destruct(const TaskRunner* task_runner) { 65 task_runner->OnDestruct(); 66 } 67 68 } // namespace base 69