File: scheduler_config.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (106 lines) | stat: -rw-r--r-- 4,426 bytes parent folder | download | duplicates (7)
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