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 |