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 <utility> 8 9 #include "base/compiler_specific.h" 10 #include "base/logging.h" 11 #include "base/threading/post_task_and_reply_impl.h" 12 13 namespace base { 14 15 namespace { 16 17 // TODO(akalin): There's only one other implementation of 18 // PostTaskAndReplyImpl in WorkerPool. Investigate whether it'll be 19 // possible to merge the two. 20 class PostTaskAndReplyTaskRunner : public internal::PostTaskAndReplyImpl { 21 public: 22 explicit PostTaskAndReplyTaskRunner(TaskRunner* destination); 23 24 private: 25 bool PostTask(const tracked_objects::Location& from_here, 26 OnceClosure task) override; 27 28 // Non-owning. 29 TaskRunner* destination_; 30 }; 31 32 PostTaskAndReplyTaskRunner::PostTaskAndReplyTaskRunner( 33 TaskRunner* destination) : destination_(destination) { 34 DCHECK(destination_); 35 } 36 37 bool PostTaskAndReplyTaskRunner::PostTask( 38 const tracked_objects::Location& from_here, 39 OnceClosure task) { 40 return destination_->PostTask(from_here, std::move(task)); 41 } 42 43 } // namespace 44 45 bool TaskRunner::PostTask(const tracked_objects::Location& from_here, 46 OnceClosure task) { 47 return PostDelayedTask(from_here, std::move(task), base::TimeDelta()); 48 } 49 50 bool TaskRunner::PostTaskAndReply(const tracked_objects::Location& from_here, 51 OnceClosure task, 52 OnceClosure reply) { 53 return PostTaskAndReplyTaskRunner(this).PostTaskAndReply( 54 from_here, std::move(task), std::move(reply)); 55 } 56 57 TaskRunner::TaskRunner() {} 58 59 TaskRunner::~TaskRunner() {} 60 61 void TaskRunner::OnDestruct() const { 62 delete this; 63 } 64 65 void TaskRunnerTraits::Destruct(const TaskRunner* task_runner) { 66 task_runner->OnDestruct(); 67 } 68 69 } // namespace base 70