| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/observer_list.h" | 5 #include "base/observer_list.h" |
| 6 #include "base/observer_list_threadsafe.h" | 6 #include "base/observer_list_threadsafe.h" |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 static const int kThreadRunTime = 2000; // ms to run the multi-threaded test. | 94 static const int kThreadRunTime = 2000; // ms to run the multi-threaded test. |
| 95 | 95 |
| 96 // A thread for use in the ThreadSafeObserver test | 96 // A thread for use in the ThreadSafeObserver test |
| 97 // which will add and remove itself from the notification | 97 // which will add and remove itself from the notification |
| 98 // list repeatedly. | 98 // list repeatedly. |
| 99 class AddRemoveThread : public PlatformThread::Delegate, | 99 class AddRemoveThread : public PlatformThread::Delegate, |
| 100 public Foo { | 100 public Foo { |
| 101 public: | 101 public: |
| 102 AddRemoveThread(ObserverListThreadSafe<Foo>* list, bool notify) | 102 AddRemoveThread(ObserverListThreadSafe<Foo>* list, bool notify) |
| 103 : list_(list), | 103 : list_(list), |
| 104 loop_(NULL), |
| 104 in_list_(false), | 105 in_list_(false), |
| 105 start_(Time::Now()), | 106 start_(Time::Now()), |
| 106 count_observes_(0), | 107 count_observes_(0), |
| 107 count_addtask_(0), | 108 count_addtask_(0), |
| 108 do_notifies_(notify), | 109 do_notifies_(notify), |
| 109 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 110 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| 110 } | 111 } |
| 111 | 112 |
| 112 virtual ~AddRemoveThread() { | 113 virtual ~AddRemoveThread() { |
| 113 } | 114 } |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 } | 523 } |
| 523 | 524 |
| 524 class ListDestructor : public Foo { | 525 class ListDestructor : public Foo { |
| 525 public: | 526 public: |
| 526 explicit ListDestructor(ObserverList<Foo>* list) : list_(list) {} | 527 explicit ListDestructor(ObserverList<Foo>* list) : list_(list) {} |
| 527 virtual ~ListDestructor() {} | 528 virtual ~ListDestructor() {} |
| 528 | 529 |
| 529 virtual void Observe(int x) OVERRIDE { | 530 virtual void Observe(int x) OVERRIDE { |
| 530 delete list_; | 531 delete list_; |
| 531 } | 532 } |
| 532 int total; | 533 |
| 533 private: | 534 private: |
| 534 ObserverList<Foo>* list_; | 535 ObserverList<Foo>* list_; |
| 535 }; | 536 }; |
| 536 | 537 |
| 537 | 538 |
| 538 TEST(ObserverListTest, IteratorOutlivesList) { | 539 TEST(ObserverListTest, IteratorOutlivesList) { |
| 539 ObserverList<Foo>* observer_list = new ObserverList<Foo>; | 540 ObserverList<Foo>* observer_list = new ObserverList<Foo>; |
| 540 ListDestructor a(observer_list); | 541 ListDestructor a(observer_list); |
| 541 observer_list->AddObserver(&a); | 542 observer_list->AddObserver(&a); |
| 542 | 543 |
| 543 FOR_EACH_OBSERVER(Foo, *observer_list, Observe(0)); | 544 FOR_EACH_OBSERVER(Foo, *observer_list, Observe(0)); |
| 544 // If this test fails, there'll be Valgrind errors when this function goes out | 545 // If this test fails, there'll be Valgrind errors when this function goes out |
| 545 // of scope. | 546 // of scope. |
| 546 } | 547 } |
| 547 | 548 |
| 548 } // namespace | 549 } // namespace |
| OLD | NEW |