Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/data_usage/external_data_use_observer.h" | 5 #include "chrome/browser/android/data_usage/external_data_use_observer.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/metrics/field_trial.h" | 12 #include "base/metrics/field_trial.h" |
| 13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 14 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
| 15 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 16 #include "base/test/histogram_tester.h" | |
| 16 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
| 17 #include "chrome/browser/android/data_usage/data_use_tab_model_test_utils.h" | 18 #include "chrome/browser/android/data_usage/data_use_tab_model_test_utils.h" |
| 18 #include "components/data_usage/core/data_use.h" | 19 #include "components/data_usage/core/data_use.h" |
| 19 #include "components/data_usage/core/data_use_aggregator.h" | 20 #include "components/data_usage/core/data_use_aggregator.h" |
| 20 #include "components/data_usage/core/data_use_amortizer.h" | 21 #include "components/data_usage/core/data_use_amortizer.h" |
| 21 #include "components/data_usage/core/data_use_annotator.h" | 22 #include "components/data_usage/core/data_use_annotator.h" |
| 22 #include "components/variations/variations_associated_data.h" | 23 #include "components/variations/variations_associated_data.h" |
| 23 #include "content/public/browser/browser_thread.h" | 24 #include "content/public/browser/browser_thread.h" |
| 24 #include "content/public/test/test_browser_thread_bundle.h" | 25 #include "content/public/test/test_browser_thread_bundle.h" |
| 25 #include "net/base/network_change_notifier.h" | 26 #include "net/base/network_change_notifier.h" |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 44 external_data_use_observer_.reset(new ExternalDataUseObserver( | 45 external_data_use_observer_.reset(new ExternalDataUseObserver( |
| 45 data_use_aggregator_.get(), io_task_runner_.get(), | 46 data_use_aggregator_.get(), io_task_runner_.get(), |
| 46 ui_task_runner_.get())); | 47 ui_task_runner_.get())); |
| 47 test_data_use_tab_model_ = new TestDataUseTabModel( | 48 test_data_use_tab_model_ = new TestDataUseTabModel( |
| 48 external_data_use_observer_.get(), ui_task_runner_.get()); | 49 external_data_use_observer_.get(), ui_task_runner_.get()); |
| 49 external_data_use_observer_->data_use_tab_model_.reset( | 50 external_data_use_observer_->data_use_tab_model_.reset( |
| 50 test_data_use_tab_model_); | 51 test_data_use_tab_model_); |
| 51 } | 52 } |
| 52 | 53 |
| 53 scoped_ptr<ExternalDataUseObserver> Create() const { | 54 scoped_ptr<ExternalDataUseObserver> Create() const { |
| 54 return scoped_ptr<ExternalDataUseObserver>(new ExternalDataUseObserver( | 55 scoped_ptr<ExternalDataUseObserver> observer(new ExternalDataUseObserver( |
| 55 data_use_aggregator_.get(), io_task_runner_.get(), | 56 data_use_aggregator_.get(), io_task_runner_.get(), |
| 56 ui_task_runner_.get())); | 57 ui_task_runner_.get())); |
| 58 // |test_data_use_tab_model| is owned by |observer|. | |
| 59 TestDataUseTabModel* test_data_use_tab_model( | |
| 60 new TestDataUseTabModel(observer.get(), ui_task_runner_.get())); | |
| 61 observer->data_use_tab_model_.reset(test_data_use_tab_model); | |
| 62 return observer.Pass(); | |
| 57 } | 63 } |
| 58 | 64 |
| 59 ExternalDataUseObserver* external_data_use_observer() const { | 65 ExternalDataUseObserver* external_data_use_observer() const { |
| 60 return external_data_use_observer_.get(); | 66 return external_data_use_observer_.get(); |
| 61 } | 67 } |
| 62 | 68 |
| 63 TestDataUseTabModel* test_data_use_tab_model() const { | 69 TestDataUseTabModel* test_data_use_tab_model() const { |
| 64 return test_data_use_tab_model_; | 70 return test_data_use_tab_model_; |
| 65 } | 71 } |
| 66 | 72 |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 293 labels.push_back("label_1"); | 299 labels.push_back("label_1"); |
| 294 labels.push_back("label_4"); | 300 labels.push_back("label_4"); |
| 295 labels.push_back("label_5"); | 301 labels.push_back("label_5"); |
| 296 external_data_use_observer()->RegisterURLRegexes( | 302 external_data_use_observer()->RegisterURLRegexes( |
| 297 std::vector<std::string>(labels.size(), std::string()), | 303 std::vector<std::string>(labels.size(), std::string()), |
| 298 std::vector<std::string>(labels.size(), "http://foobar.com"), labels); | 304 std::vector<std::string>(labels.size(), "http://foobar.com"), labels); |
| 299 } | 305 } |
| 300 | 306 |
| 301 // Verifies that buffer size does not exceed the specified limit. | 307 // Verifies that buffer size does not exceed the specified limit. |
| 302 TEST_F(ExternalDataUseObserverTest, BufferSize) { | 308 TEST_F(ExternalDataUseObserverTest, BufferSize) { |
| 309 base::HistogramTester histogram_tester; | |
| 303 const char kLabel[] = "label"; | 310 const char kLabel[] = "label"; |
| 304 | 311 |
| 305 std::vector<std::string> url_regexes; | 312 std::vector<std::string> url_regexes; |
| 306 url_regexes.push_back( | 313 url_regexes.push_back( |
| 307 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 314 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
| 308 | 315 |
| 309 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( | 316 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
| 310 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 317 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
| 311 std::vector<std::string>(url_regexes.size(), kLabel)); | 318 std::vector<std::string>(url_regexes.size(), kLabel)); |
| 312 | 319 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 328 // Verify that total buffered bytes is computed correctly. | 335 // Verify that total buffered bytes is computed correctly. |
| 329 EXPECT_EQ(static_cast<int64_t>(ExternalDataUseObserver::kMaxBufferSize * | 336 EXPECT_EQ(static_cast<int64_t>(ExternalDataUseObserver::kMaxBufferSize * |
| 330 (bytes_downloaded + bytes_uploaded)), | 337 (bytes_downloaded + bytes_uploaded)), |
| 331 external_data_use_observer()->total_bytes_buffered_); | 338 external_data_use_observer()->total_bytes_buffered_); |
| 332 EXPECT_EQ(ExternalDataUseObserver::kMaxBufferSize, | 339 EXPECT_EQ(ExternalDataUseObserver::kMaxBufferSize, |
| 333 buffered_data_reports().size()); | 340 buffered_data_reports().size()); |
| 334 | 341 |
| 335 // Verify the label of the data use report. | 342 // Verify the label of the data use report. |
| 336 for (const auto& it : buffered_data_reports()) | 343 for (const auto& it : buffered_data_reports()) |
| 337 EXPECT_EQ(kLabel, it.first.label); | 344 EXPECT_EQ(kLabel, it.first.label); |
| 345 | |
| 346 // Verify that metrics were updated correctly for the lost reports. | |
| 347 histogram_tester.ExpectTotalCount( | |
| 348 "DataUsage.ReportSubmissionResult", | |
| 349 ExternalDataUseObserver::kMaxBufferSize - 1); | |
|
sclittle
2015/12/02 19:07:55
nit: If these are all the same sample (e.g. the sa
tbansal1
2015/12/03 03:19:45
Done.
| |
| 350 histogram_tester.ExpectBucketCount( | |
| 351 "DataUsage.ReportSubmissionResult", 3, | |
| 352 ExternalDataUseObserver::kMaxBufferSize - 1); | |
| 353 histogram_tester.ExpectTotalCount( | |
| 354 "DataUsage.ReportSubmission.Lost.Bytes", | |
| 355 ExternalDataUseObserver::kMaxBufferSize - 1); | |
|
sclittle
2015/12/02 19:07:54
Can you also test the samples in this histogram?
tbansal1
2015/12/03 03:19:45
Done.
| |
| 338 } | 356 } |
| 339 | 357 |
| 340 // Tests that buffered data use reports are merged correctly. | 358 // Tests that buffered data use reports are merged correctly. |
| 341 TEST_F(ExternalDataUseObserverTest, ReportsMergedCorrectly) { | 359 TEST_F(ExternalDataUseObserverTest, ReportsMergedCorrectly) { |
| 342 const char kLabel[] = "label"; | 360 const char kLabel[] = "label"; |
| 343 | 361 |
| 344 std::vector<std::string> url_regexes; | 362 std::vector<std::string> url_regexes; |
| 345 url_regexes.push_back( | 363 url_regexes.push_back( |
| 346 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 364 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
| 347 | 365 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 449 | 467 |
| 450 std::vector<std::string> app_package_names; | 468 std::vector<std::string> app_package_names; |
| 451 const char kAppFoo[] = "com.example.foo"; | 469 const char kAppFoo[] = "com.example.foo"; |
| 452 const char kAppBar[] = "com.example.bar"; | 470 const char kAppBar[] = "com.example.bar"; |
| 453 app_package_names.push_back(kAppFoo); | 471 app_package_names.push_back(kAppFoo); |
| 454 app_package_names.push_back(kAppBar); | 472 app_package_names.push_back(kAppBar); |
| 455 | 473 |
| 456 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( | 474 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
| 457 app_package_names, url_regexes, labels); | 475 app_package_names, url_regexes, labels); |
| 458 EXPECT_EQ(0U, external_data_use_observer()->buffered_data_reports_.size()); | 476 EXPECT_EQ(0U, external_data_use_observer()->buffered_data_reports_.size()); |
| 459 EXPECT_FALSE(external_data_use_observer()->submit_data_report_pending_); | 477 EXPECT_TRUE( |
| 478 external_data_use_observer()->last_data_report_submitted_.is_null()); | |
| 460 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); | 479 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); |
| 461 | 480 |
| 462 // Check |kLabelFoo| matching rule. | 481 // Check |kLabelFoo| matching rule. |
| 463 data_usage::DataUse data_foo_1( | 482 data_usage::DataUse data_foo_1( |
| 464 GURL("http://www.foo.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 483 GURL("http://www.foo.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
| 465 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_1", | 484 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_1", |
| 466 external_data_use_observer()->data_use_report_min_bytes_, 0); | 485 external_data_use_observer()->data_use_report_min_bytes_, 0); |
| 467 external_data_use_observer()->OnDataUse(data_foo_1); | 486 external_data_use_observer()->OnDataUse(data_foo_1); |
| 468 data_usage::DataUse data_foo_2( | 487 data_usage::DataUse data_foo_2( |
| 469 GURL("http://www.foo.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 488 GURL("http://www.foo.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
| 470 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_2", | 489 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_2", |
| 471 external_data_use_observer()->data_use_report_min_bytes_, 0); | 490 external_data_use_observer()->data_use_report_min_bytes_, 0); |
| 472 external_data_use_observer()->OnDataUse(data_foo_2); | 491 external_data_use_observer()->OnDataUse(data_foo_2); |
| 473 | 492 |
| 474 // The foo1 report should have been submitted. | 493 // The foo1 report should have been submitted. |
| 475 EXPECT_TRUE(external_data_use_observer()->submit_data_report_pending_); | 494 EXPECT_FALSE( |
| 495 external_data_use_observer()->last_data_report_submitted_.is_null()); | |
| 476 | 496 |
| 477 // Only the foo2 report should be present. | 497 // Only the foo2 report should be present. |
| 478 EXPECT_EQ(1U, buffered_data_reports().size()); | 498 EXPECT_EQ(1U, buffered_data_reports().size()); |
| 479 const ExternalDataUseObserver::DataUseReportKey key_foo_2( | 499 const ExternalDataUseObserver::DataUseReportKey key_foo_2( |
| 480 kLabelFoo, net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_2"); | 500 kLabelFoo, net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_2"); |
| 481 EXPECT_NE(buffered_data_reports().end(), | 501 EXPECT_NE(buffered_data_reports().end(), |
| 482 buffered_data_reports().find(key_foo_2)); | 502 buffered_data_reports().find(key_foo_2)); |
| 483 | 503 |
| 484 // Check |kLabelBar| matching rule. | 504 // Check |kLabelBar| matching rule. |
| 485 data_usage::DataUse data_bar( | 505 data_usage::DataUse data_bar( |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 601 | 621 |
| 602 for (size_t i = 0; i < num_iterations; ++i) { | 622 for (size_t i = 0; i < num_iterations; ++i) { |
| 603 data_usage::DataUse data_use_foo( | 623 data_usage::DataUse data_use_foo( |
| 604 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 624 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
| 605 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", 1024, 0); | 625 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", 1024, 0); |
| 606 external_data_use_observer()->OnDataUse(data_use_foo); | 626 external_data_use_observer()->OnDataUse(data_use_foo); |
| 607 | 627 |
| 608 if (i != num_iterations - 1) { | 628 if (i != num_iterations - 1) { |
| 609 // Total buffered bytes is less than the minimum threshold. Data use | 629 // Total buffered bytes is less than the minimum threshold. Data use |
| 610 // report should not be send. | 630 // report should not be send. |
| 611 EXPECT_FALSE(external_data_use_observer()->submit_data_report_pending_); | 631 EXPECT_TRUE( |
| 632 external_data_use_observer()->last_data_report_submitted_.is_null()); | |
| 612 EXPECT_EQ(static_cast<int64_t>(i + 1), | 633 EXPECT_EQ(static_cast<int64_t>(i + 1), |
| 613 external_data_use_observer()->total_bytes_buffered_ / 1024); | 634 external_data_use_observer()->total_bytes_buffered_ / 1024); |
| 635 EXPECT_EQ(0, external_data_use_observer()->pending_report_bytes_); | |
| 614 | 636 |
| 615 } else { | 637 } else { |
| 616 // Total bytes is at least the minimum threshold. This should trigger | 638 // Total bytes is at least the minimum threshold. This should trigger |
| 617 // submitting of the buffered data use report. | 639 // submitting of the buffered data use report. |
| 618 EXPECT_TRUE(external_data_use_observer()->submit_data_report_pending_); | 640 EXPECT_FALSE( |
| 641 external_data_use_observer()->last_data_report_submitted_.is_null()); | |
| 619 EXPECT_EQ(0, external_data_use_observer()->total_bytes_buffered_); | 642 EXPECT_EQ(0, external_data_use_observer()->total_bytes_buffered_); |
| 620 } | 643 } |
| 621 } | 644 } |
| 622 EXPECT_EQ(0, external_data_use_observer()->total_bytes_buffered_); | 645 EXPECT_EQ(0, external_data_use_observer()->total_bytes_buffered_); |
| 646 EXPECT_EQ(static_cast<int64_t>(num_iterations), | |
| 647 external_data_use_observer()->pending_report_bytes_ / 1024); | |
| 648 | |
| 649 base::HistogramTester histogram_tester; | |
| 650 external_data_use_observer()->OnReportDataUseDoneOnIOThread(true); | |
| 651 | |
| 652 // Verify that metrics were updated correctly for the report that was | |
| 653 // successfully submitted. | |
| 654 histogram_tester.ExpectTotalCount("DataUsage.ReportSubmissionResult", 1); | |
| 655 histogram_tester.ExpectBucketCount("DataUsage.ReportSubmissionResult", 0, 1); | |
| 656 histogram_tester.ExpectTotalCount( | |
| 657 "DataUsage.ReportSubmission.Successful.Bytes", 1); | |
|
sclittle
2015/12/02 19:07:55
nit: Can you check the sample for this histogram a
tbansal1
2015/12/03 03:19:45
Done.
| |
| 658 | |
| 659 // Verify that metrics were updated correctly for the report that was not | |
| 660 // successfully submitted. | |
| 661 external_data_use_observer()->OnDataUse(data_usage::DataUse( | |
| 662 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | |
| 663 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", 1024 * 1024, | |
| 664 0)); | |
| 665 external_data_use_observer()->OnReportDataUseDoneOnIOThread(false); | |
| 666 histogram_tester.ExpectTotalCount("DataUsage.ReportSubmissionResult", 2); | |
| 667 histogram_tester.ExpectBucketCount("DataUsage.ReportSubmissionResult", 1, 1); | |
| 668 histogram_tester.ExpectTotalCount("DataUsage.ReportSubmission.Failed.Bytes", | |
| 669 1); | |
| 623 } | 670 } |
| 624 | 671 |
| 625 // Tests if the parameters from the field trial are populated correctly. | 672 // Tests if the parameters from the field trial are populated correctly. |
| 626 TEST_F(ExternalDataUseObserverTest, Variations) { | 673 TEST_F(ExternalDataUseObserverTest, Variations) { |
| 627 EXPECT_EQ(base::TimeDelta::FromSeconds(60 * 15), | 674 EXPECT_EQ(base::TimeDelta::FromSeconds(60 * 15), |
| 628 external_data_use_observer()->fetch_matching_rules_duration_); | 675 external_data_use_observer()->fetch_matching_rules_duration_); |
| 629 EXPECT_EQ(100 * 1024, | 676 EXPECT_EQ(100 * 1024, |
| 630 external_data_use_observer()->data_use_report_min_bytes_); | 677 external_data_use_observer()->data_use_report_min_bytes_); |
| 631 | 678 |
| 632 variations::testing::ClearAllVariationParams(); | 679 variations::testing::ClearAllVariationParams(); |
| 633 std::map<std::string, std::string> variation_params; | 680 std::map<std::string, std::string> variation_params; |
| 634 | 681 |
| 635 const int kFetchMatchingRulesDurationSeconds = 10000; | 682 const int kFetchMatchingRulesDurationSeconds = 10000; |
| 683 const int kDefaultMaxDataReportSubmitWaitSeconds = 20000; | |
| 636 const int64_t kDataUseReportMinBytes = 5000; | 684 const int64_t kDataUseReportMinBytes = 5000; |
| 637 variation_params["fetch_matching_rules_duration_seconds"] = | 685 variation_params["fetch_matching_rules_duration_seconds"] = |
| 638 base::Int64ToString(kFetchMatchingRulesDurationSeconds); | 686 base::Int64ToString(kFetchMatchingRulesDurationSeconds); |
| 687 variation_params["data_report_submit_timeout_seconds"] = | |
| 688 base::Int64ToString(kDefaultMaxDataReportSubmitWaitSeconds); | |
| 639 variation_params["data_use_report_min_bytes"] = | 689 variation_params["data_use_report_min_bytes"] = |
| 640 base::Int64ToString(kDataUseReportMinBytes); | 690 base::Int64ToString(kDataUseReportMinBytes); |
| 641 | 691 |
| 642 ASSERT_TRUE(variations::AssociateVariationParams( | 692 ASSERT_TRUE(variations::AssociateVariationParams( |
| 643 ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled", | 693 ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled", |
| 644 variation_params)); | 694 variation_params)); |
| 645 | 695 |
| 646 base::FieldTrialList field_trial_list(nullptr); | 696 base::FieldTrialList field_trial_list(nullptr); |
| 647 | 697 |
| 648 base::FieldTrialList::CreateFieldTrial( | 698 base::FieldTrialList::CreateFieldTrial( |
| 649 ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled"); | 699 ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled"); |
| 650 | 700 |
| 651 // Create another ExternalDataUseObserver object. This would fetch variation | 701 // Create another ExternalDataUseObserver object. This would fetch variation |
| 652 // params. | 702 // params. |
| 653 scoped_ptr<ExternalDataUseObserver> | 703 scoped_ptr<ExternalDataUseObserver> |
| 654 external_data_use_obsever_with_variations = Create(); | 704 external_data_use_obsever_with_variations = Create(); |
| 655 EXPECT_EQ(base::TimeDelta::FromSeconds(kFetchMatchingRulesDurationSeconds), | 705 EXPECT_EQ(base::TimeDelta::FromSeconds(kFetchMatchingRulesDurationSeconds), |
| 656 external_data_use_obsever_with_variations | 706 external_data_use_obsever_with_variations |
| 657 ->fetch_matching_rules_duration_); | 707 ->fetch_matching_rules_duration_); |
| 658 EXPECT_EQ( | 708 EXPECT_EQ( |
| 709 base::TimeDelta::FromSeconds(kDefaultMaxDataReportSubmitWaitSeconds), | |
| 710 external_data_use_obsever_with_variations->data_report_submit_timeout_); | |
| 711 EXPECT_EQ( | |
| 659 kDataUseReportMinBytes, | 712 kDataUseReportMinBytes, |
| 660 external_data_use_obsever_with_variations->data_use_report_min_bytes_); | 713 external_data_use_obsever_with_variations->data_use_report_min_bytes_); |
| 661 } | 714 } |
| 662 | 715 |
| 716 // Tests if the metrics are recorded correctly. | |
| 717 TEST_F(ExternalDataUseObserverTest, DataUseReportTimedOut) { | |
| 718 variations::testing::ClearAllVariationParams(); | |
| 719 std::map<std::string, std::string> variation_params; | |
| 720 variation_params["data_report_submit_timeout_seconds"] = "0"; | |
| 721 variation_params["data_use_report_min_bytes"] = "0"; | |
| 722 | |
| 723 ASSERT_TRUE(variations::AssociateVariationParams( | |
| 724 ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled", | |
| 725 variation_params)); | |
| 726 | |
| 727 base::FieldTrialList field_trial_list(nullptr); | |
| 728 | |
| 729 base::FieldTrialList::CreateFieldTrial( | |
| 730 ExternalDataUseObserver::kExternalDataUseObserverFieldTrial, "Enabled"); | |
| 731 | |
| 732 // Create another ExternalDataUseObserver object. This would fetch variation | |
| 733 // params. | |
| 734 scoped_ptr<ExternalDataUseObserver> | |
| 735 external_data_use_obsever_with_variations = Create(); | |
| 736 | |
| 737 std::vector<std::string> url_regexes; | |
| 738 url_regexes.push_back( | |
| 739 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | |
| 740 external_data_use_obsever_with_variations->FetchMatchingRulesDoneOnIOThread( | |
| 741 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | |
| 742 std::vector<std::string>(url_regexes.size(), "label")); | |
| 743 | |
| 744 base::HistogramTester histogram_tester; | |
| 745 external_data_use_obsever_with_variations->data_use_tab_model() | |
| 746 ->OnNavigationEvent(0, DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, | |
| 747 GURL("http://www.google.com/#q=abc"), std::string()); | |
| 748 external_data_use_obsever_with_variations->OnDataUse(data_usage::DataUse( | |
| 749 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | |
| 750 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", 1024 * 1024, | |
| 751 0)); | |
| 752 external_data_use_obsever_with_variations->OnDataUse(data_usage::DataUse( | |
| 753 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | |
| 754 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_bar", 1024 * 1024, | |
| 755 0)); | |
| 756 histogram_tester.ExpectTotalCount("DataUsage.ReportSubmissionResult", 1); | |
|
sclittle
2015/12/02 19:07:55
nit: you could get rid of the ExpectTotalCount her
tbansal1
2015/12/03 03:19:45
Done.
| |
| 757 // First data use report should be marked as timed out. | |
| 758 histogram_tester.ExpectBucketCount("DataUsage.ReportSubmissionResult", 2, 1); | |
| 759 } | |
| 760 | |
| 663 } // namespace android | 761 } // namespace android |
| 664 | 762 |
| 665 } // namespace chrome | 763 } // namespace chrome |
| OLD | NEW |