| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |