| Index: chrome/browser/banners/app_banner_settings_helper.cc
|
| diff --git a/chrome/browser/banners/app_banner_settings_helper.cc b/chrome/browser/banners/app_banner_settings_helper.cc
|
| index 886d72ec44c419ffeac9cf9280f7d6016c38381d..fb7f13af96812c53b4036aea1e9610251b2fe13c 100644
|
| --- a/chrome/browser/banners/app_banner_settings_helper.cc
|
| +++ b/chrome/browser/banners/app_banner_settings_helper.cc
|
| @@ -39,15 +39,13 @@ const size_t kMaxAppsPerSite = 3;
|
| // Oldest could show banner event we care about, in days.
|
| const unsigned int kOldestCouldShowBannerEventInDays = 14;
|
|
|
| -// Number of days that showing the banner will prevent it being seen again for.
|
| +// Default number of days that dismissing or ignoring the banner will prevent it
|
| +// being seen again for.
|
| +const unsigned int kMinimumBannerBlockedToBannerShown = 90;
|
| const unsigned int kMinimumDaysBetweenBannerShows = 14;
|
|
|
| const unsigned int kNumberOfMinutesInADay = 1440;
|
|
|
| -// Number of days that the banner being blocked will prevent it being seen again
|
| -// for.
|
| -const unsigned int kMinimumBannerBlockedToBannerShown = 90;
|
| -
|
| // Default scores assigned to direct and indirect navigations respectively.
|
| const unsigned int kDefaultDirectNavigationEngagement = 1;
|
| const unsigned int kDefaultIndirectNavigationEngagement = 1;
|
| @@ -80,6 +78,8 @@ const char kBannerParamsIndirectKey[] = "indirect";
|
| const char kBannerParamsTotalKey[] = "total";
|
| const char kBannerParamsMinutesKey[] = "minutes";
|
| const char kBannerParamsEngagementTotalKey[] = "site_engagement_total";
|
| +const char kBannerParamsDaysAfterBannerDismissedKey[] = "days_after_dismiss";
|
| +const char kBannerParamsDaysAfterBannerIgnoredKey[] = "days_after_ignore";
|
| const char kBannerSiteEngagementParamsKey[] = "use_site_engagement";
|
|
|
| // Engagement weight assigned to direct and indirect navigations.
|
| @@ -95,6 +95,9 @@ unsigned int gMinimumMinutesBetweenVisits = kNumberOfMinutesInADay;
|
| // Total engagement score required before a banner will actually be triggered.
|
| double gTotalEngagementToTrigger = kDefaultTotalEngagementToTrigger;
|
|
|
| +unsigned int gDaysAfterDismissedToShow = kMinimumBannerBlockedToBannerShown;
|
| +unsigned int gDaysAfterIgnoredToShow = kMinimumDaysBetweenBannerShows;
|
| +
|
| std::unique_ptr<base::DictionaryValue> GetOriginDict(
|
| HostContentSettingsMap* settings,
|
| const GURL& origin_url) {
|
| @@ -137,6 +140,26 @@ double GetEventEngagement(ui::PageTransition transition_type) {
|
| }
|
| }
|
|
|
| +// Queries variations for the number of days which dismissing and ignoring the
|
| +// banner should prevent a banner from showing.
|
| +void UpdateDaysBetweenShowing() {
|
| + std::string dismiss_param = variations::GetVariationParamValue(
|
| + kBannerParamsKey, kBannerParamsDaysAfterBannerDismissedKey);
|
| + std::string ignore_param = variations::GetVariationParamValue(
|
| + kBannerParamsKey, kBannerParamsDaysAfterBannerIgnoredKey);
|
| +
|
| + if (!dismiss_param.empty() && !ignore_param.empty()) {
|
| + unsigned int dismiss_days = 0;
|
| + unsigned int ignore_days = 0;
|
| +
|
| + if (base::StringToUint(dismiss_param, &dismiss_days) &&
|
| + base::StringToUint(ignore_param, &ignore_days)) {
|
| + AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(
|
| + dismiss_days, ignore_days);
|
| + }
|
| + }
|
| +}
|
| +
|
| // Queries variations for the maximum site engagement score required to trigger
|
| // the banner showing.
|
| void UpdateSiteEngagementToTrigger() {
|
| @@ -407,15 +430,14 @@ InstallableStatusCode AppBannerSettingsHelper::ShouldShowBanner(
|
| // Null times are in the distant past, so the delta between real times and
|
| // null events will always be greater than the limits.
|
| if (time - blocked_time <
|
| - base::TimeDelta::FromDays(kMinimumBannerBlockedToBannerShown)) {
|
| + base::TimeDelta::FromDays(gDaysAfterDismissedToShow)) {
|
| return PREVIOUSLY_BLOCKED;
|
| }
|
|
|
| base::Time shown_time =
|
| GetSingleBannerEvent(web_contents, origin_url, package_name_or_start_url,
|
| APP_BANNER_EVENT_DID_SHOW);
|
| - if (time - shown_time <
|
| - base::TimeDelta::FromDays(kMinimumDaysBetweenBannerShows)) {
|
| + if (time - shown_time < base::TimeDelta::FromDays(gDaysAfterIgnoredToShow)) {
|
| return PREVIOUSLY_IGNORED;
|
| }
|
|
|
| @@ -582,6 +604,13 @@ bool AppBannerSettingsHelper::WasLaunchedRecently(Profile* profile,
|
| return false;
|
| }
|
|
|
| +void AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(
|
| + unsigned int dismiss_days,
|
| + unsigned int ignore_days) {
|
| + gDaysAfterDismissedToShow = dismiss_days;
|
| + gDaysAfterIgnoredToShow = ignore_days;
|
| +}
|
| +
|
| void AppBannerSettingsHelper::SetEngagementWeights(double direct_engagement,
|
| double indirect_engagement) {
|
| gDirectNavigationEngagement = direct_engagement;
|
| @@ -599,6 +628,8 @@ void AppBannerSettingsHelper::SetTotalEngagementToTrigger(
|
| }
|
|
|
| void AppBannerSettingsHelper::SetDefaultParameters() {
|
| + SetDaysAfterDismissAndIgnoreToTrigger(kMinimumBannerBlockedToBannerShown,
|
| + kMinimumDaysBetweenBannerShows);
|
| SetEngagementWeights(kDefaultDirectNavigationEngagement,
|
| kDefaultIndirectNavigationEngagement);
|
| SetMinimumMinutesBetweenVisits(kNumberOfMinutesInADay);
|
| @@ -634,6 +665,7 @@ base::Time AppBannerSettingsHelper::BucketTimeToResolution(
|
| void AppBannerSettingsHelper::UpdateFromFieldTrial() {
|
| // If we are using the site engagement score, only extract the total
|
| // engagement to trigger from the params variations.
|
| + UpdateDaysBetweenShowing();
|
| if (ShouldUseSiteEngagementScore()) {
|
| UpdateSiteEngagementToTrigger();
|
| } else {
|
|
|