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

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: Review feedback 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
« no previous file with comments | « chrome/browser/banners/app_banner_settings_helper.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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, ShouldShowFromEngagement) {
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 one_year_ago = reference_time - base::TimeDelta::FromDays(366);
160
161 // By default the banner should not be shown.
162 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
163 web_contents(), url, kTestPackageName, reference_time));
164
165 // Visit the site once, it still should not be shown.
166 AppBannerSettingsHelper::RecordBannerEvent(
167 web_contents(), url, kTestPackageName,
168 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_year_ago);
169 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
170 web_contents(), url, kTestPackageName, reference_time));
171
172 // Visit the site again after a long delay, it still should not be shown.
173 AppBannerSettingsHelper::RecordBannerEvent(
174 web_contents(), url, kTestPackageName,
175 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
176 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
177 web_contents(), url, kTestPackageName, reference_time));
178
179 // Visit the site again; now it should be shown.
180 AppBannerSettingsHelper::RecordBannerEvent(
181 web_contents(), url, kTestPackageName,
182 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
183 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
184 web_contents(), url, kTestPackageName, reference_time));
185 }
186
187 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) {
188 GURL url(kTestURL);
189 NavigateAndCommit(url);
190
191 base::Time reference_time = GetReferenceTime();
192 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
193 base::Time two_months_ago = reference_time - base::TimeDelta::FromDays(60);
194 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
195
196 // By default the banner should not be shown.
197 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
198 web_contents(), url, kTestPackageName, reference_time));
199
200 // Record events such that the banner should show.
201 AppBannerSettingsHelper::RecordBannerEvent(
202 web_contents(), url, kTestPackageName,
203 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
204 AppBannerSettingsHelper::RecordBannerEvent(
205 web_contents(), url, kTestPackageName,
206 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
207 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
208 web_contents(), url, kTestPackageName, reference_time));
209
210 // Block the site a long time ago. It should still be shown.
211 AppBannerSettingsHelper::RecordBannerEvent(
212 web_contents(), url, kTestPackageName,
213 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, one_year_ago);
214 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
215 web_contents(), url, kTestPackageName, reference_time));
216
217 // Block the site more recently. Now it should not be shown.
218 AppBannerSettingsHelper::RecordBannerEvent(
219 web_contents(), url, kTestPackageName,
220 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, two_months_ago);
221 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
222 web_contents(), url, kTestPackageName, reference_time));
223 }
224
225 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) {
226 GURL url(kTestURL);
227 NavigateAndCommit(url);
228
229 base::Time reference_time = GetReferenceTime();
230 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
231 base::Time three_weeks_ago = reference_time - base::TimeDelta::FromDays(21);
232 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
233
234 // By default the banner should not be shown.
235 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
236 web_contents(), url, kTestPackageName, reference_time));
237
238 // Record events such that the banner should show.
239 AppBannerSettingsHelper::RecordBannerEvent(
240 web_contents(), url, kTestPackageName,
241 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
242 AppBannerSettingsHelper::RecordBannerEvent(
243 web_contents(), url, kTestPackageName,
244 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
245 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
246 web_contents(), url, kTestPackageName, reference_time));
247
248 // Show the banner a long time ago. It should still be shown.
249 AppBannerSettingsHelper::RecordBannerEvent(
250 web_contents(), url, kTestPackageName,
251 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, one_year_ago);
252 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
253 web_contents(), url, kTestPackageName, reference_time));
254
255 // Show the site more recently. Now it should not be shown.
256 AppBannerSettingsHelper::RecordBannerEvent(
257 web_contents(), url, kTestPackageName,
258 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, three_weeks_ago);
259 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
260 web_contents(), url, kTestPackageName, reference_time));
261 }
262
263 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) {
264 GURL url(kTestURL);
265 NavigateAndCommit(url);
266
267 base::Time reference_time = GetReferenceTime();
268 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
269 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
270
271 // By default the banner should not be shown.
272 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
273 web_contents(), url, kTestPackageName, reference_time));
274
275 // Record events such that the banner should show.
276 AppBannerSettingsHelper::RecordBannerEvent(
277 web_contents(), url, kTestPackageName,
278 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
279 AppBannerSettingsHelper::RecordBannerEvent(
280 web_contents(), url, kTestPackageName,
281 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
282 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
283 web_contents(), url, kTestPackageName, reference_time));
284
285 // Add the site a long time ago. It should not be shown.
286 AppBannerSettingsHelper::RecordBannerEvent(
287 web_contents(), url, kTestPackageName,
288 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
289 one_year_ago);
290 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
291 web_contents(), url, kTestPackageName, reference_time));
292 }
OLDNEW
« 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