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 |