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..ca327de71be95786b36418fc835c6e15989233e9 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 |
@@ -73,8 +73,16 @@ class ExternalDataUseObserverTest : public testing::Test { |
->data_use_tab_model_->is_control_app_installed_ = true; |
} |
+ void ReplaceExternalDataUseObserver() { |
+ external_data_use_observer_.reset(new ExternalDataUseObserver( |
+ data_use_aggregator_.get(), io_task_runner_.get(), |
+ ui_task_runner_.get())); |
+ // Wait for |external_data_use_observer_| to create the Java object. |
+ base::RunLoop().RunUntilIdle(); |
+ } |
+ |
// Replaces |external_data_use_observer_| with a new ExternalDataUseObserver. |
- void ReplaceExternalDataUseObserver( |
+ void ReplaceExternalDataUseObserverWithVariation( |
std::map<std::string, std::string> variation_params) { |
variations::testing::ClearAllVariationParams(); |
ASSERT_TRUE(variations::AssociateVariationParams( |
@@ -85,12 +93,7 @@ class ExternalDataUseObserverTest : public testing::Test { |
base::FieldTrialList::CreateFieldTrial( |
ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled"); |
- |
- external_data_use_observer_.reset(new ExternalDataUseObserver( |
- data_use_aggregator_.get(), io_task_runner_.get(), |
- ui_task_runner_.get())); |
- // Wait for |external_data_use_observer_| to create the Java object. |
- base::RunLoop().RunUntilIdle(); |
+ ReplaceExternalDataUseObserver(); |
} |
void FetchMatchingRulesDone(const std::vector<std::string>& app_package_name, |
@@ -390,7 +393,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,15 +405,21 @@ 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(); |
} |
{ |
- // Matching rules are fetched when control app is installed. |
+ // Matching rules are fetched when control app is installed. |
tbansal1
2016/03/29 16:20:41
extra space?
Raj
2016/03/29 18:03:21
Done.
|
base::HistogramTester histogram_tester; |
external_data_use_observer() |
->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()); |
} |
{ |
@@ -585,7 +595,7 @@ TEST_F(ExternalDataUseObserverTest, Variations) { |
base::Int64ToString(kDataUseReportMinBytes); |
// Create another ExternalDataUseObserver object. |
- ReplaceExternalDataUseObserver(variation_params); |
+ ReplaceExternalDataUseObserverWithVariation(variation_params); |
EXPECT_EQ(base::TimeDelta::FromSeconds(kFetchMatchingRulesDurationSeconds), |
external_data_use_observer()->fetch_matching_rules_duration_); |
EXPECT_EQ( |
@@ -603,7 +613,7 @@ TEST_F(ExternalDataUseObserverTest, DataUseReportTimedOut) { |
variation_params["data_use_report_min_bytes"] = "0"; |
// Create another ExternalDataUseObserver object. |
- ReplaceExternalDataUseObserver(variation_params); |
+ ReplaceExternalDataUseObserverWithVariation(variation_params); |
histogram_tester.ExpectTotalCount(kUMAMatchingRuleFirstFetchDurationHistogram, |
0); |
@@ -638,6 +648,71 @@ TEST_F(ExternalDataUseObserverTest, DataUseReportTimedOut) { |
histogram_tester.ExpectTotalCount(kUMAReportSubmissionDurationHistogram, 0); |
} |
+// Tests the buffering of UI navigation events until matching rule fetch is |
+// complete, or until the external control app not installed callback is |
+// received, or until a maximum number of events are buffered, whichever comes |
+// first. |
+TEST_F(ExternalDataUseObserverTest, ProcessBufferedNavigationEvents) { |
tbansal1
2016/03/29 16:20:41
Seems like this is essentially 3 different tests.
tbansal1
2016/03/29 16:20:41
This test does not really check if ProcessBuffered
Raj
2016/03/29 18:03:21
I have added a unittest in data_use_tab_model_unit
Raj
2016/03/29 18:03:21
Done.
|
+ const uint32_t kDefaultMaxNavigationEventsBuffered = 100; |
+ { |
+ // Navigation events will be buffered until control app not installed |
+ // callback is received. |
+ 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()); |
+ } |
+ |
+ { |
+ // Navigation events will be buffered until control app is installed and |
+ // matching rules are fetched. |
+ ReplaceExternalDataUseObserver(); |
+ 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()); |
+ } |
+ { |
+ // Navigation events will be buffered until the buffer reaches a maximum |
+ // limit. |
+ ReplaceExternalDataUseObserver(); |
+ for (size_t count = 1; count < kDefaultMaxNavigationEventsBuffered; |
tbansal1
2016/03/29 16:20:41
this is flaky. If somebody changes value at one pl
Raj
2016/03/29 18:03:21
I do not want to add this limit as another paramet
|
+ count++) { |
tbansal1
2016/03/29 16:20:41
++count
Raj
2016/03/29 18:03:21
Done.
|
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( |
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), |
+ std::string()); |
+ EXPECT_EQ(i, external_data_use_observer() |
+ ->data_use_tab_model_->data_use_ui_navigations_->size()); |
+ } |
+ // Next navigation event will trigger clearing of the buffer. |
+ external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( |
+ kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), |
+ std::string()); |
+ EXPECT_FALSE(external_data_use_observer() |
+ ->data_use_tab_model_->data_use_ui_navigations_.get()); |
+ } |
+} |
+ |
} // namespace android |
} // namespace chrome |