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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/component_updater/component_updater_command_line_config_policy.h"
#include <string>
#include <vector>
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/sys_string_conversions.h"
#include "build/build_config.h"
#include "components/component_updater/component_updater_switches.h"
namespace component_updater {
namespace {
// Debug values you can pass to --component-updater=value1,value2. Do not
// use these values in production code.
// Speed up the initial component checking.
const char kSwitchFastUpdate[] = "fast-update";
// Disables pings. Pings are the requests sent to the update server that report
// the success or the failure of component install or update attempts.
const char kSwitchDisablePings[] = "disable-pings";
// Sets the URL for updates.
const char kSwitchUrlSource[] = "url-source";
// Disables differential updates.
const char kSwitchDisableDeltaUpdates[] = "disable-delta-updates";
// Configures the initial delay before the first component update check. The
// value is in seconds.
const char kInitialDelay[] = "initial-delay";
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
// Disables background downloads.
const char kSwitchDisableBackgroundDownloads[] = "disable-background-downloads";
#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
// If there is an element of |vec| of the form |test|=.*, returns the right-
// hand side of that assignment. Otherwise, returns an empty string.
// The right-hand side may contain additional '=' characters, allowing for
// further nesting of switch arguments.
std::string GetSwitchArgument(const std::vector<std::string>& vec,
const char* test) {
if (vec.empty()) {
return std::string();
}
for (auto it = vec.begin(); it != vec.end(); ++it) {
const std::size_t found = it->find("=");
if (found != std::string::npos) {
if (it->substr(0, found) == test) {
return it->substr(found + 1);
}
}
}
return std::string();
}
} // namespace
// Add "testrequest=1" attribute to the update check request.
const char kSwitchTestRequestParam[] = "test-request";
ComponentUpdaterCommandLineConfigPolicy::
ComponentUpdaterCommandLineConfigPolicy(const base::CommandLine* cmdline) {
DCHECK(cmdline);
// Parse comma-delimited debug flags.
std::vector<std::string> switch_values = base::SplitString(
cmdline->GetSwitchValueASCII(switches::kComponentUpdater), ",",
base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
background_downloads_enabled_ =
!base::Contains(switch_values, kSwitchDisableBackgroundDownloads);
#else
background_downloads_enabled_ = false;
#endif
deltas_enabled_ = !base::Contains(switch_values, kSwitchDisableDeltaUpdates);
fast_update_ = base::Contains(switch_values, kSwitchFastUpdate);
pings_enabled_ = !base::Contains(switch_values, kSwitchDisablePings);
test_request_ = base::Contains(switch_values, kSwitchTestRequestParam);
const std::string switch_url_source =
GetSwitchArgument(switch_values, kSwitchUrlSource);
if (!switch_url_source.empty()) {
url_source_override_ = GURL(switch_url_source);
DCHECK(url_source_override_.is_valid());
}
const std::string initial_delay =
GetSwitchArgument(switch_values, kInitialDelay);
double initial_delay_seconds = 0;
if (base::StringToDouble(initial_delay, &initial_delay_seconds)) {
initial_delay_ = base::Seconds(initial_delay_seconds);
}
}
bool ComponentUpdaterCommandLineConfigPolicy::BackgroundDownloadsEnabled()
const {
return background_downloads_enabled_;
}
bool ComponentUpdaterCommandLineConfigPolicy::DeltaUpdatesEnabled() const {
return deltas_enabled_;
}
bool ComponentUpdaterCommandLineConfigPolicy::FastUpdate() const {
return fast_update_;
}
bool ComponentUpdaterCommandLineConfigPolicy::PingsEnabled() const {
return pings_enabled_;
}
bool ComponentUpdaterCommandLineConfigPolicy::TestRequest() const {
return test_request_;
}
GURL ComponentUpdaterCommandLineConfigPolicy::UrlSourceOverride() const {
return url_source_override_;
}
base::TimeDelta ComponentUpdaterCommandLineConfigPolicy::InitialDelay() const {
return initial_delay_;
}
} // namespace component_updater
|