blob: 5066fb240e0ec9b1030fd5bf4e00fb2a51a4ef0b [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
Sorin Jianu30881152020-03-16 14:31:1955ConfiguratorImpl::~ConfiguratorImpl() = default;
drogerf8a88142015-08-19 07:48:3656
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 Jianudbbd2c2c2018-06-11 18:16:27124// The default implementation for most embedders returns an empty string.
125// Desktop embedders, such as the Windows component updater can provide a
126// meaningful implementation for this function.
127std::string ConfiguratorImpl::GetAppGuid() const {
128 return {};
129}
130
Sorin Jianu47a4dd8c2018-10-19 16:34:54131std::unique_ptr<update_client::ProtocolHandlerFactory>
132ConfiguratorImpl::GetProtocolHandlerFactory() const {
Joshua Pawlicki705087b2019-03-12 15:40:57133 return std::make_unique<update_client::ProtocolHandlerFactoryJSON>();
Sorin Jianu47a4dd8c2018-10-19 16:34:54134}
135
drogerf8a88142015-08-19 07:48:36136} // namespace component_updater