1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/app/chrome_main_linux.h"
10 #include "base/command_line.h"
11 #include "base/environment.h"
12 #include "base/strings/string_tokenizer.h"
13 #include "base/strings/string_util.h"
14 #include "chrome/common/channel_info.h"
18 void AppendExtraArgsFromEnvVar(const std::string& env_var_name,
19 std::vector<std::string>& out_args) {
20 std::string extra_args_str;
21 auto environment = base::Environment::Create();
22 if (environment->GetVar(env_var_name, &extra_args_str)) {
23 base::StringTokenizer tokenizer(extra_args_str, base::kWhitespaceASCII);
24 tokenizer.set_quote_chars("\"'");
25 while (tokenizer.GetNext()) {
27 const std::string& token = tokenizer.token();
28 base::TrimString(token, "\"'", &arg);
29 out_args.push_back(arg);
36 void AppendExtraArgumentsToCommandLine(base::CommandLine* command_line) {
37 constexpr char kExtraFlagsVarName[] = "CHROME_EXTRA_FLAGS";
38 std::vector<std::string> extra_args = {""};
40 AppendExtraArgsFromEnvVar(kExtraFlagsVarName, extra_args);
41 std::string channel_suffix =
42 chrome::GetChannelSuffixForExtraFlagsEnvVarName();
43 if (!channel_suffix.empty()) {
44 AppendExtraArgsFromEnvVar(kExtraFlagsVarName + channel_suffix, extra_args);
47 command_line->AppendArguments(base::CommandLine(extra_args),
48 /*include_program=*/false);