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