diff options
Diffstat (limited to 'base/memory/ref_counted_delete_on_message_loop.h')
-rw-r--r-- | base/memory/ref_counted_delete_on_message_loop.h | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/base/memory/ref_counted_delete_on_message_loop.h b/base/memory/ref_counted_delete_on_message_loop.h deleted file mode 100644 index de194e8479..0000000000 --- a/base/memory/ref_counted_delete_on_message_loop.h +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2013 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. - -#ifndef BASE_MEMORY_REF_COUNTED_DELETE_ON_MESSAGE_LOOP_H_ -#define BASE_MEMORY_REF_COUNTED_DELETE_ON_MESSAGE_LOOP_H_ - -#include "base/location.h" -#include "base/logging.h" -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/single_thread_task_runner.h" - -namespace base { - -// RefCountedDeleteOnMessageLoop is similar to RefCountedThreadSafe, and ensures -// that the object will be deleted on a specified message loop. -// -// Sample usage: -// class Foo : public RefCountedDeleteOnMessageLoop<Foo> { -// -// Foo(scoped_refptr<SingleThreadTaskRunner> loop) -// : RefCountedDeleteOnMessageLoop<Foo>(std::move(loop)) {} -// ... -// private: -// friend class RefCountedDeleteOnMessageLoop<Foo>; -// friend class DeleteHelper<Foo>; -// -// ~Foo(); -// }; - -// TODO(skyostil): Rename this to RefCountedDeleteOnTaskRunner. -template <class T> -class RefCountedDeleteOnMessageLoop : public subtle::RefCountedThreadSafeBase { - public: - // This constructor will accept a MessageL00pProxy object, but new code should - // prefer a SingleThreadTaskRunner. A SingleThreadTaskRunner for the - // MessageLoop on the current thread can be acquired by calling - // MessageLoop::current()->task_runner(). - RefCountedDeleteOnMessageLoop( - scoped_refptr<SingleThreadTaskRunner> task_runner) - : task_runner_(std::move(task_runner)) { - DCHECK(task_runner_); - } - - void AddRef() const { - subtle::RefCountedThreadSafeBase::AddRef(); - } - - void Release() const { - if (subtle::RefCountedThreadSafeBase::Release()) - DestructOnMessageLoop(); - } - - protected: - friend class DeleteHelper<RefCountedDeleteOnMessageLoop>; - ~RefCountedDeleteOnMessageLoop() {} - - void DestructOnMessageLoop() const { - const T* t = static_cast<const T*>(this); - if (task_runner_->BelongsToCurrentThread()) - delete t; - else - task_runner_->DeleteSoon(FROM_HERE, t); - } - - scoped_refptr<SingleThreadTaskRunner> task_runner_; - - private: - DISALLOW_COPY_AND_ASSIGN(RefCountedDeleteOnMessageLoop); -}; - -} // namespace base - -#endif // BASE_MEMORY_REF_COUNTED_DELETE_ON_MESSAGE_LOOP_H_ |