Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: chrome/browser/banners/app_banner_settings_helper_unittest.cc

Issue 1306693005: Allow the minimum time between banner trigger visits to be varied via field trials. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit tests Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/banners/app_banner_settings_helper.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/banners/app_banner_settings_helper_unittest.cc
diff --git a/chrome/browser/banners/app_banner_settings_helper_unittest.cc b/chrome/browser/banners/app_banner_settings_helper_unittest.cc
index 73853d7ca7b1b9bf803477d24c0c7bb8e1bb566b..82550f15b6700a5acae9ad0e4de4880c14904c90 100644
--- a/chrome/browser/banners/app_banner_settings_helper_unittest.cc
+++ b/chrome/browser/banners/app_banner_settings_helper_unittest.cc
@@ -42,8 +42,170 @@ class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {};
} // namespace
+TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionInvalid) {
+ base::Time reference_time = GetReferenceTime();
+
+ // Test null, 1 day, and greater than 1 day cases.
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 0),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1440),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 2880),
+ reference_time.LocalMidnight());
+
+ // Test number of minutes in 1 day + 1.
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1441),
+ reference_time.LocalMidnight());
+
+ // Test minutes which are not divisible by 1440 (minutes in a day).
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 7),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 13),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 21),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 35),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 42),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 50),
+ reference_time.LocalMidnight());
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 59),
+ reference_time.LocalMidnight());
+}
+
+TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionValid) {
+ // 11:00
+ base::Time reference_time = GetReferenceTime();
+ // 13:44
+ base::Time same_day_later =
+ reference_time + base::TimeDelta::FromMinutes(164);
+ // 10:18
+ base::Time same_day_earlier =
+ reference_time - base::TimeDelta::FromMinutes(42);
+ base::Time midnight = reference_time.LocalMidnight();
+ base::Time bucketed_hour = midnight + base::TimeDelta::FromHours(11);
+ base::Time bucketed_hour_later = midnight + base::TimeDelta::FromHours(13);
+ base::Time bucketed_hour_earlier = midnight + base::TimeDelta::FromHours(10);
+
+ // Resolution of 1 minute: 11:00, 13:44, 10:18.
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1),
+ bucketed_hour);
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 1),
+ bucketed_hour_later + base::TimeDelta::FromMinutes(44));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 1),
+ bucketed_hour_earlier + base::TimeDelta::FromMinutes(18));
+
+ // Resolution of 3 minutes: 11:00, 13:43, 10:18.
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 3),
+ bucketed_hour);
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 3),
+ bucketed_hour_later + base::TimeDelta::FromMinutes(42));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 3),
+ bucketed_hour_earlier + base::TimeDelta::FromMinutes(18));
+
+ // Resolution of 10 minutes: 11:00, 13:40, 10:10.
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 10),
+ bucketed_hour);
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 10),
+ bucketed_hour_later + base::TimeDelta::FromMinutes(40));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 10),
+ bucketed_hour_earlier + base::TimeDelta::FromMinutes(10));
+
+ // Resolution of 20 minutes: 11:00, 13:40, 10:00.
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 20),
+ bucketed_hour);
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 20),
+ bucketed_hour_later + base::TimeDelta::FromMinutes(40));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 20),
+ bucketed_hour_earlier);
+
+ // Resolution of 60 minutes: 11:00, 13:00, 10:00.
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 60),
+ bucketed_hour);
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 60),
+ bucketed_hour_later);
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 60),
+ bucketed_hour_earlier);
+
+ // Resolution of 120 minutes: 10:00, 12:00, 10:00.
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 120),
+ bucketed_hour_earlier);
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 120),
+ bucketed_hour_later - base::TimeDelta::FromHours(1));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 120),
+ bucketed_hour_earlier);
+
+ // Resolution of 180 minutes: 9:00, 12:00, 9:00.
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 180),
+ bucketed_hour_earlier - base::TimeDelta::FromHours(1));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 180),
+ bucketed_hour_later - base::TimeDelta::FromHours(1));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 180),
+ bucketed_hour_earlier - base::TimeDelta::FromHours(1));
+
+ // Resolution of 240 minutes: 8:00, 12:00, 8:00.
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 240),
+ midnight + base::TimeDelta::FromHours(8));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 240),
+ midnight + base::TimeDelta::FromHours(12));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 240),
+ midnight + base::TimeDelta::FromHours(8));
+
+ // Resolution of 360 minutes: 6:00, 12:00, 6:00
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 360),
+ midnight + base::TimeDelta::FromHours(6));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 360),
+ midnight + base::TimeDelta::FromHours(12));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 360),
+ midnight + base::TimeDelta::FromHours(6));
+
+ // Resolution of 720 minutes: 0:00, 12:00, 0:00
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 720),
+ midnight);
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 720),
+ midnight + base::TimeDelta::FromHours(12));
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 720),
+ midnight);
+
+ // Resolution of 1440 minutes: 0:00, 0:00, 0:00
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1440),
+ midnight);
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 1440),
+ midnight);
+ EXPECT_EQ(
+ AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 1440),
+ midnight);
+}
+
TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
AppBannerSettingsHelper::SetEngagementWeights(1, 1);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440);
GURL url(kTestURL);
NavigateAndCommit(url);
@@ -76,7 +238,7 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
web_contents(), url, kTestPackageName, three_days_prior,
ui::PAGE_TRANSITION_GENERATED);
- // Now there should be two days.
+ // Now there should be two events.
events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
web_contents(), url, kTestPackageName);
EXPECT_EQ(2u, events.size());
@@ -90,7 +252,7 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
web_contents(), url, kTestPackageName, reference_time,
ui::PAGE_TRANSITION_LINK);
- // Now there should still be two days, but the first date should have been
+ // Now there should still be two events, but the first date should have been
// removed.
events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
web_contents(), url, kTestPackageName);
@@ -100,12 +262,12 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
EXPECT_EQ(events[0].engagement, 1);
EXPECT_EQ(events[1].engagement, 1);
- // Now add the the other day on the reference date.
+ // Now add the the other date on the reference day.
AppBannerSettingsHelper::RecordBannerCouldShowEvent(
web_contents(), url, kTestPackageName, same_day,
ui::PAGE_TRANSITION_RELOAD);
- // Now there should still be the same two days.
+ // Now there should still be the same two dates.
events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
web_contents(), url, kTestPackageName);
EXPECT_EQ(2u, events.size());
@@ -115,8 +277,102 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
EXPECT_EQ(events[1].engagement, 1);
}
+TEST_F(AppBannerSettingsHelperTest, CouldShowEventsDifferentResolution) {
+ AppBannerSettingsHelper::SetEngagementWeights(1, 1);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(20);
+ GURL url(kTestURL);
+ NavigateAndCommit(url);
+
+ // Check that by default, there are no events recorded.
+ std::vector<AppBannerSettingsHelper::BannerEvent> events =
+ AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url,
+ kTestPackageName);
+ EXPECT_TRUE(events.empty());
+
+ base::Time reference_time = GetReferenceTime();
+ base::Time same_day_ignored_i =
+ reference_time + base::TimeDelta::FromMinutes(10);
+ base::Time same_day_counted_i =
+ reference_time + base::TimeDelta::FromMinutes(20);
+ base::Time same_day_counted_ii =
+ reference_time + base::TimeDelta::FromMinutes(45);
+ base::Time same_day_ignored_ii =
+ reference_time + base::TimeDelta::FromMinutes(59);
+
+ // Add the reference date.
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent(
+ web_contents(), url, kTestPackageName, reference_time,
+ ui::PAGE_TRANSITION_LINK);
+
+ // There should be one event recorded
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
+ web_contents(), url, kTestPackageName);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
+ EXPECT_EQ(events[0].engagement, 1);
+
+ // Now add the the ignored date on the reference day.
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent(
+ web_contents(), url, kTestPackageName, same_day_ignored_i,
+ ui::PAGE_TRANSITION_RELOAD);
+
+ // Now there should still one event.
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
+ web_contents(), url, kTestPackageName);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
+ EXPECT_EQ(events[0].engagement, 1);
+
+ // Now add the the first counted date on the reference day.
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent(
+ web_contents(), url, kTestPackageName, same_day_counted_i,
+ ui::PAGE_TRANSITION_TYPED);
+
+ // Now there should be two events.
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
+ web_contents(), url, kTestPackageName);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
+ EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i));
+ EXPECT_EQ(events[0].engagement, 1);
+ EXPECT_EQ(events[1].engagement, 1);
+
+ // Now add the the second counted date on the reference day.
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent(
+ web_contents(), url, kTestPackageName, same_day_counted_ii,
+ ui::PAGE_TRANSITION_GENERATED);
+
+ // Now there should be three events.
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
+ web_contents(), url, kTestPackageName);
+ EXPECT_EQ(3u, events.size());
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
+ EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i));
+ EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii));
+ EXPECT_EQ(events[0].engagement, 1);
+ EXPECT_EQ(events[1].engagement, 1);
+ EXPECT_EQ(events[2].engagement, 1);
+
+ // Now add the the second ignored date on the reference day.
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent(
+ web_contents(), url, kTestPackageName, same_day_ignored_ii,
+ ui::PAGE_TRANSITION_LINK);
+
+ // Now there should still be three events.
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
+ web_contents(), url, kTestPackageName);
+ EXPECT_EQ(3u, events.size());
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
+ EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i));
+ EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii));
+ EXPECT_EQ(events[0].engagement, 1);
+ EXPECT_EQ(events[1].engagement, 1);
+ EXPECT_EQ(events[2].engagement, 1);
+}
+
TEST_F(AppBannerSettingsHelperTest, SingleEvents) {
AppBannerSettingsHelper::SetEngagementWeights(1, 1);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440);
GURL url(kTestURL);
NavigateAndCommit(url);
@@ -239,6 +495,7 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEventReplacedWithHigherWeight) {
TEST_F(AppBannerSettingsHelperTest, IndirectEngagementWithLowerWeight) {
AppBannerSettingsHelper::SetEngagementWeights(2, 0.5);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440);
GURL url(kTestURL);
NavigateAndCommit(url);
@@ -300,6 +557,7 @@ TEST_F(AppBannerSettingsHelperTest, DirectEngagementWithHigherWeight) {
TEST_F(AppBannerSettingsHelperTest, ShouldShowFromEngagement) {
AppBannerSettingsHelper::SetEngagementWeights(1, 1);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440);
GURL url(kTestURL);
NavigateAndCommit(url);
@@ -374,6 +632,7 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) {
TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) {
AppBannerSettingsHelper::SetEngagementWeights(1, 1);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440);
GURL url(kTestURL);
NavigateAndCommit(url);
@@ -413,6 +672,7 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) {
TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) {
AppBannerSettingsHelper::SetEngagementWeights(1, 1);
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440);
GURL url(kTestURL);
NavigateAndCommit(url);
« no previous file with comments | « chrome/browser/banners/app_banner_settings_helper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698