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 |