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

Unified Diff: chrome/browser/android/data_usage/data_use_tab_model_unittest.cc

Issue 1443683002: Notify DataUseTabModel of navigations and tab closures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed bengr comments Created 5 years, 1 month 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: 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 70777f6451d0c0346df7c7921d035ff7f3e17786..f7ebe7c477ab447ed39afbf4577e9314bc73b5ba 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,17 +8,21 @@
#include <string>
+#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/stringprintf.h"
#include "base/test/histogram_tester.h"
#include "base/time/time.h"
#include "chrome/browser/android/data_usage/external_data_use_observer.h"
#include "chrome/browser/android/data_usage/tab_data_use_entry.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/data_usage/core/data_use.h"
#include "components/data_usage/core/data_use_aggregator.h"
#include "components/data_usage/core/data_use_amortizer.h"
#include "components/data_usage/core/data_use_annotator.h"
+#include "content/public/browser/browser_thread.h"
#include "net/base/network_change_notifier.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -71,20 +75,27 @@ class DataUseTabModelNowTest : public DataUseTabModel {
base::TimeDelta now_offset_;
};
-class DataUseTabModelTest : public testing::Test {
+class DataUseTabModelTest : public ChromeRenderViewHostTestHarness {
public:
DataUseTabModelTest() {}
protected:
void SetUp() override {
+ ChromeRenderViewHostTestHarness::SetUp();
+
data_use_aggregator_.reset(new data_usage::DataUseAggregator(
scoped_ptr<data_usage::DataUseAnnotator>(),
scoped_ptr<data_usage::DataUseAmortizer>()));
data_use_observer_.reset(new ExternalDataUseObserver(
- data_use_aggregator_.get(), message_loop_.task_runner().get(),
- message_loop_.task_runner().get()));
+ data_use_aggregator_.get(),
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::IO),
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::UI)));
data_use_tab_model_ = new DataUseTabModelNowTest(
- data_use_observer_.get(), message_loop_.task_runner().get());
+ data_use_observer_.get(),
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::UI));
// |data_use_tab_model_| will be owned by |data_use_observer_|.
data_use_observer_->data_use_tab_model_.reset(data_use_tab_model_);
@@ -174,14 +185,25 @@ class DataUseTabModelTest : public testing::Test {
// Pointer to the tab model within and owned by ExternalDataUseObserver.
DataUseTabModelNowTest* data_use_tab_model_;
- base::MessageLoop message_loop_;
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DataUseTabModelTest);
};
// 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_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockTabDataUseObserver);
};
// Starts and ends tracking a single tab and checks if its label is returned
@@ -249,21 +271,27 @@ 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_->observers_.size());
StartTrackingDataUse(kTabID1, kTestLabel1);
EndTrackingDataUse(kTabID1);
- message_loop_.RunUntilIdle();
+ base::RunLoop().RunUntilIdle();
}
// Checks that multiple mock observers receive start and end tracking events for
// 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_->observers_.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_->observers_.size());
// Expect start and end events for tab ids 1-3.
EXPECT_CALL(mock_observer, NotifyTrackingStarting(kTabID1)).Times(1);
@@ -282,7 +310,15 @@ TEST_F(DataUseTabModelTest, MultipleObserverMultipleStartEndEvents) {
EndTrackingDataUse(kTabID2);
EndTrackingDataUse(kTabID3);
- message_loop_.RunUntilIdle();
+ base::RunLoop().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_->observers_.size());
+ }
+ EXPECT_EQ(0U, data_use_tab_model_->observers_.size());
}
// Checks that the observer is not notified of start and end events after
@@ -294,11 +330,13 @@ 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_->observers_.size());
+ data_use_tab_model_->AddObserver(&mock_observer, mock_observer.GetWeakPtr());
+ EXPECT_EQ(1U, data_use_tab_model_->observers_.size());
StartTrackingDataUse(kTabID1, kTestLabel1);
EndTrackingDataUse(kTabID1);
- message_loop_.RunUntilIdle();
+ base::RunLoop().RunUntilIdle();
testing::Mock::VerifyAndClear(&mock_observer);
// Observer should not be notified after RemoveObserver.
@@ -306,10 +344,11 @@ 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_->observers_.size());
StartTrackingDataUse(kTabID1, kTestLabel1);
EndTrackingDataUse(kTabID1);
- message_loop_.RunUntilIdle();
+ base::RunLoop().RunUntilIdle();
}
// Checks that tab close event updates the close time of the tab entry.
@@ -348,7 +387,7 @@ TEST_F(DataUseTabModelTest, OnTrackingLabelRemoved) {
StartTrackingDataUse(kTabID1, kTestLabel1);
StartTrackingDataUse(kTabID2, kTestLabel2);
StartTrackingDataUse(kTabID3, kTestLabel3);
- data_use_tab_model_->AddObserver(&mock_observer);
+ data_use_tab_model_->AddObserver(&mock_observer, mock_observer.GetWeakPtr());
ExpectTabEntrySize(TabEntrySize::THREE);
EXPECT_TRUE(IsTrackingDataUse(kTabID1));
@@ -359,7 +398,7 @@ TEST_F(DataUseTabModelTest, OnTrackingLabelRemoved) {
EXPECT_CALL(mock_observer, NotifyTrackingEnding(kTabID2)).Times(1);
data_use_tab_model_->OnTrackingLabelRemoved(kTestLabel2);
- message_loop_.RunUntilIdle();
+ base::RunLoop().RunUntilIdle();
EXPECT_TRUE(IsTrackingDataUse(kTabID1));
EXPECT_FALSE(IsTrackingDataUse(kTabID2));
@@ -368,7 +407,7 @@ TEST_F(DataUseTabModelTest, OnTrackingLabelRemoved) {
EXPECT_CALL(mock_observer, NotifyTrackingEnding(kTabID3)).Times(1);
data_use_tab_model_->OnTrackingLabelRemoved(kTestLabel3);
- message_loop_.RunUntilIdle();
+ base::RunLoop().RunUntilIdle();
EXPECT_TRUE(IsTrackingDataUse(kTabID1));
EXPECT_FALSE(IsTrackingDataUse(kTabID2));
@@ -558,11 +597,6 @@ TEST_F(DataUseTabModelTest, NavigationEnterAndExitEvent) {
GURL("http://foo.com/"), std::string());
ExpectTabEntrySize(TabEntrySize::ONE);
EXPECT_TRUE(IsTrackingDataUse(kTabID1));
-
- data_use_tab_model_->OnNavigationEvent(
- kTabID1, DataUseTabModel::TRANSITION_FROM_NAVSUGGEST, GURL(),
- std::string());
- EXPECT_FALSE(IsTrackingDataUse(kTabID1));
}
// Tests that any of the Enter transition events start the tracking.
@@ -611,9 +645,6 @@ TEST_F(DataUseTabModelTest, AllNavigationEnterEvents) {
// Tests that any of the Exit transition events end the tracking.
TEST_F(DataUseTabModelTest, AllNavigationExitEvents) {
DataUseTabModel::TransitionType all_exit_transitions[] = {
- DataUseTabModel::TRANSITION_TO_EXTERNAL_APP,
- DataUseTabModel::TRANSITION_FROM_NAVSUGGEST,
- DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION,
DataUseTabModel::TRANSITION_BOOKMARK,
DataUseTabModel::TRANSITION_HISTORY_ITEM};
std::vector<std::string> app_package_names, domain_regexes, labels;

Powered by Google App Engine
This is Rietveld 408576698