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