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

Unified Diff: base/observer_list_unittest.cc

Issue 8919: Adds the ability for ObserverList to not notify observers added during... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 2 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
Index: base/observer_list_unittest.cc
===================================================================
--- base/observer_list_unittest.cc (revision 4210)
+++ base/observer_list_unittest.cc (working copy)
@@ -60,6 +60,26 @@
Foo* doomed_;
};
+class AddInObserve : public Foo {
+ public:
+ AddInObserve(ObserverList<Foo>* observer_list)
+ : added(false),
+ observer_list(observer_list),
+ adder(1) {
+ }
+ virtual void Observe(int x) {
+ if (!added) {
+ added = true;
+ observer_list->AddObserver(&adder);
+ }
+ }
+
+ bool added;
+ ObserverList<Foo>* observer_list;
+ Adder adder;
+};
+
+
class ObserverListThreadSafeTest : public testing::Test {
};
@@ -262,3 +282,23 @@
// the main thread and all 3 observer threads.
ThreadSafeObserverHarness(3, true);
}
+
+TEST(ObserverListTest, Existing) {
+ ObserverList<Foo> observer_list(ObserverList<Foo>::NOTIFY_EXISTING_ONLY);
+ Adder a(1);
+ AddInObserve b(&observer_list);
+
+ observer_list.AddObserver(&a);
+ observer_list.AddObserver(&b);
+
+ FOR_EACH_OBSERVER(Foo, observer_list, Observe(1));
+
+ EXPECT_TRUE(b.added);
+ // B's adder should not have been notified because it was added during
+ // notificaiton.
+ EXPECT_EQ(0, b.adder.total);
+
+ // Notify again to make sure b's adder is notified.
+ FOR_EACH_OBSERVER(Foo, observer_list, Observe(1));
+ EXPECT_EQ(1, b.adder.total);
+}

Powered by Google App Engine
This is Rietveld 408576698