Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10393)

Unified Diff: base/memory/weak_ptr_unittest.cc

Issue 20777008: Remove obsolete WeakPtr hack. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/memory/weak_ptr.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/weak_ptr_unittest.cc
diff --git a/base/memory/weak_ptr_unittest.cc b/base/memory/weak_ptr_unittest.cc
index be3b6dbf6d1e6104435bc8a29e1cbda42621e946..ab3480c8057ec278ed15aa698f319b2e4d17dfc9 100644
--- a/base/memory/weak_ptr_unittest.cc
+++ b/base/memory/weak_ptr_unittest.cc
@@ -336,45 +336,63 @@ TEST(WeakPtrTest, MoveOwnershipImplicitly) {
background.DeleteArrow(arrow);
}
-TEST(WeakPtrTest, MoveOwnershipExplicitlyObjectNotReferenced) {
- // Case 1: The target is not bound to any thread yet. So calling
- // DetachFromThread() is a no-op.
- Target target;
- target.DetachFromThreadHack();
-
- // Case 2: The target is bound to main thread but no WeakPtr is pointing to
- // it. In this case, it will be re-bound to any thread trying to get a
- // WeakPtr pointing to it. So detach function call is again no-op.
- {
- WeakPtr<Target> weak_ptr = target.AsWeakPtr();
- }
- target.DetachFromThreadHack();
-}
-
-TEST(WeakPtrTest, MoveOwnershipExplicitly) {
+TEST(WeakPtrTest, MoveOwnershipOfUnreferencedObject) {
BackgroundThread background;
background.Start();
Arrow* arrow;
{
Target target;
- // Background thread creates WeakPtr(and implicitly owns the object).
+ // Background thread creates WeakPtr.
background.CreateArrowFromTarget(&arrow, &target);
+
+ // Bind to background thread.
EXPECT_EQ(&target, background.DeRef(arrow));
- // Detach from background thread.
- target.DetachFromThreadHack();
+ // Release the only WeakPtr.
+ arrow->target.reset();
+
+ // Now we should be able to create a new reference from this thread.
+ arrow->target = target.AsWeakPtr();
// Re-bind to main thread.
EXPECT_EQ(&target, arrow->target.get());
- // Main thread can now delete the target.
+ // And the main thread can now delete the target.
}
// WeakPtr can be deleted on non-owner thread.
background.DeleteArrow(arrow);
Wez 2013/08/01 21:09:10 nit: This doesn't feel like it belongs in this tes
no sievers 2013/08/02 22:24:09 Done. NonOwnerThreadCanDeleteWeakPtr already cover
}
+TEST(WeakPtrTest, MoveOwnershipAfterInvalidate) {
+ BackgroundThread background;
+ background.Start();
+
+ Arrow arrow;
+ {
+ Target* target = new Target;
no sievers 2013/08/01 20:57:59 I could add some plumbing in Background to avoid i
Wez 2013/08/01 21:09:10 You can create a Target, wrap it with a WeakPtrFac
Wez 2013/08/01 21:09:10 nit: scoped_ptr<Target> target = new Target, and t
no sievers 2013/08/02 22:24:09 Done.
+ WeakPtrFactory<Target> factory(target);
+
+ // Bind to main thread.
+ arrow.target = factory.GetWeakPtr();
+ EXPECT_EQ(target, arrow.target.get());
+
+ factory.InvalidateWeakPtrs();
+ EXPECT_EQ(NULL, arrow.target.get());
+
+ arrow.target = factory.GetWeakPtr();
+ // Re-bind to background thread.
+ EXPECT_EQ(target, background.DeRef(&arrow));
+
+ // And the background thread can now delete the target.
+ background.DeleteTarget(target);
+
+ // Make sure we can delete the factory on the main thread.
Wez 2013/08/01 21:09:10 This code's not deleting the factory, it's droppin
+ arrow.target.reset();
no sievers 2013/08/01 20:57:59 This wouldn't be needed if I made the test the opp
Wez 2013/08/01 21:09:10 Why is it needed at all? It's just clearing the We
no sievers 2013/08/01 21:15:12 Because the factory's flag is now bound to the bac
+ }
+}
+
TEST(WeakPtrTest, MainThreadRefOutlivesBackgroundThreadRef) {
// Originating thread has a WeakPtr that outlives others.
// - Main thread creates a WeakPtr
« no previous file with comments | « base/memory/weak_ptr.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698