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(1U, 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(2U, 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(2U, 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 = 0; count < kDefaultMaxNavigationEventsBuffered; ++count) { |
| 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+1, |
| 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 |