| Index: base/callback_unittest.cc
|
| diff --git a/base/callback_unittest.cc b/base/callback_unittest.cc
|
| index f0f3915a2cb8ce2e5c84e7c9ce13bd56a3839d78..2c2bef1a13748f11d300953a9e6e99f62f5c27ca 100644
|
| --- a/base/callback_unittest.cc
|
| +++ b/base/callback_unittest.cc
|
| @@ -6,6 +6,7 @@
|
| #include "base/callback.h"
|
| #include "base/callback_helpers.h"
|
| #include "base/callback_internal.h"
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -145,5 +146,36 @@ TEST_F(CallbackTest, ResetAndReturn) {
|
| ASSERT_TRUE(tfr.cb_already_run);
|
| }
|
|
|
| +class CallbackOwner : public base::RefCounted<CallbackOwner> {
|
| + public:
|
| + CallbackOwner(bool* deleted) {
|
| + callback_ = Bind(&CallbackOwner::Unused, this);
|
| + deleted_ = deleted;
|
| + }
|
| + void Reset() {
|
| + callback_.Reset();
|
| + // We are deleted here if no-one else had a ref to us.
|
| + }
|
| +
|
| + private:
|
| + friend class base::RefCounted<CallbackOwner>;
|
| + virtual ~CallbackOwner() {
|
| + *deleted_ = true;
|
| + }
|
| + void Unused() {
|
| + FAIL() << "Should never be called";
|
| + }
|
| +
|
| + Closure callback_;
|
| + bool* deleted_;
|
| +};
|
| +
|
| +TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject) {
|
| + bool deleted = false;
|
| + CallbackOwner* owner = new CallbackOwner(&deleted);
|
| + owner->Reset();
|
| + ASSERT_TRUE(deleted);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace base
|
|
|