Chromium Code Reviews| 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 |