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

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 sclittle 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..b2d35a4e35e2bb71525e3137d2cacc12c14b1ddf 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
@@ -4,21 +4,24 @@
#include "chrome/browser/android/data_usage/data_use_tab_model.h"
sclittle 2015/11/24 04:11:51 You still need <stdint.h> for the int32_t's used i
tbansal1 2015/11/24 20:01:12 Done.
-#include <stdint.h>
-
#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 "components/sessions/core/session_id.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,27 +74,34 @@ 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_);
}
// Returns true if tab entry for |tab_id| exists in |active_tabs_|.
- bool IsTabEntryExists(int32_t tab_id) const {
+ bool IsTabEntryExists(SessionID::id_type tab_id) const {
return data_use_tab_model_->active_tabs_.find(tab_id) !=
data_use_tab_model_->active_tabs_.end();
}
@@ -104,7 +114,7 @@ class DataUseTabModelTest : public testing::Test {
// Returns true if the tracking session for tab with id |tab_id| is currently
// active.
- bool IsTrackingDataUse(int32_t tab_id) const {
+ bool IsTrackingDataUse(SessionID::id_type tab_id) const {
auto tab_entry_iterator = data_use_tab_model_->active_tabs_.find(tab_id);
if (tab_entry_iterator == data_use_tab_model_->active_tabs_.end())
return false;
@@ -113,21 +123,21 @@ class DataUseTabModelTest : public testing::Test {
// Checks if the DataUse object for the given |tab_id| with request start time
// |at_time| is labeled as an empty string.
- void ExpectEmptyDataUseLabelAtTime(int32_t tab_id,
+ void ExpectEmptyDataUseLabelAtTime(SessionID::id_type tab_id,
const base::TimeTicks& at_time) const {
ExpectDataUseLabelAtTimeWithReturn(tab_id, at_time, false, std::string());
}
// Checks if the DataUse object for the given |tab_id| is labeled as an empty
// string.
- void ExpectEmptyDataUseLabel(int32_t tab_id) const {
+ void ExpectEmptyDataUseLabel(SessionID::id_type tab_id) const {
ExpectDataUseLabelAtTimeWithReturn(tab_id, base::TimeTicks::Now(), false,
std::string());
}
// Checks if the DataUse object for given |tab_id| is labeled as
// |expected_label|.
- void ExpectDataUseLabel(int32_t tab_id,
+ void ExpectDataUseLabel(SessionID::id_type tab_id,
const std::string& expected_label) const {
ExpectDataUseLabelAtTimeWithReturn(tab_id, base::TimeTicks::Now(), true,
expected_label);
@@ -137,7 +147,7 @@ class DataUseTabModelTest : public testing::Test {
// request start time |at_time|, as |expected_label| and returns
// |expected_return|.
void ExpectDataUseLabelAtTimeWithReturn(
- int32_t tab_id,
+ SessionID::id_type tab_id,
const base::TimeTicks& at_time,
bool expected_return,
const std::string& expected_label) const {
@@ -152,11 +162,12 @@ class DataUseTabModelTest : public testing::Test {
EXPECT_EQ(expected_label, actual_label);
}
- void StartTrackingDataUse(int32_t tab_id, const std::string& label) {
+ void StartTrackingDataUse(SessionID::id_type tab_id,
+ const std::string& label) {
data_use_tab_model_->StartTrackingDataUse(tab_id, label);
}
- void EndTrackingDataUse(int32_t tab_id) {
+ void EndTrackingDataUse(SessionID::id_type tab_id) {
data_use_tab_model_->EndTrackingDataUse(tab_id);
}
@@ -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:
- MOCK_METHOD1(NotifyTrackingStarting, void(int32_t tab_id));
- MOCK_METHOD1(NotifyTrackingEnding, void(int32_t tab_id));
+ MockTabDataUseObserver() : weak_ptr_factory_(this) {}
+ MOCK_METHOD1(NotifyTrackingStarting, void(SessionID::id_type tab_id));
+ MOCK_METHOD1(NotifyTrackingEnding, void(SessionID::id_type 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));
@@ -378,8 +417,9 @@ TEST_F(DataUseTabModelTest, OnTrackingLabelRemoved) {
// Checks that |active_tabs_| does not grow beyond GetMaxTabEntriesForTests tab
// entries.
TEST_F(DataUseTabModelTest, CompactTabEntriesWithinMaxLimit) {
- const size_t max_tab_entries = data_use_tab_model_->max_tab_entries_;
- uint32_t tab_id = 1;
+ const int32_t max_tab_entries =
+ static_cast<int32_t>(data_use_tab_model_->max_tab_entries_);
+ SessionID::id_type tab_id = 1;
ExpectTabEntrySize(TabEntrySize::ZERO);
@@ -392,7 +432,8 @@ TEST_F(DataUseTabModelTest, CompactTabEntriesWithinMaxLimit) {
++tab_id;
}
- uint32_t oldest_tab_id = 1; // oldest tab entry that will be removed first.
+ SessionID::id_type oldest_tab_id =
+ 1; // oldest tab entry that will be removed first.
// Starting and ending more tracking tab entries does not increase the size of
// |active_tabs_|.
@@ -461,8 +502,9 @@ TEST_F(DataUseTabModelTest, UnexpiredTabEntryRemovaltimeHistogram) {
const char kUMAUnexpiredTabEntryRemovalDurationMinutesHistogram[] =
"DataUse.TabModel.UnexpiredTabEntryRemovalDuration";
base::HistogramTester histogram_tester;
- const size_t max_tab_entries = data_use_tab_model_->max_tab_entries_;
- uint32_t tab_id = 1;
+ const int32_t max_tab_entries =
+ static_cast<int32_t>(data_use_tab_model_->max_tab_entries_);
+ SessionID::id_type tab_id = 1;
while (tab_id <= max_tab_entries) {
std::string tab_label = base::StringPrintf("label_%d", tab_id);
@@ -558,11 +600,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.
@@ -581,7 +618,7 @@ TEST_F(DataUseTabModelTest, AllNavigationEnterEvents) {
std::string(), kTestLabel2},
};
std::vector<std::string> app_package_names, domain_regexes, labels;
- int32_t tab_id = 1;
+ SessionID::id_type tab_id = 1;
app_package_names.push_back("com.google.package.foo");
domain_regexes.push_back(std::string());
@@ -611,13 +648,10 @@ 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;
- int32_t tab_id = 1;
+ SessionID::id_type tab_id = 1;
app_package_names.push_back(std::string());
domain_regexes.push_back("http://foo.com/");

Powered by Google App Engine
This is Rietveld 408576698