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

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

Issue 2553013004: Remove the app banner navigation heuristic. (Closed)
Patch Set: Add comments Created 4 years 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') | chrome/common/chrome_switches.h » ('j') | 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>
6
7 #include "base/command_line.h"
8 #include "chrome/browser/banners/app_banner_metrics.h" 5 #include "chrome/browser/banners/app_banner_metrics.h"
9 #include "chrome/browser/banners/app_banner_settings_helper.h" 6 #include "chrome/browser/banners/app_banner_settings_helper.h"
10 #include "chrome/browser/engagement/site_engagement_service.h" 7 #include "chrome/browser/engagement/site_engagement_service.h"
11 #include "chrome/browser/installable/installable_logging.h" 8 #include "chrome/browser/installable/installable_logging.h"
12 #include "chrome/common/chrome_switches.h"
13 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 9 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
14 #include "chrome/test/base/testing_profile.h" 10 #include "chrome/test/base/testing_profile.h"
15 #include "ui/base/page_transition_types.h"
16 11
17 namespace { 12 namespace {
18 13
19 const char kTestURL[] = "https://www.google.com"; 14 const char kTestURL[] = "https://www.google.com";
20 const char kSameOriginTestURL[] = "https://www.google.com/foo.html"; 15 const char kSameOriginTestURL[] = "https://www.google.com/foo.html";
21 const char kDifferentOriginTestURL[] = "https://www.example.com"; 16 const char kDifferentOriginTestURL[] = "https://www.example.com";
22 const char kTestPackageName[] = "test.package"; 17 const char kTestPackageName[] = "test.package";
23 18
24 base::Time GetReferenceTime() { 19 base::Time GetReferenceTime() {
25 base::Time::Exploded exploded_reference_time; 20 base::Time::Exploded exploded_reference_time;
26 exploded_reference_time.year = 2015; 21 exploded_reference_time.year = 2015;
27 exploded_reference_time.month = 1; 22 exploded_reference_time.month = 1;
28 exploded_reference_time.day_of_month = 30; 23 exploded_reference_time.day_of_month = 30;
29 exploded_reference_time.day_of_week = 5; 24 exploded_reference_time.day_of_week = 5;
30 exploded_reference_time.hour = 11; 25 exploded_reference_time.hour = 11;
31 exploded_reference_time.minute = 0; 26 exploded_reference_time.minute = 0;
32 exploded_reference_time.second = 0; 27 exploded_reference_time.second = 0;
33 exploded_reference_time.millisecond = 0; 28 exploded_reference_time.millisecond = 0;
34 29
35 base::Time out_time; 30 base::Time out_time;
36 EXPECT_TRUE( 31 EXPECT_TRUE(
37 base::Time::FromLocalExploded(exploded_reference_time, &out_time)); 32 base::Time::FromLocalExploded(exploded_reference_time, &out_time));
38 return out_time; 33 return out_time;
39 } 34 }
40 35
41 bool IsWithinDay(base::Time time1, base::Time time2) {
42 return time1 - time2 < base::TimeDelta::FromDays(1) ||
43 time2 - time1 < base::TimeDelta::FromDays(1);
44 }
45
46 bool IsWithinHour(base::Time time1, base::Time time2) {
47 return time1 - time2 < base::TimeDelta::FromHours(1) ||
48 time2 - time1 < base::TimeDelta::FromHours(1);
49 }
50
51 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness { 36 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {
52 void SetUp() override { 37 void SetUp() override {
53 ChromeRenderViewHostTestHarness::SetUp(); 38 ChromeRenderViewHostTestHarness::SetUp();
54 AppBannerSettingsHelper::SetDefaultParameters(); 39 AppBannerSettingsHelper::SetDefaultParameters();
55 } 40 }
56 }; 41 };
57 42
58 } // namespace 43 } // namespace
59 44
60 TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionInvalid) {
61 base::Time reference_time = GetReferenceTime();
62
63 // Test null, 1 day, and greater than 1 day cases.
64 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 0),
65 reference_time.LocalMidnight());
66 EXPECT_EQ(
67 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1440),
68 reference_time.LocalMidnight());
69 EXPECT_EQ(
70 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 2880),
71 reference_time.LocalMidnight());
72
73 // Test number of minutes in 1 day + 1.
74 EXPECT_EQ(
75 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1441),
76 reference_time.LocalMidnight());
77
78 // Test minutes which are not divisible by 1440 (minutes in a day).
79 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 7),
80 reference_time.LocalMidnight());
81 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 13),
82 reference_time.LocalMidnight());
83 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 21),
84 reference_time.LocalMidnight());
85 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 35),
86 reference_time.LocalMidnight());
87 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 42),
88 reference_time.LocalMidnight());
89 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 50),
90 reference_time.LocalMidnight());
91 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 59),
92 reference_time.LocalMidnight());
93 }
94
95 TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionValid) {
96 // 11:00
97 base::Time reference_time = GetReferenceTime();
98 // 13:44
99 base::Time same_day_later =
100 reference_time + base::TimeDelta::FromMinutes(164);
101 // 10:18
102 base::Time same_day_earlier =
103 reference_time - base::TimeDelta::FromMinutes(42);
104 base::Time midnight = reference_time.LocalMidnight();
105 base::Time bucketed_hour = midnight + base::TimeDelta::FromHours(11);
106 base::Time bucketed_hour_later = midnight + base::TimeDelta::FromHours(13);
107 base::Time bucketed_hour_earlier = midnight + base::TimeDelta::FromHours(10);
108
109 // Resolution of 1 minute: 11:00, 13:44, 10:18.
110 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1),
111 bucketed_hour);
112 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 1),
113 bucketed_hour_later + base::TimeDelta::FromMinutes(44));
114 EXPECT_EQ(
115 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 1),
116 bucketed_hour_earlier + base::TimeDelta::FromMinutes(18));
117
118 // Resolution of 3 minutes: 11:00, 13:43, 10:18.
119 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 3),
120 bucketed_hour);
121 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 3),
122 bucketed_hour_later + base::TimeDelta::FromMinutes(42));
123 EXPECT_EQ(
124 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 3),
125 bucketed_hour_earlier + base::TimeDelta::FromMinutes(18));
126
127 // Resolution of 10 minutes: 11:00, 13:40, 10:10.
128 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 10),
129 bucketed_hour);
130 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 10),
131 bucketed_hour_later + base::TimeDelta::FromMinutes(40));
132 EXPECT_EQ(
133 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 10),
134 bucketed_hour_earlier + base::TimeDelta::FromMinutes(10));
135
136 // Resolution of 20 minutes: 11:00, 13:40, 10:00.
137 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 20),
138 bucketed_hour);
139 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 20),
140 bucketed_hour_later + base::TimeDelta::FromMinutes(40));
141 EXPECT_EQ(
142 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 20),
143 bucketed_hour_earlier);
144
145 // Resolution of 60 minutes: 11:00, 13:00, 10:00.
146 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 60),
147 bucketed_hour);
148 EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 60),
149 bucketed_hour_later);
150 EXPECT_EQ(
151 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 60),
152 bucketed_hour_earlier);
153
154 // Resolution of 120 minutes: 10:00, 12:00, 10:00.
155 EXPECT_EQ(
156 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 120),
157 bucketed_hour_earlier);
158 EXPECT_EQ(
159 AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 120),
160 bucketed_hour_later - base::TimeDelta::FromHours(1));
161 EXPECT_EQ(
162 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 120),
163 bucketed_hour_earlier);
164
165 // Resolution of 180 minutes: 9:00, 12:00, 9:00.
166 EXPECT_EQ(
167 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 180),
168 bucketed_hour_earlier - base::TimeDelta::FromHours(1));
169 EXPECT_EQ(
170 AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 180),
171 bucketed_hour_later - base::TimeDelta::FromHours(1));
172 EXPECT_EQ(
173 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 180),
174 bucketed_hour_earlier - base::TimeDelta::FromHours(1));
175
176 // Resolution of 240 minutes: 8:00, 12:00, 8:00.
177 EXPECT_EQ(
178 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 240),
179 midnight + base::TimeDelta::FromHours(8));
180 EXPECT_EQ(
181 AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 240),
182 midnight + base::TimeDelta::FromHours(12));
183 EXPECT_EQ(
184 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 240),
185 midnight + base::TimeDelta::FromHours(8));
186
187 // Resolution of 360 minutes: 6:00, 12:00, 6:00
188 EXPECT_EQ(
189 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 360),
190 midnight + base::TimeDelta::FromHours(6));
191 EXPECT_EQ(
192 AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 360),
193 midnight + base::TimeDelta::FromHours(12));
194 EXPECT_EQ(
195 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 360),
196 midnight + base::TimeDelta::FromHours(6));
197
198 // Resolution of 720 minutes: 0:00, 12:00, 0:00
199 EXPECT_EQ(
200 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 720),
201 midnight);
202 EXPECT_EQ(
203 AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 720),
204 midnight + base::TimeDelta::FromHours(12));
205 EXPECT_EQ(
206 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 720),
207 midnight);
208
209 // Resolution of 1440 minutes: 0:00, 0:00, 0:00
210 EXPECT_EQ(
211 AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1440),
212 midnight);
213 EXPECT_EQ(
214 AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 1440),
215 midnight);
216 EXPECT_EQ(
217 AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 1440),
218 midnight);
219 }
220
221 TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
222 GURL url(kTestURL);
223 NavigateAndCommit(url);
224
225 // Check that by default, there are no events recorded.
226 std::vector<AppBannerSettingsHelper::BannerEvent> events =
227 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url,
228 kTestPackageName);
229 EXPECT_TRUE(events.empty());
230
231 base::Time reference_time = GetReferenceTime();
232 base::Time same_day = reference_time + base::TimeDelta::FromHours(2);
233 base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3);
234 base::Time previous_fortnight =
235 reference_time - base::TimeDelta::FromDays(14);
236
237 // Test adding the first date.
238 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
239 web_contents(), url, kTestPackageName, previous_fortnight,
240 ui::PAGE_TRANSITION_TYPED);
241
242 // It should be the only date recorded.
243 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
244 web_contents(), url, kTestPackageName);
245 EXPECT_EQ(1u, events.size());
246 EXPECT_TRUE(IsWithinDay(events[0].time, previous_fortnight));
247 EXPECT_EQ(events[0].engagement, 1);
248
249 // Now add the next date.
250 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
251 web_contents(), url, kTestPackageName, three_days_prior,
252 ui::PAGE_TRANSITION_GENERATED);
253
254 // Now there should be two events.
255 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
256 web_contents(), url, kTestPackageName);
257 EXPECT_EQ(2u, events.size());
258 EXPECT_TRUE(IsWithinDay(events[0].time, previous_fortnight));
259 EXPECT_TRUE(IsWithinDay(events[1].time, three_days_prior));
260 EXPECT_EQ(events[0].engagement, 1);
261 EXPECT_EQ(events[1].engagement, 1);
262
263 // Now add the reference date.
264 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
265 web_contents(), url, kTestPackageName, reference_time,
266 ui::PAGE_TRANSITION_LINK);
267
268 // Now there should still be two events, but the first date should have been
269 // removed.
270 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
271 web_contents(), url, kTestPackageName);
272 EXPECT_EQ(2u, events.size());
273 EXPECT_TRUE(IsWithinDay(events[0].time, three_days_prior));
274 EXPECT_TRUE(IsWithinDay(events[1].time, reference_time));
275 EXPECT_EQ(events[0].engagement, 1);
276 EXPECT_EQ(events[1].engagement, 1);
277
278 // Now add the the other date on the reference day.
279 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
280 web_contents(), url, kTestPackageName, same_day,
281 ui::PAGE_TRANSITION_RELOAD);
282
283 // Now there should still be the same two dates.
284 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
285 web_contents(), url, kTestPackageName);
286 EXPECT_EQ(2u, events.size());
287 EXPECT_TRUE(IsWithinDay(events[0].time, three_days_prior));
288 EXPECT_TRUE(IsWithinDay(events[1].time, reference_time));
289 EXPECT_EQ(events[0].engagement, 1);
290 EXPECT_EQ(events[1].engagement, 1);
291 }
292
293 TEST_F(AppBannerSettingsHelperTest, CouldShowEventsDifferentResolution) {
294 AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(20);
295 GURL url(kTestURL);
296 NavigateAndCommit(url);
297
298 // Check that by default, there are no events recorded.
299 std::vector<AppBannerSettingsHelper::BannerEvent> events =
300 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url,
301 kTestPackageName);
302 EXPECT_TRUE(events.empty());
303
304 base::Time reference_time = GetReferenceTime();
305 base::Time same_day_ignored_i =
306 reference_time + base::TimeDelta::FromMinutes(10);
307 base::Time same_day_counted_i =
308 reference_time + base::TimeDelta::FromMinutes(20);
309 base::Time same_day_counted_ii =
310 reference_time + base::TimeDelta::FromMinutes(45);
311 base::Time same_day_ignored_ii =
312 reference_time + base::TimeDelta::FromMinutes(59);
313
314 // Add the reference date.
315 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
316 web_contents(), url, kTestPackageName, reference_time,
317 ui::PAGE_TRANSITION_LINK);
318
319 // There should be one event recorded
320 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
321 web_contents(), url, kTestPackageName);
322 EXPECT_EQ(1u, events.size());
323 EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
324 EXPECT_EQ(events[0].engagement, 1);
325
326 // Now add the the ignored date on the reference day.
327 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
328 web_contents(), url, kTestPackageName, same_day_ignored_i,
329 ui::PAGE_TRANSITION_RELOAD);
330
331 // Now there should still one event.
332 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
333 web_contents(), url, kTestPackageName);
334 EXPECT_EQ(1u, events.size());
335 EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
336 EXPECT_EQ(events[0].engagement, 1);
337
338 // Now add the the first counted date on the reference day.
339 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
340 web_contents(), url, kTestPackageName, same_day_counted_i,
341 ui::PAGE_TRANSITION_TYPED);
342
343 // Now there should be two events.
344 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
345 web_contents(), url, kTestPackageName);
346 EXPECT_EQ(2u, events.size());
347 EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
348 EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i));
349 EXPECT_EQ(events[0].engagement, 1);
350 EXPECT_EQ(events[1].engagement, 1);
351
352 // Now add the the second counted date on the reference day.
353 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
354 web_contents(), url, kTestPackageName, same_day_counted_ii,
355 ui::PAGE_TRANSITION_GENERATED);
356
357 // Now there should be three events.
358 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
359 web_contents(), url, kTestPackageName);
360 EXPECT_EQ(3u, events.size());
361 EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
362 EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i));
363 EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii));
364 EXPECT_EQ(events[0].engagement, 1);
365 EXPECT_EQ(events[1].engagement, 1);
366 EXPECT_EQ(events[2].engagement, 1);
367
368 // Now add the the second ignored date on the reference day.
369 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
370 web_contents(), url, kTestPackageName, same_day_ignored_ii,
371 ui::PAGE_TRANSITION_LINK);
372
373 // Now there should still be three events.
374 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
375 web_contents(), url, kTestPackageName);
376 EXPECT_EQ(3u, events.size());
377 EXPECT_TRUE(IsWithinDay(events[0].time, reference_time));
378 EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i));
379 EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii));
380 EXPECT_EQ(events[0].engagement, 1);
381 EXPECT_EQ(events[1].engagement, 1);
382 EXPECT_EQ(events[2].engagement, 1);
383 }
384
385 TEST_F(AppBannerSettingsHelperTest, SingleEvents) { 45 TEST_F(AppBannerSettingsHelperTest, SingleEvents) {
386 GURL url(kTestURL); 46 GURL url(kTestURL);
387 NavigateAndCommit(url); 47 NavigateAndCommit(url);
388 48
389 base::Time reference_time = GetReferenceTime(); 49 base::Time reference_time = GetReferenceTime();
390 base::Time other_time = reference_time - base::TimeDelta::FromDays(3); 50 base::Time other_time = reference_time - base::TimeDelta::FromDays(3);
391 for (int event = AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW; 51 for (int event = AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW;
392 event < AppBannerSettingsHelper::APP_BANNER_EVENT_NUM_EVENTS; ++event) { 52 event < AppBannerSettingsHelper::APP_BANNER_EVENT_NUM_EVENTS; ++event) {
393 // Check that by default, there is no event. 53 // Check that by default, there is no event.
394 base::Time event_time = AppBannerSettingsHelper::GetSingleBannerEvent( 54 base::Time event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
395 web_contents(), url, kTestPackageName, 55 web_contents(), url, kTestPackageName,
396 AppBannerSettingsHelper::AppBannerEvent(event)); 56 AppBannerSettingsHelper::AppBannerEvent(event));
397 EXPECT_TRUE(event_time.is_null()); 57 EXPECT_TRUE(event_time.is_null());
398 58
399 // Check that a time can be recorded. 59 // Check that a time can be recorded.
400 AppBannerSettingsHelper::RecordBannerEvent( 60 AppBannerSettingsHelper::RecordBannerEvent(
401 web_contents(), url, kTestPackageName, 61 web_contents(), url, kTestPackageName,
402 AppBannerSettingsHelper::AppBannerEvent(event), reference_time); 62 AppBannerSettingsHelper::AppBannerEvent(event), reference_time);
403 63
404 event_time = AppBannerSettingsHelper::GetSingleBannerEvent( 64 event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
405 web_contents(), url, kTestPackageName, 65 web_contents(), url, kTestPackageName,
406 AppBannerSettingsHelper::AppBannerEvent(event)); 66 AppBannerSettingsHelper::AppBannerEvent(event));
407 EXPECT_EQ(reference_time, event_time); 67 EXPECT_EQ(reference_time, event_time);
408 68
409 // Check that another time can be recorded. 69 // Check that another time can be recorded.
410 AppBannerSettingsHelper::RecordBannerEvent( 70 AppBannerSettingsHelper::RecordBannerEvent(
411 web_contents(), url, kTestPackageName, 71 web_contents(), url, kTestPackageName,
412 AppBannerSettingsHelper::AppBannerEvent(event), other_time); 72 AppBannerSettingsHelper::AppBannerEvent(event), other_time);
413 73
414 event_time = AppBannerSettingsHelper::GetSingleBannerEvent( 74 event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
415 web_contents(), url, kTestPackageName, 75 web_contents(), url, kTestPackageName,
416 AppBannerSettingsHelper::AppBannerEvent(event)); 76 AppBannerSettingsHelper::AppBannerEvent(event));
417 EXPECT_EQ(other_time, event_time); 77
78 // COULD_SHOW events are not overwritten, but other events are.
79 if (event == AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW)
80 EXPECT_EQ(reference_time, event_time);
81 else
82 EXPECT_EQ(other_time, event_time);
418 } 83 }
419 } 84 }
420 85
421 TEST_F(AppBannerSettingsHelperTest, CouldShowEventReplacedWithHigherWeight) {
422 // Set direct engagement to be worth 4 and indirect to be worth 2.
423 AppBannerSettingsHelper::SetEngagementWeights(4, 2);
424 GURL url(kTestURL);
425 NavigateAndCommit(url);
426
427 base::Time reference_time = GetReferenceTime();
428 base::Time later_same_day = reference_time + base::TimeDelta::FromHours(2);
429 base::Time later_again_same_day =
430 reference_time + base::TimeDelta::FromHours(6);
431 base::Time next_day = reference_time + base::TimeDelta::FromDays(1);
432 base::Time later_next_day = next_day + base::TimeDelta::FromHours(3);
433
434 // Ensure there are no events recorded by default.
435 std::vector<AppBannerSettingsHelper::BannerEvent> events =
436 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url,
437 kTestPackageName);
438 EXPECT_TRUE(events.empty());
439
440 // Record an indirect engagement type.
441 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
442 web_contents(), url, kTestPackageName, reference_time,
443 ui::PAGE_TRANSITION_LINK);
444
445 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
446 web_contents(), url, kTestPackageName);
447
448 EXPECT_EQ(1u, events.size());
449 EXPECT_TRUE(IsWithinHour(events[0].time, reference_time));
450 EXPECT_EQ(2, events[0].engagement);
451
452 // Record a direct engagement type. This should override the previous value.
453 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
454 web_contents(), url, kTestPackageName, later_same_day,
455 ui::PAGE_TRANSITION_TYPED);
456
457 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
458 web_contents(), url, kTestPackageName);
459
460 EXPECT_EQ(1u, events.size());
461 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day));
462 EXPECT_EQ(4, events[0].engagement);
463
464 // Record an indirect engagement type. This should be ignored.
465 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
466 web_contents(), url, kTestPackageName, later_again_same_day,
467 ui::PAGE_TRANSITION_RELOAD);
468
469 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
470 web_contents(), url, kTestPackageName);
471
472 EXPECT_EQ(1u, events.size());
473 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day));
474 EXPECT_EQ(4, events[0].engagement);
475
476 // Record an indirect engagement type one day later. This should appear.
477 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
478 web_contents(), url, kTestPackageName, next_day,
479 ui::PAGE_TRANSITION_AUTO_BOOKMARK);
480
481 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
482 web_contents(), url, kTestPackageName);
483
484 EXPECT_EQ(2u, events.size());
485 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day));
486 EXPECT_EQ(4, events[0].engagement);
487 EXPECT_TRUE(IsWithinHour(events[1].time, next_day));
488 EXPECT_EQ(2, events[1].engagement);
489
490 // Record a direct engagement type later on the next day. This should override
491 // the previous value.
492 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
493 web_contents(), url, kTestPackageName, later_next_day,
494 ui::PAGE_TRANSITION_GENERATED);
495
496 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
497 web_contents(), url, kTestPackageName);
498
499 EXPECT_EQ(2u, events.size());
500 EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day));
501 EXPECT_EQ(4, events[0].engagement);
502 EXPECT_TRUE(IsWithinHour(events[1].time, later_next_day));
503 EXPECT_EQ(4, events[1].engagement);
504 }
505
506 TEST_F(AppBannerSettingsHelperTest, IndirectEngagementWithLowerWeight) {
507 AppBannerSettingsHelper::SetEngagementWeights(2, 0.5);
508 GURL url(kTestURL);
509 NavigateAndCommit(url);
510
511 base::Time reference_time = GetReferenceTime();
512 base::Time second_day = reference_time + base::TimeDelta::FromDays(1);
513 base::Time third_day = reference_time + base::TimeDelta::FromDays(2);
514 base::Time fourth_day = reference_time + base::TimeDelta::FromDays(3);
515
516 // By default the banner should not be shown.
517 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
518 AppBannerSettingsHelper::ShouldShowBanner(
519 web_contents(), url, kTestPackageName, reference_time));
520
521 // It should take four indirect visits with a weight of 0.5 to trigger the
522 // banner.
523 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
524 web_contents(), url, kTestPackageName, reference_time,
525 ui::PAGE_TRANSITION_LINK);
526 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
527 AppBannerSettingsHelper::ShouldShowBanner(
528 web_contents(), url, kTestPackageName, reference_time));
529
530 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
531 web_contents(), url, kTestPackageName, second_day,
532 ui::PAGE_TRANSITION_LINK);
533 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
534 AppBannerSettingsHelper::ShouldShowBanner(
535 web_contents(), url, kTestPackageName, second_day));
536
537 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
538 web_contents(), url, kTestPackageName, third_day,
539 ui::PAGE_TRANSITION_FORM_SUBMIT);
540 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
541 AppBannerSettingsHelper::ShouldShowBanner(
542 web_contents(), url, kTestPackageName, third_day));
543
544 // Visit the site again; now it should be shown.
545 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
546 web_contents(), url, kTestPackageName, fourth_day,
547 ui::PAGE_TRANSITION_MANUAL_SUBFRAME);
548 EXPECT_EQ(NO_ERROR_DETECTED,
549 AppBannerSettingsHelper::ShouldShowBanner(
550 web_contents(), url, kTestPackageName, fourth_day));
551 }
552
553 TEST_F(AppBannerSettingsHelperTest, DirectEngagementWithHigherWeight) {
554 AppBannerSettingsHelper::SetEngagementWeights(2, 0.5);
555 GURL url(kTestURL);
556 NavigateAndCommit(url);
557
558 base::Time reference_time = GetReferenceTime();
559
560 // By default the banner should not be shown.
561 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
562 AppBannerSettingsHelper::ShouldShowBanner(
563 web_contents(), url, kTestPackageName, reference_time));
564
565 // It should take one direct visit with a weight of 2 to trigger the banner.
566 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
567 web_contents(), url, kTestPackageName, reference_time,
568 ui::PAGE_TRANSITION_TYPED);
569 EXPECT_EQ(NO_ERROR_DETECTED,
570 AppBannerSettingsHelper::ShouldShowBanner(
571 web_contents(), url, kTestPackageName, reference_time));
572 }
573
574 TEST_F(AppBannerSettingsHelperTest, ShouldShowFromEngagement) { 86 TEST_F(AppBannerSettingsHelperTest, ShouldShowFromEngagement) {
575 GURL url(kTestURL); 87 GURL url(kTestURL);
576 NavigateAndCommit(url); 88 SiteEngagementService* service = SiteEngagementService::Get(profile());
577
578 base::Time reference_time = GetReferenceTime();
579 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
580 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
581 89
582 // By default the banner should not be shown. 90 // By default the banner should not be shown.
583 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, 91 EXPECT_FALSE(
584 AppBannerSettingsHelper::ShouldShowBanner( 92 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
585 web_contents(), url, kTestPackageName, reference_time));
586 93
587 // Visit the site once, it still should not be shown. 94 // Add 1 engagement, it still should not be shown.
588 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 95 service->ResetScoreForURL(url, 1);
589 web_contents(), url, kTestPackageName, one_year_ago, 96 EXPECT_FALSE(
590 ui::PAGE_TRANSITION_TYPED); 97 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
591 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
592 AppBannerSettingsHelper::ShouldShowBanner(
593 web_contents(), url, kTestPackageName, reference_time));
594 98
595 // Visit the site again after a long delay, it still should not be shown. 99 // Add 1 more engagement; now it should be shown.
596 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 100 service->ResetScoreForURL(url, 2);
597 web_contents(), url, kTestPackageName, one_day_ago, 101 EXPECT_TRUE(
598 ui::PAGE_TRANSITION_TYPED); 102 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
599 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
600 AppBannerSettingsHelper::ShouldShowBanner(
601 web_contents(), url, kTestPackageName, reference_time));
602
603 // Visit the site again; now it should be shown.
604 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
605 web_contents(), url, kTestPackageName, reference_time,
606 ui::PAGE_TRANSITION_TYPED);
607 EXPECT_EQ(NO_ERROR_DETECTED,
608 AppBannerSettingsHelper::ShouldShowBanner(
609 web_contents(), url, kTestPackageName, reference_time));
610 } 103 }
611 104
612 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) { 105 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) {
613 GURL url(kTestURL); 106 GURL url(kTestURL);
614 NavigateAndCommit(url); 107 NavigateAndCommit(url);
108 SiteEngagementService* service = SiteEngagementService::Get(profile());
615 109
616 base::Time reference_time = GetReferenceTime(); 110 base::Time reference_time = GetReferenceTime();
617 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
618 base::Time two_months_ago = reference_time - base::TimeDelta::FromDays(60); 111 base::Time two_months_ago = reference_time - base::TimeDelta::FromDays(60);
619 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); 112 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
620 113
621 // By default the banner should not be shown. 114 // By default the banner should not be shown.
622 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, 115 EXPECT_FALSE(
623 AppBannerSettingsHelper::ShouldShowBanner( 116 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
624 web_contents(), url, kTestPackageName, reference_time));
625 117
626 // Record events such that the banner should show. 118 // Add engagement such that the banner should show.
627 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 119 service->ResetScoreForURL(url, 4);
628 web_contents(), url, kTestPackageName, one_day_ago, 120 EXPECT_TRUE(
629 ui::PAGE_TRANSITION_TYPED); 121 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
630 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
631 web_contents(), url, kTestPackageName, reference_time,
632 ui::PAGE_TRANSITION_TYPED);
633 EXPECT_EQ(NO_ERROR_DETECTED, 122 EXPECT_EQ(NO_ERROR_DETECTED,
634 AppBannerSettingsHelper::ShouldShowBanner( 123 AppBannerSettingsHelper::ShouldShowBanner(
635 web_contents(), url, kTestPackageName, reference_time)); 124 web_contents(), url, kTestPackageName, reference_time));
636 125
637 // Block the site a long time ago. It should still be shown. 126 // Block the site a long time ago. It should still be shown.
638 AppBannerSettingsHelper::RecordBannerEvent( 127 AppBannerSettingsHelper::RecordBannerEvent(
639 web_contents(), url, kTestPackageName, 128 web_contents(), url, kTestPackageName,
640 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, one_year_ago); 129 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, one_year_ago);
641 EXPECT_EQ(NO_ERROR_DETECTED, 130 EXPECT_EQ(NO_ERROR_DETECTED,
642 AppBannerSettingsHelper::ShouldShowBanner( 131 AppBannerSettingsHelper::ShouldShowBanner(
(...skipping 11 matching lines...) Expand all
654 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(59, 14); 143 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(59, 14);
655 144
656 EXPECT_EQ(NO_ERROR_DETECTED, 145 EXPECT_EQ(NO_ERROR_DETECTED,
657 AppBannerSettingsHelper::ShouldShowBanner( 146 AppBannerSettingsHelper::ShouldShowBanner(
658 web_contents(), url, kTestPackageName, reference_time)); 147 web_contents(), url, kTestPackageName, reference_time));
659 } 148 }
660 149
661 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) { 150 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) {
662 GURL url(kTestURL); 151 GURL url(kTestURL);
663 NavigateAndCommit(url); 152 NavigateAndCommit(url);
153 SiteEngagementService* service = SiteEngagementService::Get(profile());
664 154
665 base::Time reference_time = GetReferenceTime(); 155 base::Time reference_time = GetReferenceTime();
666 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
667 base::Time one_week_ago = reference_time - base::TimeDelta::FromDays(7); 156 base::Time one_week_ago = reference_time - base::TimeDelta::FromDays(7);
668 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); 157 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
669 158
670 // By default the banner should not be shown. 159 // By default the banner should not be shown.
671 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, 160 EXPECT_FALSE(
672 AppBannerSettingsHelper::ShouldShowBanner( 161 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
673 web_contents(), url, kTestPackageName, reference_time));
674 162
675 // Record events such that the banner should show. 163 // Add engagement such that the banner should show.
676 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 164 service->ResetScoreForURL(url, 4);
677 web_contents(), url, kTestPackageName, one_day_ago, 165 EXPECT_TRUE(
678 ui::PAGE_TRANSITION_TYPED); 166 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
679 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
680 web_contents(), url, kTestPackageName, reference_time,
681 ui::PAGE_TRANSITION_TYPED);
682 EXPECT_EQ(NO_ERROR_DETECTED, 167 EXPECT_EQ(NO_ERROR_DETECTED,
683 AppBannerSettingsHelper::ShouldShowBanner( 168 AppBannerSettingsHelper::ShouldShowBanner(
684 web_contents(), url, kTestPackageName, reference_time)); 169 web_contents(), url, kTestPackageName, reference_time));
685 170
686 // Show the banner a long time ago. It should still be shown. 171 // Show the banner a long time ago. It should still be shown.
687 AppBannerSettingsHelper::RecordBannerEvent( 172 AppBannerSettingsHelper::RecordBannerEvent(
688 web_contents(), url, kTestPackageName, 173 web_contents(), url, kTestPackageName,
689 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, one_year_ago); 174 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, one_year_ago);
690 EXPECT_EQ(NO_ERROR_DETECTED, 175 EXPECT_EQ(NO_ERROR_DETECTED,
691 AppBannerSettingsHelper::ShouldShowBanner( 176 AppBannerSettingsHelper::ShouldShowBanner(
(...skipping 10 matching lines...) Expand all
702 // Change the number of days enforced. 187 // Change the number of days enforced.
703 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(90, 6); 188 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(90, 6);
704 189
705 EXPECT_EQ(NO_ERROR_DETECTED, 190 EXPECT_EQ(NO_ERROR_DETECTED,
706 AppBannerSettingsHelper::ShouldShowBanner( 191 AppBannerSettingsHelper::ShouldShowBanner(
707 web_contents(), url, kTestPackageName, reference_time)); 192 web_contents(), url, kTestPackageName, reference_time));
708 } 193 }
709 194
710 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) { 195 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) {
711 GURL url(kTestURL); 196 GURL url(kTestURL);
712 NavigateAndCommit(url); 197 SiteEngagementService* service = SiteEngagementService::Get(profile());
713 198
714 base::Time reference_time = GetReferenceTime(); 199 base::Time reference_time = GetReferenceTime();
715 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
716 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); 200 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
717 201
718 // By default the banner should not be shown. 202 // By default the banner should not be shown.
719 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, 203 EXPECT_FALSE(
720 AppBannerSettingsHelper::ShouldShowBanner( 204 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
721 web_contents(), url, kTestPackageName, reference_time));
722 205
723 // Record events such that the banner should show. 206 // Add engagement such that the banner should show.
724 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 207 service->ResetScoreForURL(url, 4);
725 web_contents(), url, kTestPackageName, one_day_ago, 208 EXPECT_TRUE(
726 ui::PAGE_TRANSITION_TYPED); 209 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
727 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
728 web_contents(), url, kTestPackageName, reference_time,
729 ui::PAGE_TRANSITION_TYPED);
730 EXPECT_EQ(NO_ERROR_DETECTED, 210 EXPECT_EQ(NO_ERROR_DETECTED,
731 AppBannerSettingsHelper::ShouldShowBanner( 211 AppBannerSettingsHelper::ShouldShowBanner(
732 web_contents(), url, kTestPackageName, reference_time)); 212 web_contents(), url, kTestPackageName, reference_time));
733 213
734 // Add the site a long time ago. It should not be shown. 214 // Add the site a long time ago. It should not be shown.
735 AppBannerSettingsHelper::RecordBannerEvent( 215 AppBannerSettingsHelper::RecordBannerEvent(
736 web_contents(), url, kTestPackageName, 216 web_contents(), url, kTestPackageName,
737 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, 217 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
738 one_year_ago); 218 one_year_ago);
739 EXPECT_EQ(ALREADY_INSTALLED, 219 EXPECT_EQ(ALREADY_INSTALLED,
740 AppBannerSettingsHelper::ShouldShowBanner( 220 AppBannerSettingsHelper::ShouldShowBanner(
741 web_contents(), url, kTestPackageName, reference_time)); 221 web_contents(), url, kTestPackageName, reference_time));
742 } 222 }
743 223
744 TEST_F(AppBannerSettingsHelperTest, OperatesOnOrigins) { 224 TEST_F(AppBannerSettingsHelperTest, OperatesOnOrigins) {
745 GURL url(kTestURL); 225 GURL url(kTestURL);
746 NavigateAndCommit(url); 226 SiteEngagementService* service = SiteEngagementService::Get(profile());
747
748 base::Time reference_time = GetReferenceTime();
749 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
750 227
751 // By default the banner should not be shown. 228 // By default the banner should not be shown.
752 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, 229 EXPECT_FALSE(
753 AppBannerSettingsHelper::ShouldShowBanner( 230 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
754 web_contents(), url, kTestPackageName, reference_time));
755 231
756 // Record events such that the banner should show. 232 // Add engagement such that the banner should show.
757 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 233 service->ResetScoreForURL(url, 4);
758 web_contents(), url, kTestPackageName, one_day_ago, 234 EXPECT_TRUE(
759 ui::PAGE_TRANSITION_TYPED); 235 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
760 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
761 web_contents(), url, kTestPackageName, reference_time,
762 ui::PAGE_TRANSITION_TYPED);
763 236
764 // Navigate to another page on the same origin. 237 // Try another page on the same origin.
765 url = GURL(kSameOriginTestURL); 238 url = GURL(kSameOriginTestURL);
766 NavigateAndCommit(url);
767 239
768 // The banner should show as settings are per-origin. 240 // The banner should show as settings are per-origin.
241 EXPECT_TRUE(
242 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
769 EXPECT_EQ(NO_ERROR_DETECTED, 243 EXPECT_EQ(NO_ERROR_DETECTED,
770 AppBannerSettingsHelper::ShouldShowBanner( 244 AppBannerSettingsHelper::ShouldShowBanner(
771 web_contents(), url, kTestPackageName, reference_time)); 245 web_contents(), url, kTestPackageName, GetReferenceTime()));
772 } 246 }
773 247
774 TEST_F(AppBannerSettingsHelperTest, ShouldShowWithHigherTotal) { 248 TEST_F(AppBannerSettingsHelperTest, ShouldShowWithHigherTotal) {
775 AppBannerSettingsHelper::SetTotalEngagementToTrigger(5); 249 AppBannerSettingsHelper::SetTotalEngagementToTrigger(10);
776 GURL url(kTestURL); 250 GURL url(kTestURL);
777 NavigateAndCommit(url); 251 SiteEngagementService* service = SiteEngagementService::Get(profile());
778 252
779 base::Time reference_time = GetReferenceTime(); 253 // By default the banner should not be shown.
780 base::Time second_day = reference_time + base::TimeDelta::FromDays(1); 254 EXPECT_FALSE(
781 base::Time third_day = reference_time + base::TimeDelta::FromDays(2); 255 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
782 base::Time fourth_day = reference_time + base::TimeDelta::FromDays(3);
783 base::Time fifth_day = reference_time + base::TimeDelta::FromDays(4);
784 256
785 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, 257 // Add engagement such that the banner should show.
786 AppBannerSettingsHelper::ShouldShowBanner( 258 service->ResetScoreForURL(url, 2);
787 web_contents(), url, kTestPackageName, reference_time)); 259 EXPECT_FALSE(
260 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
788 261
789 // It should take five visits to trigger the banner. 262 service->ResetScoreForURL(url, 4);
790 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 263 EXPECT_FALSE(
791 web_contents(), url, kTestPackageName, reference_time, 264 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
792 ui::PAGE_TRANSITION_LINK);
793 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
794 AppBannerSettingsHelper::ShouldShowBanner(
795 web_contents(), url, kTestPackageName, reference_time));
796 265
797 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 266 service->ResetScoreForURL(url, 6);
798 web_contents(), url, kTestPackageName, second_day, 267 EXPECT_FALSE(
799 ui::PAGE_TRANSITION_TYPED); 268 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
800 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
801 AppBannerSettingsHelper::ShouldShowBanner(
802 web_contents(), url, kTestPackageName, reference_time));
803 269
804 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 270 service->ResetScoreForURL(url, 8);
805 web_contents(), url, kTestPackageName, third_day, 271 EXPECT_FALSE(
806 ui::PAGE_TRANSITION_GENERATED); 272 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
807 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
808 AppBannerSettingsHelper::ShouldShowBanner(
809 web_contents(), url, kTestPackageName, reference_time));
810 273
811 AppBannerSettingsHelper::RecordBannerCouldShowEvent( 274 service->ResetScoreForURL(url, 10);
812 web_contents(), url, kTestPackageName, fourth_day, 275 EXPECT_TRUE(
813 ui::PAGE_TRANSITION_LINK); 276 AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url)));
814 EXPECT_EQ(INSUFFICIENT_ENGAGEMENT,
815 AppBannerSettingsHelper::ShouldShowBanner(
816 web_contents(), url, kTestPackageName, reference_time));
817 277
818 // Visit the site again; now it should be shown.
819 AppBannerSettingsHelper::RecordBannerCouldShowEvent(
820 web_contents(), url, kTestPackageName, fifth_day,
821 ui::PAGE_TRANSITION_TYPED);
822 EXPECT_EQ(NO_ERROR_DETECTED, 278 EXPECT_EQ(NO_ERROR_DETECTED,
823 AppBannerSettingsHelper::ShouldShowBanner( 279 AppBannerSettingsHelper::ShouldShowBanner(
824 web_contents(), url, kTestPackageName, reference_time)); 280 web_contents(), url, kTestPackageName, GetReferenceTime()));
825 } 281 }
826 282
827 TEST_F(AppBannerSettingsHelperTest, WasLaunchedRecently) { 283 TEST_F(AppBannerSettingsHelperTest, WasLaunchedRecently) {
828 GURL url(kTestURL); 284 GURL url(kTestURL);
829 GURL url_same_origin(kSameOriginTestURL); 285 GURL url_same_origin(kSameOriginTestURL);
830 GURL url2(kDifferentOriginTestURL); 286 GURL url2(kDifferentOriginTestURL);
831 NavigateAndCommit(url); 287 NavigateAndCommit(url);
832 288
833 base::Time reference_time = GetReferenceTime(); 289 base::Time reference_time = GetReferenceTime();
834 base::Time first_day = reference_time + base::TimeDelta::FromDays(1); 290 base::Time first_day = reference_time + base::TimeDelta::FromDays(1);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 first_day); 341 first_day);
886 EXPECT_TRUE( 342 EXPECT_TRUE(
887 AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, first_day)); 343 AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, first_day));
888 EXPECT_TRUE( 344 EXPECT_TRUE(
889 AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, ninth_day)); 345 AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, ninth_day));
890 EXPECT_TRUE( 346 EXPECT_TRUE(
891 AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, tenth_day)); 347 AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, tenth_day));
892 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(profile(), url, 348 EXPECT_TRUE(AppBannerSettingsHelper::WasLaunchedRecently(profile(), url,
893 eleventh_day)); 349 eleventh_day));
894 } 350 }
OLDNEW
« no previous file with comments | « chrome/browser/banners/app_banner_settings_helper.cc ('k') | chrome/common/chrome_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698