1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/updates/update_notification_config.h"
6
7 #include "base/metrics/field_trial_params.h"
8 #include "chrome/browser/flags/android/chrome_feature_list.h"
9
10 namespace updates {
11 namespace {
12 // Helper routines to get Finch experiment parameter. If no Finch seed was
13 // found, use the |default_value|. The |name| should match an experiment
14 // parameter in Finch server configuration.
GetFinchConfigInt(const std::string & name,int default_value)15 int GetFinchConfigInt(const std::string& name, int default_value) {
16 return base::GetFieldTrialParamByFeatureAsInt(
17 chrome::android::kInlineUpdateFlow, name, default_value);
18 }
19
GetFinchConfigBool(const std::string & name,bool default_value)20 bool GetFinchConfigBool(const std::string& name, bool default_value) {
21 return base::GetFieldTrialParamByFeatureAsBool(
22 chrome::android::kInlineUpdateFlow, name, default_value);
23 }
24
25 } // namespace
26
27 // Default update notification schedule initial interval in days.
28 constexpr int kDefaultUpdateNotificationInitInterval = 21;
29
30 // Default update notification schedule maximum interval in days.
31 constexpr int kDefaultUpdateNotificationMaxInterval = 90;
32
33 // Default start clock of deliver window in the morning.
34 constexpr int kDefaultDeliverWindowMorningStart = 5;
35
36 // Default end clock of deliver window in the morning.
37 constexpr int kDefaultDeliverWindowMorningEnd = 7;
38
39 // Default start clock of deliver window in the evening.
40 constexpr int kDefaultDeliverWindowEveningStart = 18;
41
42 // Default end clock of deliver window in the evening.
43 constexpr int kDefaultDeliverWindowEveningEnd = 20;
44
45 // Default update notification state.
46 constexpr bool kDefaultUpdateNotificationState = false;
47
Create()48 std::unique_ptr<UpdateNotificationConfig> UpdateNotificationConfig::Create() {
49 return std::make_unique<UpdateNotificationConfig>();
50 }
51
52 std::unique_ptr<UpdateNotificationConfig>
CreateFromFinch()53 UpdateNotificationConfig::CreateFromFinch() {
54 std::unique_ptr<UpdateNotificationConfig> config =
55 std::make_unique<UpdateNotificationConfig>();
56
57 config->is_enabled = GetFinchConfigBool(kUpdateNotificationStateParamName,
58 kDefaultUpdateNotificationState);
59
60 config->init_interval = base::TimeDelta::FromDays(
61 GetFinchConfigInt(kUpdateNotificationInitIntervalParamName,
62 kDefaultUpdateNotificationInitInterval));
63
64 config->max_interval = base::TimeDelta::FromDays(
65 GetFinchConfigInt(kUpdateNotificationMaxIntervalParamName,
66 kDefaultUpdateNotificationMaxInterval));
67
68 int morning_window_start =
69 GetFinchConfigInt(kUpdateNotificationDeliverWindowMorningStartParamName,
70 kDefaultDeliverWindowMorningStart);
71 int morning_window_end =
72 GetFinchConfigInt(kUpdateNotificationDeliverWindowMorningEndParamName,
73 kDefaultDeliverWindowMorningEnd);
74 config->deliver_window_morning = {
75 base::TimeDelta::FromHours(morning_window_start),
76 base::TimeDelta::FromHours(morning_window_end)};
77
78 int evening_window_start =
79 GetFinchConfigInt(kUpdateNotificationDeliverWindowEveningStartParamName,
80 kDefaultDeliverWindowEveningStart);
81 int evening_window_end =
82 GetFinchConfigInt(kUpdateNotificationDeliverWindowEveningEndParamName,
83 kDefaultDeliverWindowEveningEnd);
84 config->deliver_window_evening = {
85 base::TimeDelta::FromHours(evening_window_start),
86 base::TimeDelta::FromHours(evening_window_end)};
87
88 return config;
89 }
90
UpdateNotificationConfig()91 UpdateNotificationConfig::UpdateNotificationConfig()
92 : is_enabled(true),
93 init_interval(
94 base::TimeDelta::FromDays(kDefaultUpdateNotificationInitInterval)),
95 max_interval(
96 base::TimeDelta::FromDays(kDefaultUpdateNotificationMaxInterval)),
97 deliver_window_morning(
98 base::TimeDelta::FromHours(kDefaultDeliverWindowMorningStart),
99 base::TimeDelta::FromHours(kDefaultDeliverWindowMorningEnd)),
100 deliver_window_evening(
101 base::TimeDelta::FromHours(kDefaultDeliverWindowEveningStart),
102 base::TimeDelta::FromHours(kDefaultDeliverWindowEveningEnd)) {}
103
104 UpdateNotificationConfig::~UpdateNotificationConfig() = default;
105
106 } // namespace updates
107