| 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 | 
|---|