| Index: base/memory/weak_ptr_unittest.cc
|
| diff --git a/base/memory/weak_ptr_unittest.cc b/base/memory/weak_ptr_unittest.cc
|
| index 6c2a7e8dcbc5eb9e8c5091cae3848b76063555da..55f7428c92e769cc54ea665ea56c42cc31443032 100644
|
| --- a/base/memory/weak_ptr_unittest.cc
|
| +++ b/base/memory/weak_ptr_unittest.cc
|
| @@ -6,6 +6,7 @@
|
| #include "base/memory/weak_ptr.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "base/message_loop.h"
|
| +#include "base/task.h"
|
| #include "base/threading/thread.h"
|
|
|
| namespace base {
|
| @@ -38,8 +39,6 @@ struct Derived : Base {};
|
| struct Producer : SupportsWeakPtr<Producer> {};
|
| struct Consumer { WeakPtr<Producer> producer; };
|
|
|
| -} // namespace
|
| -
|
| TEST(WeakPtrTest, Basic) {
|
| int data;
|
| WeakPtrFactory<int> factory(&data);
|
| @@ -134,4 +133,20 @@ TEST(WeakPtrTest, SingleThreaded2) {
|
| EXPECT_EQ(&producer, consumer->producer.get());
|
| }
|
|
|
| +TEST(WeakPtrTest, DeleteWeakPtrOnDifferentThread) {
|
| + Producer producer;
|
| + {
|
| + WeakPtr<Producer>* ptr = new WeakPtr<Producer>(producer.AsWeakPtr());
|
| + Thread thread("I delete WeakPtrs, w00t!");
|
| + thread.Start();
|
| + thread.message_loop()->PostTask(FROM_HERE,
|
| + new DeleteTask<WeakPtr<Producer> >(ptr));
|
| + // |thread| will be joined on destruction.
|
| + }
|
| + WeakPtr<Producer> weak_ptr = producer.AsWeakPtr();
|
| + EXPECT_TRUE(weak_ptr.get() != NULL);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| } // namespace base
|
|
|