| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/notifications/scheduler/internal/scheduler_config.h" |
| |
| #include <string> |
| |
| #include "base/metrics/field_trial_params.h" |
| #include "base/numerics/clamped_math.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "chrome/browser/notifications/scheduler/public/features.h" |
| |
| namespace notifications { |
| namespace { |
| |
| // Helper routine to get Finch experiment parameter. If no Finch seed was |
| // found, |
| // use the |default_value|. The |name| should match an experiment |
| // parameter in Finch server configuration. |
| int GetFinchConfigUInt(const std::string& name, int default_value) { |
| return base::GetFieldTrialParamByFeatureAsInt( |
| features::kNotificationScheduleService, name, default_value); |
| } |
| |
| } // namespace |
| |
| // Default number of maximum daily shown all type. |
| constexpr int kDefaultMaxDailyShownAllType = 3; |
| |
| // Default number of maximum daily shown per type. |
| constexpr int kDefaultMaxDailyShownPerType = 10; |
| |
| // Default number of initial daily shown per type. |
| constexpr int kDefaultInitialDailyShownPerType = 2; |
| |
| // Default number of dismiss count. |
| constexpr int kDefaultDismissCount = 3; |
| |
| // The notification data is hold for one week. |
| constexpr base::TimeDelta kDefaultNotificationExpiration = base::Days(20); |
| |
| // The impression history is hold for 4 weeks. |
| constexpr base::TimeDelta kDefaultImpressionExpiration = base::Days(28); |
| |
| // The suppression lasts 8 weeks. |
| constexpr base::TimeDelta kDefaultSuppressionDuration = base::Days(56); |
| |
| // Check consecutive notification dismisses in this duration to generate a |
| // dismiss event. |
| constexpr base::TimeDelta kDefaultDismissDuration = base::Days(7); |
| |
| // Default background task time window duration. |
| constexpr base::TimeDelta kDefaultBackgroundTaskWindowDuration = base::Hours(1); |
| |
| // static |
| std::unique_ptr<SchedulerConfig> SchedulerConfig::Create() { |
| return std::make_unique<SchedulerConfig>(); |
| } |
| |
| std::unique_ptr<SchedulerConfig> SchedulerConfig::CreateFromFinch() { |
| std::unique_ptr<SchedulerConfig> config = std::make_unique<SchedulerConfig>(); |
| config->max_daily_shown_all_type = |
| base::saturated_cast<int>(GetFinchConfigUInt( |
| kMaxDailyShownAllTypeConfig, kDefaultMaxDailyShownAllType)); |
| config->max_daily_shown_per_type = |
| base::saturated_cast<int>(GetFinchConfigUInt( |
| kMaxDailyShownPerTypeConfig, kDefaultMaxDailyShownPerType)); |
| config->initial_daily_shown_per_type = |
| base::saturated_cast<int>(GetFinchConfigUInt( |
| kInitialDailyShownPerTypeConfig, kDefaultInitialDailyShownPerType)); |
| config->notification_expiration = base::Days(base::saturated_cast<int>( |
| GetFinchConfigUInt(kNotificationExpirationConfig, |
| kDefaultNotificationExpiration.InDays()))); |
| config->impression_expiration = |
| base::Days(base::saturated_cast<int>(GetFinchConfigUInt( |
| kImpressionExpirationConfig, kDefaultImpressionExpiration.InDays()))); |
| config->suppression_duration = |
| base::Days(base::saturated_cast<int>(GetFinchConfigUInt( |
| kSuppressionDurationConfig, kDefaultSuppressionDuration.InDays()))); |
| config->dismiss_count = base::saturated_cast<int>( |
| GetFinchConfigUInt(kDismissCountConfig, kDefaultDismissCount)); |
| config->dismiss_duration = |
| base::Days(base::saturated_cast<int>(GetFinchConfigUInt( |
| kDismissDurationConfig, kDefaultDismissDuration.InDays()))); |
| config->background_task_window_duration = |
| base::Hours(base::saturated_cast<int>( |
| GetFinchConfigUInt(kBackgroundTaskWindowDurationConfig, |
| kDefaultBackgroundTaskWindowDuration.InHours()))); |
| return config; |
| } |
| |
| SchedulerConfig::SchedulerConfig() |
| : max_daily_shown_all_type(kDefaultMaxDailyShownAllType), |
| max_daily_shown_per_type(kDefaultMaxDailyShownPerType), |
| initial_daily_shown_per_type(kDefaultInitialDailyShownPerType), |
| notification_expiration(kDefaultNotificationExpiration), |
| impression_expiration(kDefaultImpressionExpiration), |
| suppression_duration(kDefaultSuppressionDuration), |
| dismiss_count(kDefaultDismissCount), |
| dismiss_duration(kDefaultDismissDuration), |
| background_task_window_duration(kDefaultBackgroundTaskWindowDuration) {} |
| |
| SchedulerConfig::~SchedulerConfig() = default; |
| |
| } // namespace notifications |