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

Side by Side Diff: chrome/browser/banners/app_banner_settings_helper_unittest.cc

Issue 886643003: Use heuristic to work out when to prompt for app install banners. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove other patch Created 5 years, 10 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 unified diff | Download patch
OLDNEW
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 "chrome/browser/banners/app_banner_settings_helper.h" 7 #include "chrome/browser/banners/app_banner_settings_helper.h"
8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
9 9
10 namespace { 10 namespace {
11 11
12 const char kTestURL[] = "http://www.google.com"; 12 const char kTestURL[] = "http://www.google.com";
13 const char kTestPackageName[] = "test.package"; 13 const char kTestPackageName[] = "test.package";
14 14
15 base::Time GetReferenceTime() {
16 base::Time::Exploded exploded_reference_time;
17 exploded_reference_time.year = 2015;
18 exploded_reference_time.month = 1;
19 exploded_reference_time.day_of_month = 30;
20 exploded_reference_time.day_of_week = 5;
21 exploded_reference_time.hour = 11;
22 exploded_reference_time.minute = 0;
23 exploded_reference_time.second = 0;
24 exploded_reference_time.millisecond = 0;
25
26 return base::Time::FromLocalExploded(exploded_reference_time);
27 }
28
15 bool IsWithinDay(base::Time time1, base::Time time2) { 29 bool IsWithinDay(base::Time time1, base::Time time2) {
16 return time1 - time2 < base::TimeDelta::FromDays(1) || 30 return time1 - time2 < base::TimeDelta::FromDays(1) ||
17 time2 - time1 < base::TimeDelta::FromDays(1); 31 time2 - time1 < base::TimeDelta::FromDays(1);
18 } 32 }
19 33
20 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {}; 34 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {};
21 35
22 } // namespace 36 } // namespace
23 37
24 TEST_F(AppBannerSettingsHelperTest, Block) { 38 TEST_F(AppBannerSettingsHelperTest, Block) {
(...skipping 13 matching lines...) Expand all
38 TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { 52 TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
39 GURL url(kTestURL); 53 GURL url(kTestURL);
40 NavigateAndCommit(url); 54 NavigateAndCommit(url);
41 55
42 // Check that by default, there are no events recorded. 56 // Check that by default, there are no events recorded.
43 std::vector<base::Time> events = 57 std::vector<base::Time> events =
44 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, 58 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url,
45 kTestPackageName); 59 kTestPackageName);
46 EXPECT_TRUE(events.empty()); 60 EXPECT_TRUE(events.empty());
47 61
48 base::Time::Exploded exploded_reference_time; 62 base::Time reference_time = GetReferenceTime();
49 exploded_reference_time.year = 2015;
50 exploded_reference_time.month = 1;
51 exploded_reference_time.day_of_month = 30;
52 exploded_reference_time.day_of_week = 5;
53 exploded_reference_time.hour = 11;
54 exploded_reference_time.minute = 0;
55 exploded_reference_time.second = 0;
56 exploded_reference_time.millisecond = 0;
57
58 base::Time reference_time =
59 base::Time::FromLocalExploded(exploded_reference_time);
60 base::Time same_day = reference_time + base::TimeDelta::FromHours(2); 63 base::Time same_day = reference_time + base::TimeDelta::FromHours(2);
61 base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3); 64 base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3);
62 base::Time previous_fortnight = 65 base::Time previous_fortnight =
63 reference_time - base::TimeDelta::FromDays(14); 66 reference_time - base::TimeDelta::FromDays(14);
64 67
65 // Test adding the first date. 68 // Test adding the first date.
66 AppBannerSettingsHelper::RecordCouldShowBannerEvent( 69 AppBannerSettingsHelper::RecordBannerEvent(
67 web_contents(), url, kTestPackageName, previous_fortnight); 70 web_contents(), url, kTestPackageName,
71 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, previous_fortnight);
68 72
69 // It should be the only date recorded. 73 // It should be the only date recorded.
70 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( 74 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
71 web_contents(), url, kTestPackageName); 75 web_contents(), url, kTestPackageName);
72 EXPECT_EQ(1u, events.size()); 76 EXPECT_EQ(1u, events.size());
73 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight)); 77 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight));
74 78
75 // Now add the next date. 79 // Now add the next date.
76 AppBannerSettingsHelper::RecordCouldShowBannerEvent( 80 AppBannerSettingsHelper::RecordBannerEvent(
77 web_contents(), url, kTestPackageName, three_days_prior); 81 web_contents(), url, kTestPackageName,
82 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, three_days_prior);
78 83
79 // Now there should be two days. 84 // Now there should be two days.
80 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( 85 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
81 web_contents(), url, kTestPackageName); 86 web_contents(), url, kTestPackageName);
82 EXPECT_EQ(2u, events.size()); 87 EXPECT_EQ(2u, events.size());
83 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight)); 88 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight));
84 EXPECT_TRUE(IsWithinDay(events[1], three_days_prior)); 89 EXPECT_TRUE(IsWithinDay(events[1], three_days_prior));
85 90
86 // Now add the reference date. 91 // Now add the reference date.
87 AppBannerSettingsHelper::RecordCouldShowBannerEvent( 92 AppBannerSettingsHelper::RecordBannerEvent(
88 web_contents(), url, kTestPackageName, reference_time); 93 web_contents(), url, kTestPackageName,
94 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
89 95
90 // Now there should still be two days, but the first date should have been 96 // Now there should still be two days, but the first date should have been
91 // removed. 97 // removed.
92 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( 98 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
93 web_contents(), url, kTestPackageName); 99 web_contents(), url, kTestPackageName);
94 EXPECT_EQ(2u, events.size()); 100 EXPECT_EQ(2u, events.size());
95 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior)); 101 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior));
96 EXPECT_TRUE(IsWithinDay(events[1], reference_time)); 102 EXPECT_TRUE(IsWithinDay(events[1], reference_time));
97 103
98 // Now add the the other day on the reference date. 104 // Now add the the other day on the reference date.
99 AppBannerSettingsHelper::RecordCouldShowBannerEvent( 105 AppBannerSettingsHelper::RecordBannerEvent(
100 web_contents(), url, kTestPackageName, same_day); 106 web_contents(), url, kTestPackageName,
107 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, same_day);
101 108
102 // Now there should still be the same two days. 109 // Now there should still be the same two days.
103 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( 110 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
104 web_contents(), url, kTestPackageName); 111 web_contents(), url, kTestPackageName);
105 EXPECT_EQ(2u, events.size()); 112 EXPECT_EQ(2u, events.size());
106 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior)); 113 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior));
107 EXPECT_TRUE(IsWithinDay(events[1], reference_time)); 114 EXPECT_TRUE(IsWithinDay(events[1], reference_time));
108 } 115 }
116
117 TEST_F(AppBannerSettingsHelperTest, SingleEvents) {
118 GURL url(kTestURL);
119 NavigateAndCommit(url);
120
121 base::Time reference_time = GetReferenceTime();
122 base::Time other_time = reference_time - base::TimeDelta::FromDays(3);
123 for (int event = AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW;
124 event < AppBannerSettingsHelper::APP_BANNER_EVENT_NUM_EVENTS; ++event) {
125 // Check that by default, there is no event.
126 base::Time event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
127 web_contents(), url, kTestPackageName,
128 AppBannerSettingsHelper::AppBannerEvent(event));
129 EXPECT_TRUE(event_time.is_null());
130
131 // Check that a time can be recorded.
132 AppBannerSettingsHelper::RecordBannerEvent(
133 web_contents(), url, kTestPackageName,
134 AppBannerSettingsHelper::AppBannerEvent(event), reference_time);
135
136 event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
137 web_contents(), url, kTestPackageName,
138 AppBannerSettingsHelper::AppBannerEvent(event));
139 EXPECT_EQ(reference_time, event_time);
140
141 // Check that another time can be recorded.
142 AppBannerSettingsHelper::RecordBannerEvent(
143 web_contents(), url, kTestPackageName,
144 AppBannerSettingsHelper::AppBannerEvent(event), other_time);
145
146 event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
147 web_contents(), url, kTestPackageName,
148 AppBannerSettingsHelper::AppBannerEvent(event));
149 EXPECT_EQ(other_time, event_time);
150 }
151 }
152
153 TEST_F(AppBannerSettingsHelperTest, ShouldShow) {
gone 2015/02/05 22:21:10 Maybe split into multiple tests?
benwells 2015/02/06 16:36:28 Done.
154 GURL url(kTestURL);
155 NavigateAndCommit(url);
156
157 base::Time reference_time = GetReferenceTime();
158 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
159 base::Time three_weeks_ago = reference_time - base::TimeDelta::FromDays(21);
160 base::Time four_months_ago = reference_time - base::TimeDelta::FromDays(120);
161 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
162
163 // By default the banner should not be shown.
164 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
165 web_contents(), url, kTestPackageName, reference_time));
166
167 // Visit the site one, it still should not be shown.
gone 2015/02/05 22:21:10 one year later?
benwells 2015/02/06 16:36:28 Something like that. Fixed.
168 AppBannerSettingsHelper::RecordBannerEvent(
169 web_contents(), url, kTestPackageName,
170 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_year_ago);
171 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
172 web_contents(), url, kTestPackageName, reference_time));
173
174 // Visit the site again after a long delay, it still should not be shown.
175 AppBannerSettingsHelper::RecordBannerEvent(
176 web_contents(), url, kTestPackageName,
177 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
178 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
179 web_contents(), url, kTestPackageName, reference_time));
180
181 // Visit the site again; now it should be shown.
182 AppBannerSettingsHelper::RecordBannerEvent(
183 web_contents(), url, kTestPackageName,
184 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
185 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
186 web_contents(), url, kTestPackageName, reference_time));
187
188 // Block the site a long time ago. It should still be shown.
189 AppBannerSettingsHelper::RecordBannerEvent(
190 web_contents(), url, kTestPackageName,
191 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, one_year_ago);
192 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
193 web_contents(), url, kTestPackageName, reference_time));
194
195 // Block the site more recently. Now it should not be shown.
196 AppBannerSettingsHelper::RecordBannerEvent(
197 web_contents(), url, kTestPackageName,
198 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, four_months_ago);
199 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
200 web_contents(), url, kTestPackageName, reference_time));
201
202 // Clear the block event.
203 AppBannerSettingsHelper::RecordBannerEvent(
204 web_contents(), url, kTestPackageName,
205 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time());
206 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
207 web_contents(), url, kTestPackageName, reference_time));
208
209 // Show the banner a long time ago. It should still be shown.
210 AppBannerSettingsHelper::RecordBannerEvent(
211 web_contents(), url, kTestPackageName,
212 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, one_year_ago);
213 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
214 web_contents(), url, kTestPackageName, reference_time));
215
216 // Show the site more recently. Now it should not be shown.
217 AppBannerSettingsHelper::RecordBannerEvent(
218 web_contents(), url, kTestPackageName,
219 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, three_weeks_ago);
220 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
221 web_contents(), url, kTestPackageName, reference_time));
222
223 // Clear the show event.
224 AppBannerSettingsHelper::RecordBannerEvent(
225 web_contents(), url, kTestPackageName,
226 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, base::Time());
227 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
228 web_contents(), url, kTestPackageName, reference_time));
229
230 // Add the site a long time ago. It should not be shown.
231 AppBannerSettingsHelper::RecordBannerEvent(
232 web_contents(), url, kTestPackageName,
233 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
234 one_year_ago);
235 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
236 web_contents(), url, kTestPackageName, reference_time));
237 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698