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

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

Issue 1837223002: Buffer UI navigation events in DataUseTabModel until rule fetch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed tbansal comments Created 4 years, 9 months 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/external_data_use_observer_unittest.cc
diff --git a/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc b/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc
index ae69a61d597d961c89b3d0ad07a4edfa1725af1c..86b732607351f09c2ac748abfc8b64368c0ac081 100644
--- a/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc
+++ b/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc
@@ -390,7 +390,8 @@ TEST_F(ExternalDataUseObserverTest, PeriodicFetchMatchingRules) {
// fetched.
TEST_F(ExternalDataUseObserverTest, MatchingRuleFetchOnControlAppInstall) {
{
- // Matching rules not fetched on navigation if control app is not installed.
+ // Matching rules not fetched on navigation if control app is not installed,
+ // and navigation events will be buffered.
external_data_use_observer()->last_matching_rules_fetch_time_ =
base::TimeTicks();
external_data_use_observer()
@@ -401,6 +402,10 @@ TEST_F(ExternalDataUseObserverTest, MatchingRuleFetchOnControlAppInstall) {
std::string());
base::RunLoop().RunUntilIdle();
histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 0);
+ EXPECT_EQ(1, external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_->size());
+ external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_->clear();
}
{
@@ -410,6 +415,8 @@ TEST_F(ExternalDataUseObserverTest, MatchingRuleFetchOnControlAppInstall) {
->data_use_tab_model_->OnControlAppInstallStateChange(true);
base::RunLoop().RunUntilIdle();
histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 1);
+ EXPECT_FALSE(external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_.get());
}
{
@@ -638,6 +645,72 @@ TEST_F(ExternalDataUseObserverTest, DataUseReportTimedOut) {
histogram_tester.ExpectTotalCount(kUMAReportSubmissionDurationHistogram, 0);
}
+// Tests that UI navigation events are buffered until control app not installed
+// callback is received.
+TEST_F(ExternalDataUseObserverTest,
+ ProcessBufferedNavigationEventsAfterControlAppNotInstalled) {
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent(
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL),
+ std::string());
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent(
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL),
+ std::string());
+ EXPECT_EQ(2, external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_->size());
+ external_data_use_observer()
+ ->data_use_tab_model_->OnControlAppInstallStateChange(false);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_FALSE(external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_.get());
+}
+
+// Tests that UI navigation events are buffered until control app is installed
+// and matching rules are fetched.
+TEST_F(ExternalDataUseObserverTest,
+ ProcessBufferedNavigationEventsAfterRuleFetch) {
+ external_data_use_observer()->data_use_tab_model_->is_control_app_installed_ =
+ false;
+ base::HistogramTester histogram_tester;
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent(
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL),
+ std::string());
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent(
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL),
+ std::string());
+ EXPECT_EQ(2, external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_->size());
+ external_data_use_observer()
+ ->data_use_tab_model_->OnControlAppInstallStateChange(true);
+ base::RunLoop().RunUntilIdle();
+ histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 3);
+ EXPECT_FALSE(external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_.get());
+}
+
+// Tests that UI navigation events are buffered until the buffer reaches a
+// maximum imposed limit.
+TEST_F(ExternalDataUseObserverTest,
+ ProcessBufferedNavigationEventsAfterMaxLimit) {
+ const uint32_t kDefaultMaxNavigationEventsBuffered = 1000;
+ // Expect that the max imposed limit will be reached, and the buffer will be
+ // cleared.
+ for (size_t count = 1; count < kDefaultMaxNavigationEventsBuffered; ++count) {
tbansal1 2016/03/29 18:19:04 start at 0?
Raj 2016/03/29 19:45:54 Done.
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent(
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL),
+ std::string());
+ if (!external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_) {
+ // The max limit is reached.
+ break;
+ }
+ EXPECT_EQ(count,
+ external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_->size());
+ }
+ EXPECT_FALSE(external_data_use_observer()
+ ->data_use_tab_model_->data_use_ui_navigations_.get());
+}
+
} // namespace android
} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698