Home | History | Annotate | Download | only in base
      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