File: component_updater_command_line_config_policy.cc

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (136 lines) | stat: -rw-r--r-- 4,536 bytes parent folder | download | duplicates (2)
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