Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: chrome/browser/banners/app_banner_settings_helper.cc

Issue 2397043002: Allow variations controls for the time banners are suppressed after ignore/dismiss. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 {
« no previous file with comments | « chrome/browser/banners/app_banner_settings_helper.h ('k') | chrome/browser/banners/app_banner_settings_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698