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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 } | 383 } |
| 384 | 384 |
| 385 // Tests the matching rule fetch behavior when the external control app is | 385 // Tests the matching rule fetch behavior when the external control app is |
| 386 // installed and not installed. Matching rules should be fetched when control | 386 // installed and not installed. Matching rules should be fetched when control |
| 387 // app gets installed. If control app is installed and no valid rules are found, | 387 // app gets installed. If control app is installed and no valid rules are found, |
| 388 // matching rules are fetched on every navigation. Rules are not fetched if | 388 // matching rules are fetched on every navigation. Rules are not fetched if |
| 389 // control app is not installed or if more than zero valid rules have been | 389 // control app is not installed or if more than zero valid rules have been |
| 390 // fetched. | 390 // fetched. |
| 391 TEST_F(ExternalDataUseObserverTest, MatchingRuleFetchOnControlAppInstall) { | 391 TEST_F(ExternalDataUseObserverTest, MatchingRuleFetchOnControlAppInstall) { |
| 392 { | 392 { |
| 393 // Matching rules not fetched on navigation if control app is not installed. | 393 // Matching rules not fetched on navigation if control app is not installed, |
| 394 // and navigation events will be buffered. | |
| 394 external_data_use_observer()->last_matching_rules_fetch_time_ = | 395 external_data_use_observer()->last_matching_rules_fetch_time_ = |
| 395 base::TimeTicks(); | 396 base::TimeTicks(); |
| 396 external_data_use_observer() | 397 external_data_use_observer() |
| 397 ->data_use_tab_model_->is_control_app_installed_ = false; | 398 ->data_use_tab_model_->is_control_app_installed_ = false; |
| 398 base::HistogramTester histogram_tester; | 399 base::HistogramTester histogram_tester; |
| 399 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | 400 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( |
| 400 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | 401 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), |
| 401 std::string()); | 402 std::string()); |
| 402 base::RunLoop().RunUntilIdle(); | 403 base::RunLoop().RunUntilIdle(); |
| 403 histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 0); | 404 histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 0); |
| 405 EXPECT_EQ(1, external_data_use_observer() | |
| 406 ->data_use_tab_model_->data_use_ui_navigations_->size()); | |
| 407 external_data_use_observer() | |
| 408 ->data_use_tab_model_->data_use_ui_navigations_->clear(); | |
| 404 } | 409 } |
| 405 | 410 |
| 406 { | 411 { |
| 407 // Matching rules are fetched when control app is installed. | 412 // Matching rules are fetched when control app is installed. |
| 408 base::HistogramTester histogram_tester; | 413 base::HistogramTester histogram_tester; |
| 409 external_data_use_observer() | 414 external_data_use_observer() |
| 410 ->data_use_tab_model_->OnControlAppInstallStateChange(true); | 415 ->data_use_tab_model_->OnControlAppInstallStateChange(true); |
| 411 base::RunLoop().RunUntilIdle(); | 416 base::RunLoop().RunUntilIdle(); |
| 412 histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 1); | 417 histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 1); |
| 418 EXPECT_FALSE(external_data_use_observer() | |
| 419 ->data_use_tab_model_->data_use_ui_navigations_.get()); | |
| 413 } | 420 } |
| 414 | 421 |
| 415 { | 422 { |
| 416 // Matching rules fetched on every navigation if control app is installed | 423 // Matching rules fetched on every navigation if control app is installed |
| 417 // and zero rules are available. | 424 // and zero rules are available. |
| 418 external_data_use_observer()->last_matching_rules_fetch_time_ = | 425 external_data_use_observer()->last_matching_rules_fetch_time_ = |
| 419 base::TimeTicks(); | 426 base::TimeTicks(); |
| 420 base::HistogramTester histogram_tester; | 427 base::HistogramTester histogram_tester; |
| 421 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | 428 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( |
| 422 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | 429 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 631 // First data use report should be marked as timed out. | 638 // First data use report should be marked as timed out. |
| 632 histogram_tester.ExpectUniqueSample( | 639 histogram_tester.ExpectUniqueSample( |
| 633 "DataUsage.ReportSubmissionResult", | 640 "DataUsage.ReportSubmissionResult", |
| 634 ExternalDataUseObserver::DATAUSAGE_REPORT_SUBMISSION_TIMED_OUT, 1); | 641 ExternalDataUseObserver::DATAUSAGE_REPORT_SUBMISSION_TIMED_OUT, 1); |
| 635 histogram_tester.ExpectUniqueSample( | 642 histogram_tester.ExpectUniqueSample( |
| 636 "DataUsage.ReportSubmission.Bytes.TimedOut", | 643 "DataUsage.ReportSubmission.Bytes.TimedOut", |
| 637 default_upload_bytes() + default_download_bytes(), 1); | 644 default_upload_bytes() + default_download_bytes(), 1); |
| 638 histogram_tester.ExpectTotalCount(kUMAReportSubmissionDurationHistogram, 0); | 645 histogram_tester.ExpectTotalCount(kUMAReportSubmissionDurationHistogram, 0); |
| 639 } | 646 } |
| 640 | 647 |
| 648 // Tests that UI navigation events are buffered until control app not installed | |
| 649 // callback is received. | |
| 650 TEST_F(ExternalDataUseObserverTest, | |
| 651 ProcessBufferedNavigationEventsAfterControlAppNotInstalled) { | |
| 652 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | |
| 653 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | |
| 654 std::string()); | |
| 655 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | |
| 656 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | |
| 657 std::string()); | |
| 658 EXPECT_EQ(2, external_data_use_observer() | |
| 659 ->data_use_tab_model_->data_use_ui_navigations_->size()); | |
| 660 external_data_use_observer() | |
| 661 ->data_use_tab_model_->OnControlAppInstallStateChange(false); | |
| 662 base::RunLoop().RunUntilIdle(); | |
| 663 EXPECT_FALSE(external_data_use_observer() | |
| 664 ->data_use_tab_model_->data_use_ui_navigations_.get()); | |
| 665 } | |
| 666 | |
| 667 // Tests that UI navigation events are buffered until control app is installed | |
| 668 // and matching rules are fetched. | |
| 669 TEST_F(ExternalDataUseObserverTest, | |
| 670 ProcessBufferedNavigationEventsAfterRuleFetch) { | |
| 671 external_data_use_observer()->data_use_tab_model_->is_control_app_installed_ = | |
| 672 false; | |
| 673 base::HistogramTester histogram_tester; | |
| 674 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | |
| 675 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | |
| 676 std::string()); | |
| 677 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | |
| 678 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | |
| 679 std::string()); | |
| 680 EXPECT_EQ(2, external_data_use_observer() | |
| 681 ->data_use_tab_model_->data_use_ui_navigations_->size()); | |
| 682 external_data_use_observer() | |
| 683 ->data_use_tab_model_->OnControlAppInstallStateChange(true); | |
| 684 base::RunLoop().RunUntilIdle(); | |
| 685 histogram_tester.ExpectTotalCount("DataUsage.MatchingRulesCount.Valid", 3); | |
| 686 EXPECT_FALSE(external_data_use_observer() | |
| 687 ->data_use_tab_model_->data_use_ui_navigations_.get()); | |
| 688 } | |
| 689 | |
| 690 // Tests that UI navigation events are buffered until the buffer reaches a | |
| 691 // maximum imposed limit. | |
| 692 TEST_F(ExternalDataUseObserverTest, | |
| 693 ProcessBufferedNavigationEventsAfterMaxLimit) { | |
| 694 const uint32_t kDefaultMaxNavigationEventsBuffered = 1000; | |
| 695 // Expect that the max imposed limit will be reached, and the buffer will be | |
| 696 // cleared. | |
| 697 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.
| |
| 698 external_data_use_observer()->data_use_tab_model_->OnNavigationEvent( | |
| 699 kDefaultTabId, DataUseTabModel::TRANSITION_LINK, GURL(kDefaultURL), | |
| 700 std::string()); | |
| 701 if (!external_data_use_observer() | |
| 702 ->data_use_tab_model_->data_use_ui_navigations_) { | |
| 703 // The max limit is reached. | |
| 704 break; | |
| 705 } | |
| 706 EXPECT_EQ(count, | |
| 707 external_data_use_observer() | |
| 708 ->data_use_tab_model_->data_use_ui_navigations_->size()); | |
| 709 } | |
| 710 EXPECT_FALSE(external_data_use_observer() | |
| 711 ->data_use_tab_model_->data_use_ui_navigations_.get()); | |
| 712 } | |
| 713 | |
| 641 } // namespace android | 714 } // namespace android |
| 642 | 715 |
| 643 } // namespace chrome | 716 } // namespace chrome |
| OLD | NEW |