| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/browser/banners/app_banner_metrics.h" | 8 #include "chrome/browser/banners/app_banner_metrics.h" |
| 9 #include "chrome/browser/banners/app_banner_settings_helper.h" | 9 #include "chrome/browser/banners/app_banner_settings_helper.h" |
| 10 #include "chrome/browser/engagement/site_engagement_service.h" | 10 #include "chrome/browser/engagement/site_engagement_service.h" |
| 11 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
| 12 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 12 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 13 #include "chrome/test/base/testing_profile.h" | 13 #include "chrome/test/base/testing_profile.h" |
| 14 #include "ui/base/page_transition_types.h" | 14 #include "ui/base/page_transition_types.h" |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 const char kTestURL[] = "https://www.google.com"; | 18 const char kTestURL[] = "https://www.google.com"; |
| 19 const char kSameOriginTestURL[] = "https://www.google.com/foo.html"; | 19 const char kSameOriginTestURL[] = "https://www.google.com/foo.html"; |
| 20 const char kDifferentOriginTestURL[] = "https://www.example.com"; |
| 20 const char kTestPackageName[] = "test.package"; | 21 const char kTestPackageName[] = "test.package"; |
| 21 | 22 |
| 22 base::Time GetReferenceTime() { | 23 base::Time GetReferenceTime() { |
| 23 base::Time::Exploded exploded_reference_time; | 24 base::Time::Exploded exploded_reference_time; |
| 24 exploded_reference_time.year = 2015; | 25 exploded_reference_time.year = 2015; |
| 25 exploded_reference_time.month = 1; | 26 exploded_reference_time.month = 1; |
| 26 exploded_reference_time.day_of_month = 30; | 27 exploded_reference_time.day_of_month = 30; |
| 27 exploded_reference_time.day_of_week = 5; | 28 exploded_reference_time.day_of_week = 5; |
| 28 exploded_reference_time.hour = 11; | 29 exploded_reference_time.hour = 11; |
| 29 exploded_reference_time.minute = 0; | 30 exploded_reference_time.minute = 0; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 40 return time1 - time2 < base::TimeDelta::FromDays(1) || | 41 return time1 - time2 < base::TimeDelta::FromDays(1) || |
| 41 time2 - time1 < base::TimeDelta::FromDays(1); | 42 time2 - time1 < base::TimeDelta::FromDays(1); |
| 42 } | 43 } |
| 43 | 44 |
| 44 bool IsWithinHour(base::Time time1, base::Time time2) { | 45 bool IsWithinHour(base::Time time1, base::Time time2) { |
| 45 return time1 - time2 < base::TimeDelta::FromHours(1) || | 46 return time1 - time2 < base::TimeDelta::FromHours(1) || |
| 46 time2 - time1 < base::TimeDelta::FromHours(1); | 47 time2 - time1 < base::TimeDelta::FromHours(1); |
| 47 } | 48 } |
| 48 | 49 |
| 49 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness { | 50 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness { |
| 50 | |
| 51 void SetUp() override { | 51 void SetUp() override { |
| 52 ChromeRenderViewHostTestHarness::SetUp(); | 52 ChromeRenderViewHostTestHarness::SetUp(); |
| 53 AppBannerSettingsHelper::SetDefaultParameters(); | 53 AppBannerSettingsHelper::SetDefaultParameters(); |
| 54 } | 54 } |
| 55 | |
| 56 }; | 55 }; |
| 57 | 56 |
| 58 } // namespace | 57 } // namespace |
| 59 | 58 |
| 60 TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionInvalid) { | 59 TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionInvalid) { |
| 61 base::Time reference_time = GetReferenceTime(); | 60 base::Time reference_time = GetReferenceTime(); |
| 62 | 61 |
| 63 // Test null, 1 day, and greater than 1 day cases. | 62 // Test null, 1 day, and greater than 1 day cases. |
| 64 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 0), | 63 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 0), |
| 65 reference_time.LocalMidnight()); | 64 reference_time.LocalMidnight()); |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 | 443 |
| 445 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 444 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
| 446 web_contents(), url, kTestPackageName); | 445 web_contents(), url, kTestPackageName); |
| 447 | 446 |
| 448 EXPECT_EQ(1u, events.size()); | 447 EXPECT_EQ(1u, events.size()); |
| 449 EXPECT_TRUE(IsWithinHour(events[0].time, reference_time)); | 448 EXPECT_TRUE(IsWithinHour(events[0].time, reference_time)); |
| 450 EXPECT_EQ(2, events[0].engagement); | 449 EXPECT_EQ(2, events[0].engagement); |
| 451 | 450 |
| 452 // Record a direct engagement type. This should override the previous value. | 451 // Record a direct engagement type. This should override the previous value. |
| 453 AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 452 AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
| 454 web_contents(), url, kTestPackageName, | 453 web_contents(), url, kTestPackageName, later_same_day, |
| 455 later_same_day, ui::PAGE_TRANSITION_TYPED); | 454 ui::PAGE_TRANSITION_TYPED); |
| 456 | 455 |
| 457 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 456 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
| 458 web_contents(), url, kTestPackageName); | 457 web_contents(), url, kTestPackageName); |
| 459 | 458 |
| 460 EXPECT_EQ(1u, events.size()); | 459 EXPECT_EQ(1u, events.size()); |
| 461 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); | 460 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); |
| 462 EXPECT_EQ(4, events[0].engagement); | 461 EXPECT_EQ(4, events[0].engagement); |
| 463 | 462 |
| 464 // Record an indirect engagement type. This should be ignored. | 463 // Record an indirect engagement type. This should be ignored. |
| 465 AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 464 AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
| 466 web_contents(), url, kTestPackageName, | 465 web_contents(), url, kTestPackageName, later_again_same_day, |
| 467 later_again_same_day, ui::PAGE_TRANSITION_RELOAD); | 466 ui::PAGE_TRANSITION_RELOAD); |
| 468 | 467 |
| 469 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 468 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
| 470 web_contents(), url, kTestPackageName); | 469 web_contents(), url, kTestPackageName); |
| 471 | 470 |
| 472 EXPECT_EQ(1u, events.size()); | 471 EXPECT_EQ(1u, events.size()); |
| 473 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); | 472 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); |
| 474 EXPECT_EQ(4, events[0].engagement); | 473 EXPECT_EQ(4, events[0].engagement); |
| 475 | 474 |
| 476 // Record an indirect engagement type one day later. This should appear. | 475 // Record an indirect engagement type one day later. This should appear. |
| 477 AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 476 AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | 771 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( |
| 773 web_contents(), url, kTestPackageName, fourth_day)); | 772 web_contents(), url, kTestPackageName, fourth_day)); |
| 774 | 773 |
| 775 // Visit the site again; now it should be shown. | 774 // Visit the site again; now it should be shown. |
| 776 AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 775 AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
| 777 web_contents(), url, kTestPackageName, fifth_day, | 776 web_contents(), url, kTestPackageName, fifth_day, |
| 778 ui::PAGE_TRANSITION_TYPED); | 777 ui::PAGE_TRANSITION_TYPED); |
| 779 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( | 778 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( |
| 780 web_contents(), url, kTestPackageName, fifth_day)); | 779 web_contents(), url, kTestPackageName, fifth_day)); |
| 781 } | 780 } |
| 781 |
| 782 TEST_F(AppBannerSettingsHelperTest, WasLaunchedRecently) { |
| 783 GURL url(kTestURL); |
| 784 GURL url_same_origin(kSameOriginTestURL); |
| 785 GURL url2(kDifferentOriginTestURL); |
| 786 NavigateAndCommit(url); |
| 787 |
| 788 base::Time reference_time = GetReferenceTime(); |
| 789 base::Time first_day = reference_time + base::TimeDelta::FromDays(1); |
| 790 base::Time ninth_day = reference_time + base::TimeDelta::FromDays(9); |
| 791 base::Time tenth_day = reference_time + base::TimeDelta::FromDays(10); |
| 792 base::Time eleventh_day = reference_time + base::TimeDelta::FromDays(11); |
| 793 |
| 794 EXPECT_FALSE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 795 reference_time)); |
| 796 |
| 797 AppBannerSettingsHelper::RecordBannerEvent( |
| 798 web_contents(), url, kTestPackageName, |
| 799 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, |
| 800 reference_time); |
| 801 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 802 reference_time)); |
| 803 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 804 first_day)); |
| 805 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 806 ninth_day)); |
| 807 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 808 tenth_day)); |
| 809 EXPECT_FALSE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 810 eleventh_day)); |
| 811 |
| 812 // Make sure a different path under the same origin also returns true. |
| 813 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 814 web_contents(), url_same_origin, reference_time)); |
| 815 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 816 web_contents(), url_same_origin, first_day)); |
| 817 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 818 web_contents(), url_same_origin, ninth_day)); |
| 819 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 820 web_contents(), url_same_origin, tenth_day)); |
| 821 EXPECT_FALSE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 822 web_contents(), url_same_origin, eleventh_day)); |
| 823 |
| 824 // Check a different event type. |
| 825 AppBannerSettingsHelper::RecordBannerEvent( |
| 826 web_contents(), url2, kTestPackageName, |
| 827 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, reference_time); |
| 828 |
| 829 EXPECT_FALSE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 830 web_contents(), url2, reference_time)); |
| 831 EXPECT_FALSE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 832 web_contents(), url2, first_day)); |
| 833 EXPECT_FALSE(AppBannerSettingsHelper::WasLaunchedRecently( |
| 834 web_contents(), url2, ninth_day)); |
| 835 |
| 836 // Make sure that the most recent time the event is recorded is used. |
| 837 AppBannerSettingsHelper::RecordBannerEvent( |
| 838 web_contents(), url, kTestPackageName, |
| 839 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, |
| 840 first_day); |
| 841 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 842 first_day)); |
| 843 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 844 ninth_day)); |
| 845 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 846 tenth_day)); |
| 847 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(web_contents(), url, |
| 848 eleventh_day)); |
| 849 |
| 850 } |
| OLD | NEW |