1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// 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
|