diff options
Diffstat (limited to 'chromium/base/task_runner.cc')
-rw-r--r-- | chromium/base/task_runner.cc | 41 |
1 files changed, 5 insertions, 36 deletions
diff --git a/chromium/base/task_runner.cc b/chromium/base/task_runner.cc index d8644a989dc..e2787f3d1ac 100644 --- a/chromium/base/task_runner.cc +++ b/chromium/base/task_runner.cc @@ -10,6 +10,7 @@ #include "base/compiler_specific.h" #include "base/logging.h" #include "base/task/promise/abstract_promise.h" +#include "base/task/promise/helpers.h" #include "base/threading/post_task_and_reply_impl.h" namespace base { @@ -40,40 +41,8 @@ bool PostTaskAndReplyTaskRunner::PostTask(const Location& from_here, return destination_->PostTask(from_here, std::move(task)); } -// TODO(alexclarke): Remove this when TaskRunner::PostPromiseInternal becomes -// pure virtual. -class PromiseHolder { - public: - explicit PromiseHolder(scoped_refptr<internal::AbstractPromise> promise) - : promise_(std::move(promise)) {} - - ~PromiseHolder() { - // Detect if the promise was not executed and if so cancel to ensure memory - // is released. - if (promise_) - promise_->OnCanceled(); - } - - PromiseHolder(PromiseHolder&& other) : promise_(std::move(other.promise_)) {} - - scoped_refptr<internal::AbstractPromise> Unwrap() const { - return std::move(promise_); - } - - private: - mutable scoped_refptr<internal::AbstractPromise> promise_; -}; - } // namespace -template <> -struct BindUnwrapTraits<PromiseHolder> { - static scoped_refptr<internal::AbstractPromise> Unwrap( - const PromiseHolder& o) { - return o.Unwrap(); - } -}; - bool TaskRunner::PostTask(const Location& from_here, OnceClosure task) { return PostDelayedTask(from_here, std::move(task), base::TimeDelta()); } @@ -88,10 +57,10 @@ bool TaskRunner::PostTaskAndReply(const Location& from_here, bool TaskRunner::PostPromiseInternal( const scoped_refptr<internal::AbstractPromise>& promise, base::TimeDelta delay) { - return PostDelayedTask( - promise->from_here(), - BindOnce(&internal::AbstractPromise::Execute, PromiseHolder(promise)), - delay); + return PostDelayedTask(promise->from_here(), + BindOnce(&internal::AbstractPromise::Execute, + internal::PromiseHolder(promise)), + delay); } TaskRunner::TaskRunner() = default; |