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 |