Chromium Code Reviews| Index: chrome/browser/android/data_usage/data_use_tab_model_unittest.cc |
| diff --git a/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc b/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc |
| index f2bf80006ca4b630a8cea6537f7ef91393b09110..431d983ec20f8716090e3dc95e43f56c8341e6d5 100644 |
| --- a/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc |
| +++ b/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc |
| @@ -8,6 +8,7 @@ |
| #include <string> |
| +#include "base/memory/weak_ptr.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/time/time.h" |
| @@ -123,8 +124,16 @@ class DataUseTabModelTest : public testing::Test { |
| // Mock observer to track the calls to start and end tracking events. |
| class MockTabDataUseObserver : public DataUseTabModel::TabDataUseObserver { |
| public: |
| + MockTabDataUseObserver() : weak_ptr_factory_(this) {} |
| MOCK_METHOD1(NotifyTrackingStarting, void(int32_t tab_id)); |
| MOCK_METHOD1(NotifyTrackingEnding, void(int32_t tab_id)); |
| + |
| + base::WeakPtr<MockTabDataUseObserver> GetWeakPtr() { |
| + return weak_ptr_factory_.GetWeakPtr(); |
| + } |
| + |
| + private: |
| + base::WeakPtrFactory<MockTabDataUseObserver> weak_ptr_factory_; |
|
sclittle
2015/11/20 22:50:54
You should DISALLOW_COPY_AND_ASSIGN, since it does
tbansal1
2015/11/23 17:52:22
Done.
|
| }; |
| // Starts and ends tracking a single tab and checks if its label is returned |
| @@ -192,7 +201,8 @@ TEST_F(DataUseTabModelTest, ObserverStartEndEvents) { |
| EXPECT_CALL(mock_observer, NotifyTrackingStarting(kTabID1)).Times(1); |
| EXPECT_CALL(mock_observer, NotifyTrackingEnding(kTabID1)).Times(1); |
| - data_use_tab_model_.AddObserver(&mock_observer); |
| + data_use_tab_model_.AddObserver(&mock_observer, mock_observer.GetWeakPtr()); |
| + EXPECT_EQ(1U, data_use_tab_model_.active_tabs_.size()); |
| data_use_tab_model_.StartTrackingDataUse(kTabID1, kTestLabel1); |
| data_use_tab_model_.EndTrackingDataUse(kTabID1); |
| @@ -203,10 +213,14 @@ TEST_F(DataUseTabModelTest, ObserverStartEndEvents) { |
| // multiple tabs. |
| TEST_F(DataUseTabModelTest, MultipleObserverMultipleStartEndEvents) { |
| MockTabDataUseObserver mock_observers[kMaxMockObservers]; |
| + size_t expected_observer_count = 0; |
| + EXPECT_EQ(expected_observer_count, data_use_tab_model_.active_tabs_.size()); |
| for (auto& mock_observer : mock_observers) { |
| // Add the observer. |
| - data_use_tab_model_.AddObserver(&mock_observer); |
| + data_use_tab_model_.AddObserver(&mock_observer, mock_observer.GetWeakPtr()); |
| + ++expected_observer_count; |
| + EXPECT_EQ(expected_observer_count, data_use_tab_model_.active_tabs_.size()); |
| // Expect start and end events for tab ids 1-3. |
| EXPECT_CALL(mock_observer, NotifyTrackingStarting(kTabID1)).Times(1); |
| @@ -226,6 +240,14 @@ TEST_F(DataUseTabModelTest, MultipleObserverMultipleStartEndEvents) { |
| data_use_tab_model_.EndTrackingDataUse(kTabID3); |
| message_loop_.RunUntilIdle(); |
| + |
| + for (auto& mock_observer : mock_observers) { |
| + // Remove the observer. |
| + data_use_tab_model_.RemoveObserver(&mock_observer); |
| + --expected_observer_count; |
| + EXPECT_EQ(expected_observer_count, data_use_tab_model_.active_tabs_.size()); |
| + } |
| + EXPECT_EQ(0U, data_use_tab_model_.active_tabs_.size()); |
| } |
| // Checks that the observer is not notified of start and end events after |
| @@ -237,7 +259,9 @@ TEST_F(DataUseTabModelTest, ObserverNotNotifiedAfterRemove) { |
| EXPECT_CALL(mock_observer, NotifyTrackingStarting(kTabID1)).Times(1); |
| EXPECT_CALL(mock_observer, NotifyTrackingEnding(kTabID1)).Times(1); |
| - data_use_tab_model_.AddObserver(&mock_observer); |
| + EXPECT_EQ(0U, data_use_tab_model_.active_tabs_.size()); |
| + data_use_tab_model_.AddObserver(&mock_observer, mock_observer.GetWeakPtr()); |
| + EXPECT_EQ(1U, data_use_tab_model_.active_tabs_.size()); |
| data_use_tab_model_.StartTrackingDataUse(kTabID1, kTestLabel1); |
| data_use_tab_model_.EndTrackingDataUse(kTabID1); |
| @@ -249,6 +273,7 @@ TEST_F(DataUseTabModelTest, ObserverNotNotifiedAfterRemove) { |
| EXPECT_CALL(mock_observer, NotifyTrackingEnding(kTabID1)).Times(0); |
| data_use_tab_model_.RemoveObserver(&mock_observer); |
| + EXPECT_EQ(0U, data_use_tab_model_.active_tabs_.size()); |
| data_use_tab_model_.StartTrackingDataUse(kTabID1, kTestLabel1); |
| data_use_tab_model_.EndTrackingDataUse(kTabID1); |