| Index: chrome/browser/banners/app_banner_settings_helper_unittest.cc | 
| diff --git a/chrome/browser/banners/app_banner_settings_helper_unittest.cc b/chrome/browser/banners/app_banner_settings_helper_unittest.cc | 
| index d7abe63fab64004687cbaf166246690ace847433..a4035e9653ac5d8d8ee8f5434f7a07ea00dd4c4c 100644 | 
| --- a/chrome/browser/banners/app_banner_settings_helper_unittest.cc | 
| +++ b/chrome/browser/banners/app_banner_settings_helper_unittest.cc | 
| @@ -2,17 +2,12 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| -#include <vector> | 
| - | 
| -#include "base/command_line.h" | 
| #include "chrome/browser/banners/app_banner_metrics.h" | 
| #include "chrome/browser/banners/app_banner_settings_helper.h" | 
| #include "chrome/browser/engagement/site_engagement_service.h" | 
| #include "chrome/browser/installable/installable_logging.h" | 
| -#include "chrome/common/chrome_switches.h" | 
| #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 
| #include "chrome/test/base/testing_profile.h" | 
| -#include "ui/base/page_transition_types.h" | 
|  | 
| namespace { | 
|  | 
| @@ -38,16 +33,6 @@ base::Time GetReferenceTime() { | 
| return out_time; | 
| } | 
|  | 
| -bool IsWithinDay(base::Time time1, base::Time time2) { | 
| -  return time1 - time2 < base::TimeDelta::FromDays(1) || | 
| -         time2 - time1 < base::TimeDelta::FromDays(1); | 
| -} | 
| - | 
| -bool IsWithinHour(base::Time time1, base::Time time2) { | 
| -  return time1 - time2 < base::TimeDelta::FromHours(1) || | 
| -         time2 - time1 < base::TimeDelta::FromHours(1); | 
| -} | 
| - | 
| class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness { | 
| void SetUp() override { | 
| ChromeRenderViewHostTestHarness::SetUp(); | 
| @@ -57,338 +42,13 @@ class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness { | 
|  | 
| }  // namespace | 
|  | 
| -TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionInvalid) { | 
| -  base::Time reference_time = GetReferenceTime(); | 
| - | 
| -  // Test null, 1 day, and greater than 1 day cases. | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 0), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1440), | 
| -      reference_time.LocalMidnight()); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 2880), | 
| -      reference_time.LocalMidnight()); | 
| - | 
| -  // Test number of minutes in 1 day + 1. | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1441), | 
| -      reference_time.LocalMidnight()); | 
| - | 
| -  // Test minutes which are not divisible by 1440 (minutes in a day). | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 7), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 13), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 21), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 35), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 42), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 50), | 
| -            reference_time.LocalMidnight()); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 59), | 
| -            reference_time.LocalMidnight()); | 
| -} | 
| - | 
| -TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionValid) { | 
| -  // 11:00 | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  // 13:44 | 
| -  base::Time same_day_later = | 
| -      reference_time + base::TimeDelta::FromMinutes(164); | 
| -  // 10:18 | 
| -  base::Time same_day_earlier = | 
| -      reference_time - base::TimeDelta::FromMinutes(42); | 
| -  base::Time midnight = reference_time.LocalMidnight(); | 
| -  base::Time bucketed_hour = midnight + base::TimeDelta::FromHours(11); | 
| -  base::Time bucketed_hour_later = midnight + base::TimeDelta::FromHours(13); | 
| -  base::Time bucketed_hour_earlier = midnight + base::TimeDelta::FromHours(10); | 
| - | 
| -  // Resolution of 1 minute: 11:00, 13:44, 10:18. | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1), | 
| -            bucketed_hour); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 1), | 
| -            bucketed_hour_later + base::TimeDelta::FromMinutes(44)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 1), | 
| -      bucketed_hour_earlier + base::TimeDelta::FromMinutes(18)); | 
| - | 
| -  // Resolution of 3 minutes: 11:00, 13:43, 10:18. | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 3), | 
| -            bucketed_hour); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 3), | 
| -            bucketed_hour_later + base::TimeDelta::FromMinutes(42)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 3), | 
| -      bucketed_hour_earlier + base::TimeDelta::FromMinutes(18)); | 
| - | 
| -  // Resolution of 10 minutes: 11:00, 13:40, 10:10. | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 10), | 
| -            bucketed_hour); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 10), | 
| -            bucketed_hour_later + base::TimeDelta::FromMinutes(40)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 10), | 
| -      bucketed_hour_earlier + base::TimeDelta::FromMinutes(10)); | 
| - | 
| -  // Resolution of 20 minutes: 11:00, 13:40, 10:00. | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 20), | 
| -            bucketed_hour); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 20), | 
| -            bucketed_hour_later + base::TimeDelta::FromMinutes(40)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 20), | 
| -      bucketed_hour_earlier); | 
| - | 
| -  // Resolution of 60 minutes: 11:00, 13:00, 10:00. | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 60), | 
| -            bucketed_hour); | 
| -  EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 60), | 
| -            bucketed_hour_later); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 60), | 
| -      bucketed_hour_earlier); | 
| - | 
| -  // Resolution of 120 minutes: 10:00, 12:00, 10:00. | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 120), | 
| -      bucketed_hour_earlier); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 120), | 
| -      bucketed_hour_later - base::TimeDelta::FromHours(1)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 120), | 
| -      bucketed_hour_earlier); | 
| - | 
| -  // Resolution of 180 minutes: 9:00, 12:00, 9:00. | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 180), | 
| -      bucketed_hour_earlier - base::TimeDelta::FromHours(1)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 180), | 
| -      bucketed_hour_later - base::TimeDelta::FromHours(1)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 180), | 
| -      bucketed_hour_earlier - base::TimeDelta::FromHours(1)); | 
| - | 
| -  // Resolution of 240 minutes: 8:00, 12:00, 8:00. | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 240), | 
| -      midnight + base::TimeDelta::FromHours(8)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 240), | 
| -      midnight + base::TimeDelta::FromHours(12)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 240), | 
| -      midnight + base::TimeDelta::FromHours(8)); | 
| - | 
| -  // Resolution of 360 minutes: 6:00, 12:00, 6:00 | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 360), | 
| -      midnight + base::TimeDelta::FromHours(6)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 360), | 
| -      midnight + base::TimeDelta::FromHours(12)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 360), | 
| -      midnight + base::TimeDelta::FromHours(6)); | 
| - | 
| -  // Resolution of 720 minutes: 0:00, 12:00, 0:00 | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 720), | 
| -      midnight); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 720), | 
| -      midnight + base::TimeDelta::FromHours(12)); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 720), | 
| -      midnight); | 
| - | 
| -  // Resolution of 1440 minutes: 0:00, 0:00, 0:00 | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(reference_time, 1440), | 
| -      midnight); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_later, 1440), | 
| -      midnight); | 
| -  EXPECT_EQ( | 
| -      AppBannerSettingsHelper::BucketTimeToResolution(same_day_earlier, 1440), | 
| -      midnight); | 
| -} | 
| - | 
| -TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { | 
| -  GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  // Check that by default, there are no events recorded. | 
| -  std::vector<AppBannerSettingsHelper::BannerEvent> events = | 
| -      AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, | 
| -                                                        kTestPackageName); | 
| -  EXPECT_TRUE(events.empty()); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time same_day = reference_time + base::TimeDelta::FromHours(2); | 
| -  base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3); | 
| -  base::Time previous_fortnight = | 
| -      reference_time - base::TimeDelta::FromDays(14); | 
| - | 
| -  // Test adding the first date. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, previous_fortnight, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| - | 
| -  // It should be the only date recorded. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(1u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, previous_fortnight)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| - | 
| -  // Now add the next date. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, three_days_prior, | 
| -      ui::PAGE_TRANSITION_GENERATED); | 
| - | 
| -  // Now there should be two events. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(2u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, previous_fortnight)); | 
| -  EXPECT_TRUE(IsWithinDay(events[1].time, three_days_prior)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| -  EXPECT_EQ(events[1].engagement, 1); | 
| - | 
| -  // Now add the reference date. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| - | 
| -  // Now there should still be two events, but the first date should have been | 
| -  // removed. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(2u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, three_days_prior)); | 
| -  EXPECT_TRUE(IsWithinDay(events[1].time, reference_time)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| -  EXPECT_EQ(events[1].engagement, 1); | 
| - | 
| -  // Now add the the other date on the reference day. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, same_day, | 
| -      ui::PAGE_TRANSITION_RELOAD); | 
| - | 
| -  // Now there should still be the same two dates. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(2u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, three_days_prior)); | 
| -  EXPECT_TRUE(IsWithinDay(events[1].time, reference_time)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| -  EXPECT_EQ(events[1].engagement, 1); | 
| -} | 
| - | 
| -TEST_F(AppBannerSettingsHelperTest, CouldShowEventsDifferentResolution) { | 
| -  AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(20); | 
| -  GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  // Check that by default, there are no events recorded. | 
| -  std::vector<AppBannerSettingsHelper::BannerEvent> events = | 
| -      AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, | 
| -                                                        kTestPackageName); | 
| -  EXPECT_TRUE(events.empty()); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time same_day_ignored_i = | 
| -      reference_time + base::TimeDelta::FromMinutes(10); | 
| -  base::Time same_day_counted_i = | 
| -      reference_time + base::TimeDelta::FromMinutes(20); | 
| -  base::Time same_day_counted_ii = | 
| -      reference_time + base::TimeDelta::FromMinutes(45); | 
| -  base::Time same_day_ignored_ii = | 
| -      reference_time + base::TimeDelta::FromMinutes(59); | 
| - | 
| -  // Add the reference date. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| - | 
| -  // There should be one event recorded | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(1u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| - | 
| -  // Now add the the ignored date on the reference day. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, same_day_ignored_i, | 
| -      ui::PAGE_TRANSITION_RELOAD); | 
| - | 
| -  // Now there should still one event. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(1u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| - | 
| -  // Now add the the first counted date on the reference day. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, same_day_counted_i, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| - | 
| -  // Now there should be two events. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(2u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); | 
| -  EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| -  EXPECT_EQ(events[1].engagement, 1); | 
| - | 
| -  // Now add the the second counted date on the reference day. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, same_day_counted_ii, | 
| -      ui::PAGE_TRANSITION_GENERATED); | 
| - | 
| -  // Now there should be three events. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(3u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); | 
| -  EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i)); | 
| -  EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| -  EXPECT_EQ(events[1].engagement, 1); | 
| -  EXPECT_EQ(events[2].engagement, 1); | 
| - | 
| -  // Now add the the second ignored date on the reference day. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, same_day_ignored_ii, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| - | 
| -  // Now there should still be three events. | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| -  EXPECT_EQ(3u, events.size()); | 
| -  EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); | 
| -  EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i)); | 
| -  EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii)); | 
| -  EXPECT_EQ(events[0].engagement, 1); | 
| -  EXPECT_EQ(events[1].engagement, 1); | 
| -  EXPECT_EQ(events[2].engagement, 1); | 
| -} | 
| - | 
| TEST_F(AppBannerSettingsHelperTest, SingleEvents) { | 
| GURL url(kTestURL); | 
| NavigateAndCommit(url); | 
|  | 
| base::Time reference_time = GetReferenceTime(); | 
| base::Time other_time = reference_time - base::TimeDelta::FromDays(3); | 
| -  for (int event = AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW; | 
| +  for (int event = AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW; | 
| event < AppBannerSettingsHelper::APP_BANNER_EVENT_NUM_EVENTS; ++event) { | 
| // Check that by default, there is no event. | 
| base::Time event_time = AppBannerSettingsHelper::GetSingleBannerEvent( | 
| @@ -414,222 +74,51 @@ TEST_F(AppBannerSettingsHelperTest, SingleEvents) { | 
| event_time = AppBannerSettingsHelper::GetSingleBannerEvent( | 
| web_contents(), url, kTestPackageName, | 
| AppBannerSettingsHelper::AppBannerEvent(event)); | 
| -    EXPECT_EQ(other_time, event_time); | 
| -  } | 
| -} | 
| - | 
| -TEST_F(AppBannerSettingsHelperTest, CouldShowEventReplacedWithHigherWeight) { | 
| -  // Set direct engagement to be worth 4 and indirect to be worth 2. | 
| -  AppBannerSettingsHelper::SetEngagementWeights(4, 2); | 
| -  GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time later_same_day = reference_time + base::TimeDelta::FromHours(2); | 
| -  base::Time later_again_same_day = | 
| -      reference_time + base::TimeDelta::FromHours(6); | 
| -  base::Time next_day = reference_time + base::TimeDelta::FromDays(1); | 
| -  base::Time later_next_day = next_day + base::TimeDelta::FromHours(3); | 
| - | 
| -  // Ensure there are no events recorded by default. | 
| -  std::vector<AppBannerSettingsHelper::BannerEvent> events = | 
| -      AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, | 
| -                                                        kTestPackageName); | 
| -  EXPECT_TRUE(events.empty()); | 
| - | 
| -  // Record an indirect engagement type. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| - | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| - | 
| -  EXPECT_EQ(1u, events.size()); | 
| -  EXPECT_TRUE(IsWithinHour(events[0].time, reference_time)); | 
| -  EXPECT_EQ(2, events[0].engagement); | 
| - | 
| -  // Record a direct engagement type. This should override the previous value. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, later_same_day, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| - | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| - | 
| -  EXPECT_EQ(1u, events.size()); | 
| -  EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); | 
| -  EXPECT_EQ(4, events[0].engagement); | 
| - | 
| -  // Record an indirect engagement type. This should be ignored. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, later_again_same_day, | 
| -      ui::PAGE_TRANSITION_RELOAD); | 
| - | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| - | 
| -  EXPECT_EQ(1u, events.size()); | 
| -  EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); | 
| -  EXPECT_EQ(4, events[0].engagement); | 
| - | 
| -  // Record an indirect engagement type one day later. This should appear. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, next_day, | 
| -      ui::PAGE_TRANSITION_AUTO_BOOKMARK); | 
| - | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| - | 
| -  EXPECT_EQ(2u, events.size()); | 
| -  EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); | 
| -  EXPECT_EQ(4, events[0].engagement); | 
| -  EXPECT_TRUE(IsWithinHour(events[1].time, next_day)); | 
| -  EXPECT_EQ(2, events[1].engagement); | 
| - | 
| -  // Record a direct engagement type later on the next day. This should override | 
| -  // the previous value. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, later_next_day, | 
| -      ui::PAGE_TRANSITION_GENERATED); | 
| - | 
| -  events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 
| -      web_contents(), url, kTestPackageName); | 
| - | 
| -  EXPECT_EQ(2u, events.size()); | 
| -  EXPECT_TRUE(IsWithinHour(events[0].time, later_same_day)); | 
| -  EXPECT_EQ(4, events[0].engagement); | 
| -  EXPECT_TRUE(IsWithinHour(events[1].time, later_next_day)); | 
| -  EXPECT_EQ(4, events[1].engagement); | 
| -} | 
| - | 
| -TEST_F(AppBannerSettingsHelperTest, IndirectEngagementWithLowerWeight) { | 
| -  AppBannerSettingsHelper::SetEngagementWeights(2, 0.5); | 
| -  GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time second_day = reference_time + base::TimeDelta::FromDays(1); | 
| -  base::Time third_day = reference_time + base::TimeDelta::FromDays(2); | 
| -  base::Time fourth_day = reference_time + base::TimeDelta::FromDays(3); | 
| - | 
| -  // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| - | 
| -  // It should take four indirect visits with a weight of 0.5 to trigger the | 
| -  // banner. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| - | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, second_day, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, second_day)); | 
|  | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, third_day, | 
| -      ui::PAGE_TRANSITION_FORM_SUBMIT); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, third_day)); | 
| - | 
| -  // Visit the site again; now it should be shown. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, fourth_day, | 
| -      ui::PAGE_TRANSITION_MANUAL_SUBFRAME); | 
| -  EXPECT_EQ(NO_ERROR_DETECTED, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, fourth_day)); | 
| -} | 
| - | 
| -TEST_F(AppBannerSettingsHelperTest, DirectEngagementWithHigherWeight) { | 
| -  AppBannerSettingsHelper::SetEngagementWeights(2, 0.5); | 
| -  GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| - | 
| -  // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| - | 
| -  // It should take one direct visit with a weight of 2 to trigger the banner. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  EXPECT_EQ(NO_ERROR_DETECTED, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +    // COULD_SHOW events are not overwritten, but other events are. | 
| +    if (event == AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW) | 
| +      EXPECT_EQ(reference_time, event_time); | 
| +    else | 
| +      EXPECT_EQ(other_time, event_time); | 
| +  } | 
| } | 
|  | 
| TEST_F(AppBannerSettingsHelperTest, ShouldShowFromEngagement) { | 
| GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1); | 
| -  base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); | 
| +  SiteEngagementService* service = SiteEngagementService::Get(profile()); | 
|  | 
| // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| - | 
| -  // Visit the site once, it still should not be shown. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, one_year_ago, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Visit the site again after a long delay, it still should not be shown. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, one_day_ago, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  // Add 1 engagement, it still should not be shown. | 
| +  service->ResetScoreForURL(url, 1); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Visit the site again; now it should be shown. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  EXPECT_EQ(NO_ERROR_DETECTED, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  // Add 1 more engagement; now it should be shown. | 
| +  service->ResetScoreForURL(url, 2); | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
| } | 
|  | 
| TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) { | 
| GURL url(kTestURL); | 
| NavigateAndCommit(url); | 
| +  SiteEngagementService* service = SiteEngagementService::Get(profile()); | 
|  | 
| base::Time reference_time = GetReferenceTime(); | 
| -  base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1); | 
| base::Time two_months_ago = reference_time - base::TimeDelta::FromDays(60); | 
| base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); | 
|  | 
| // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Record events such that the banner should show. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, one_day_ago, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| +  // Add engagement such that the banner should show. | 
| +  service->ResetScoreForURL(url, 4); | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
| EXPECT_EQ(NO_ERROR_DETECTED, | 
| AppBannerSettingsHelper::ShouldShowBanner( | 
| web_contents(), url, kTestPackageName, reference_time)); | 
| @@ -661,24 +150,20 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) { | 
| TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) { | 
| GURL url(kTestURL); | 
| NavigateAndCommit(url); | 
| +  SiteEngagementService* service = SiteEngagementService::Get(profile()); | 
|  | 
| base::Time reference_time = GetReferenceTime(); | 
| -  base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1); | 
| base::Time one_week_ago = reference_time - base::TimeDelta::FromDays(7); | 
| base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); | 
|  | 
| // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Record events such that the banner should show. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, one_day_ago, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| +  // Add engagement such that the banner should show. | 
| +  service->ResetScoreForURL(url, 4); | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
| EXPECT_EQ(NO_ERROR_DETECTED, | 
| AppBannerSettingsHelper::ShouldShowBanner( | 
| web_contents(), url, kTestPackageName, reference_time)); | 
| @@ -709,24 +194,19 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) { | 
|  | 
| TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) { | 
| GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| +  SiteEngagementService* service = SiteEngagementService::Get(profile()); | 
|  | 
| base::Time reference_time = GetReferenceTime(); | 
| -  base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1); | 
| base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); | 
|  | 
| // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Record events such that the banner should show. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, one_day_ago, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| +  // Add engagement such that the banner should show. | 
| +  service->ResetScoreForURL(url, 4); | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
| EXPECT_EQ(NO_ERROR_DETECTED, | 
| AppBannerSettingsHelper::ShouldShowBanner( | 
| web_contents(), url, kTestPackageName, reference_time)); | 
| @@ -743,85 +223,61 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) { | 
|  | 
| TEST_F(AppBannerSettingsHelperTest, OperatesOnOrigins) { | 
| GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| - | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1); | 
| +  SiteEngagementService* service = SiteEngagementService::Get(profile()); | 
|  | 
| // By default the banner should not be shown. | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Record events such that the banner should show. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, one_day_ago, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| +  // Add engagement such that the banner should show. | 
| +  service->ResetScoreForURL(url, 4); | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Navigate to another page on the same origin. | 
| +  // Try another page on the same origin. | 
| url = GURL(kSameOriginTestURL); | 
| -  NavigateAndCommit(url); | 
|  | 
| // The banner should show as settings are per-origin. | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
| EXPECT_EQ(NO_ERROR_DETECTED, | 
| AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +                web_contents(), url, kTestPackageName, GetReferenceTime())); | 
| } | 
|  | 
| TEST_F(AppBannerSettingsHelperTest, ShouldShowWithHigherTotal) { | 
| -  AppBannerSettingsHelper::SetTotalEngagementToTrigger(5); | 
| +  AppBannerSettingsHelper::SetTotalEngagementToTrigger(10); | 
| GURL url(kTestURL); | 
| -  NavigateAndCommit(url); | 
| +  SiteEngagementService* service = SiteEngagementService::Get(profile()); | 
|  | 
| -  base::Time reference_time = GetReferenceTime(); | 
| -  base::Time second_day = reference_time + base::TimeDelta::FromDays(1); | 
| -  base::Time third_day = reference_time + base::TimeDelta::FromDays(2); | 
| -  base::Time fourth_day = reference_time + base::TimeDelta::FromDays(3); | 
| -  base::Time fifth_day = reference_time + base::TimeDelta::FromDays(4); | 
| +  // By default the banner should not be shown. | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  // Add engagement such that the banner should show. | 
| +  service->ResetScoreForURL(url, 2); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // It should take five visits to trigger the banner. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, reference_time, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  service->ResetScoreForURL(url, 4); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, second_day, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  service->ResetScoreForURL(url, 6); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, third_day, | 
| -      ui::PAGE_TRANSITION_GENERATED); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  service->ResetScoreForURL(url, 8); | 
| +  EXPECT_FALSE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, fourth_day, | 
| -      ui::PAGE_TRANSITION_LINK); | 
| -  EXPECT_EQ(INSUFFICIENT_ENGAGEMENT, | 
| -            AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +  service->ResetScoreForURL(url, 10); | 
| +  EXPECT_TRUE( | 
| +      AppBannerSettingsHelper::HasSufficientEngagement(service->GetScore(url))); | 
|  | 
| -  // Visit the site again; now it should be shown. | 
| -  AppBannerSettingsHelper::RecordBannerCouldShowEvent( | 
| -      web_contents(), url, kTestPackageName, fifth_day, | 
| -      ui::PAGE_TRANSITION_TYPED); | 
| EXPECT_EQ(NO_ERROR_DETECTED, | 
| AppBannerSettingsHelper::ShouldShowBanner( | 
| -                web_contents(), url, kTestPackageName, reference_time)); | 
| +                web_contents(), url, kTestPackageName, GetReferenceTime())); | 
| } | 
|  | 
| TEST_F(AppBannerSettingsHelperTest, WasLaunchedRecently) { | 
|  |