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); |