blob: 0628709f5610ce5a26067442016c27d46cb8cef4 [file] [log] [blame]
drogerf8a88142015-08-19 07:48:361// Copyright 2014 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 "components/component_updater/configurator_impl.h"
6
avibc5337b2015-12-25 23:16:337#include <stddef.h>
8
drogerf8a88142015-08-19 07:48:369#include <algorithm>
10
Sorin Jianu75e6bf22019-02-12 16:07:1211#include "base/callback.h"
Sorin Jianu5017f22c2018-11-15 18:05:1312#include "base/feature_list.h"
djmix.kima8283ee2017-07-11 08:48:5313#include "base/stl_util.h"
drogerf8a88142015-08-19 07:48:3614#include "base/strings/string_split.h"
15#include "base/strings/string_util.h"
16#include "base/version.h"
17#include "build/build_config.h"
18#include "components/component_updater/component_updater_switches.h"
19#include "components/component_updater/component_updater_url_constants.h"
Minh X. Nguyen55afbe42018-05-18 22:04:2620#include "components/update_client/command_line_config_policy.h"
Sorin Jianu47a4dd8c2018-10-19 16:34:5421#include "components/update_client/protocol_handler.h"
sorinfccbf2d2016-04-04 20:34:3422#include "components/update_client/utils.h"
drogerf8a88142015-08-19 07:48:3623#include "components/version_info/version_info.h"
24
25#if defined(OS_WIN)
26#include "base/win/win_util.h"
27#endif // OS_WIN
28
29namespace component_updater {
30
31namespace {
sorin3dd028dc2016-07-26 00:06:3432
drogerf8a88142015-08-19 07:48:3633// Default time constants.
34const int kDelayOneMinute = 60;
35const int kDelayOneHour = kDelayOneMinute * 60;
36
drogerf8a88142015-08-19 07:48:3637} // namespace
38
Minh X. Nguyen55afbe42018-05-18 22:04:2639ConfiguratorImpl::ConfiguratorImpl(
40 const update_client::CommandLineConfigPolicy& config_policy,
41 bool require_encryption)
42 : background_downloads_enabled_(config_policy.BackgroundDownloadsEnabled()),
43 deltas_enabled_(config_policy.DeltaUpdatesEnabled()),
44 fast_update_(config_policy.FastUpdate()),
45 pings_enabled_(config_policy.PingsEnabled()),
46 require_encryption_(require_encryption),
Sorin Jianuc27ef6f2018-06-19 14:42:5547 url_source_override_(config_policy.UrlSourceOverride()),
48 initial_delay_(config_policy.InitialDelay()) {
Sorin Jianu704c72ee2018-11-19 23:24:5349 if (config_policy.TestRequest()) {
Sorin Jianuc303bf42018-09-07 16:19:3350 extra_info_["testrequest"] = "1";
Sorin Jianu704c72ee2018-11-19 23:24:5351 extra_info_["testsource"] = "dev";
52 }
drogerf8a88142015-08-19 07:48:3653}
54
55ConfiguratorImpl::~ConfiguratorImpl() {}
56
57int ConfiguratorImpl::InitialDelay() const {
Sorin Jianuc27ef6f2018-06-19 14:42:5558 if (initial_delay_)
59 return initial_delay_;
Joshua Pawlicki7b801e0b2019-11-01 13:15:2160 return fast_update_ ? 10 : kDelayOneMinute;
drogerf8a88142015-08-19 07:48:3661}
62
63int ConfiguratorImpl::NextCheckDelay() const {
mxnguyen96a656262017-02-28 17:51:4364 return 5 * kDelayOneHour;
drogerf8a88142015-08-19 07:48:3665}
66
drogerf8a88142015-08-19 07:48:3667int ConfiguratorImpl::OnDemandDelay() const {
68 return fast_update_ ? 2 : (30 * kDelayOneMinute);
69}
70
71int ConfiguratorImpl::UpdateDelay() const {
72 return fast_update_ ? 10 : (15 * kDelayOneMinute);
73}
74
75std::vector<GURL> ConfiguratorImpl::UpdateUrl() const {
Sorin Jianu5017f22c2018-11-15 18:05:1376 if (url_source_override_.is_valid())
Sorin Jianuf6598852018-05-15 18:08:0477 return {GURL(url_source_override_)};
sorinfccbf2d2016-04-04 20:34:3478
Joshua Pawlicki705087b2019-03-12 15:40:5779 std::vector<GURL> urls{GURL(kUpdaterJSONDefaultUrl),
80 GURL(kUpdaterJSONFallbackUrl)};
sorinfccbf2d2016-04-04 20:34:3481 if (require_encryption_)
82 update_client::RemoveUnsecureUrls(&urls);
83
drogerf8a88142015-08-19 07:48:3684 return urls;
85}
86
87std::vector<GURL> ConfiguratorImpl::PingUrl() const {
88 return pings_enabled_ ? UpdateUrl() : std::vector<GURL>();
89}
90
Lei Zhang8dbfcb62018-04-05 00:41:0891const base::Version& ConfiguratorImpl::GetBrowserVersion() const {
92 return version_info::GetVersion();
drogerf8a88142015-08-19 07:48:3693}
94
95std::string ConfiguratorImpl::GetOSLongName() const {
96 return version_info::GetOSType();
97}
98
Sorin Jianuc303bf42018-09-07 16:19:3399base::flat_map<std::string, std::string> ConfiguratorImpl::ExtraRequestParams()
100 const {
drogerf8a88142015-08-19 07:48:36101 return extra_info_;
102}
103
sorin590586c2016-01-26 20:09:40104std::string ConfiguratorImpl::GetDownloadPreference() const {
105 return std::string();
106}
107
sorincb4e5e92016-08-02 21:48:40108bool ConfiguratorImpl::EnabledDeltas() const {
drogerf8a88142015-08-19 07:48:36109 return deltas_enabled_;
110}
111
sorincb4e5e92016-08-02 21:48:40112bool ConfiguratorImpl::EnabledComponentUpdates() const {
113 return true;
114}
115
116bool ConfiguratorImpl::EnabledBackgroundDownloader() const {
drogerf8a88142015-08-19 07:48:36117 return background_downloads_enabled_;
118}
119
sorincb4e5e92016-08-02 21:48:40120bool ConfiguratorImpl::EnabledCupSigning() const {
sorin1bc5eff2016-02-17 18:45:17121 return true;
122}
123
Sorin Jianua68e1cc2017-06-21 19:45:28124std::vector<uint8_t> ConfiguratorImpl::GetRunActionKeyHash() const {
Sorin Jianu446e5dc2017-07-20 01:36:50125 return std::vector<uint8_t>{0x5f, 0x94, 0xe0, 0x3c, 0x64, 0x30, 0x9f, 0xbc,
126 0xfe, 0x00, 0x9a, 0x27, 0x3e, 0x52, 0xbf, 0xa5,
127 0x84, 0xb9, 0xb3, 0x75, 0x07, 0x29, 0xde, 0xfa,
128 0x32, 0x76, 0xd9, 0x93, 0xb5, 0xa3, 0xce, 0x02};
Sorin Jianua68e1cc2017-06-21 19:45:28129}
130
Sorin Jianudbbd2c2c2018-06-11 18:16:27131// The default implementation for most embedders returns an empty string.
132// Desktop embedders, such as the Windows component updater can provide a
133// meaningful implementation for this function.
134std::string ConfiguratorImpl::GetAppGuid() const {
135 return {};
136}
137
Sorin Jianu47a4dd8c2018-10-19 16:34:54138std::unique_ptr<update_client::ProtocolHandlerFactory>
139ConfiguratorImpl::GetProtocolHandlerFactory() const {
Joshua Pawlicki705087b2019-03-12 15:40:57140 return std::make_unique<update_client::ProtocolHandlerFactoryJSON>();
Sorin Jianu47a4dd8c2018-10-19 16:34:54141}
142
Sorin Jianuc9d642e2018-12-18 19:38:36143update_client::RecoveryCRXElevator ConfiguratorImpl::GetRecoveryCRXElevator()
144 const {
145 return {};
146}
147
drogerf8a88142015-08-19 07:48:36148} // namespace component_updater