summaryrefslogtreecommitdiffstats
path: root/chrome/installer
diff options
context:
space:
mode:
authormsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-14 01:10:24 +0000
committermsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-14 01:10:24 +0000
commita40ca43033ac86cc3224d843c233a71e94e72dbf (patch)
tree3172d0bd0d9430a8f155df047c6b14d188557abc /chrome/installer
parentdc09efb7dd87597a7e4b5fe790d0ce3a2511380e (diff)
downloadchromium_src-a40ca43033ac86cc3224d843c233a71e94e72dbf.zip
chromium_src-a40ca43033ac86cc3224d843c233a71e94e72dbf.tar.gz
chromium_src-a40ca43033ac86cc3224d843c233a71e94e72dbf.tar.bz2
Consolidate most CommandLine code across platforms.
Significant refactoring with some notable behavior changes: 1. Switches are appended preceding existing arguments (after other swtiches). 2. (Windows) command_line_string() is generated and properly quoted/escaped. 3. Appended switches will retain their (optional) included prefixes (--,-,/). Notable internal changes (shouldn't affect behavior): 1. (Windows) Generate the cl string, instead of storing&updating the original. 2. Explicitly retain switch prefixes (--,-,/) (was automatic in init*/ctor). Update (obvious) code expecting switches to be appended antecedent to args. Add Nico's test from: codereview.chromium.org/6728016/. An intermediary CL landed between patch set 3 and 4, see: http://codereview.chromium.org/6596020 BUG=73195,67764 TEST=Commandline usage. Review URL: http://codereview.chromium.org/6526040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85360 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/installer')
-rw-r--r--chrome/installer/util/install_util.cc19
-rw-r--r--chrome/installer/util/install_util.h4
-rw-r--r--chrome/installer/util/product_state_unittest.cc19
3 files changed, 18 insertions, 24 deletions
diff --git a/chrome/installer/util/install_util.cc b/chrome/installer/util/install_util.cc
index 480e5df..6724ca2 100644
--- a/chrome/installer/util/install_util.cc
+++ b/chrome/installer/util/install_util.cc
@@ -356,25 +356,10 @@ int InstallUtil::GetInstallReturnCode(installer::InstallStatus status) {
}
// static
-void InstallUtil::MakeUninstallCommand(const std::wstring& exe_path,
+void InstallUtil::MakeUninstallCommand(const std::wstring& program,
const std::wstring& arguments,
CommandLine* command_line) {
- const bool no_program = exe_path.empty();
-
- // Return a bunch of nothingness.
- if (no_program && arguments.empty()) {
- *command_line = CommandLine(CommandLine::NO_PROGRAM);
- } else {
- // Form a full command line string.
- std::wstring command;
- command.append(1, L'"')
- .append(no_program ? L"" : exe_path)
- .append(L"\" ")
- .append(arguments);
-
- // If we have a program name, return this complete command line.
- *command_line = CommandLine::FromString(command);
- }
+ *command_line = CommandLine::FromString(L"\"" + program + L"\" " + arguments);
}
std::wstring InstallUtil::GetCurrentDate() {
diff --git a/chrome/installer/util/install_util.h b/chrome/installer/util/install_util.h
index 5592b40..9fa9576 100644
--- a/chrome/installer/util/install_util.h
+++ b/chrome/installer/util/install_util.h
@@ -151,8 +151,8 @@ class InstallUtil {
// Returns zero on install success, or an InstallStatus value otherwise.
static int GetInstallReturnCode(installer::InstallStatus install_status);
- // Composes |exe_path| and |arguments| into |command_line|.
- static void MakeUninstallCommand(const std::wstring& exe_path,
+ // Composes |program| and |arguments| into |command_line|.
+ static void MakeUninstallCommand(const std::wstring& program,
const std::wstring& arguments,
CommandLine* command_line);
diff --git a/chrome/installer/util/product_state_unittest.cc b/chrome/installer/util/product_state_unittest.cc
index c6031359..b6c228f 100644
--- a/chrome/installer/util/product_state_unittest.cc
+++ b/chrome/installer/util/product_state_unittest.cc
@@ -303,8 +303,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
ApplyUninstallCommand(NULL, L"--uninstall");
EXPECT_TRUE(state.Initialize(system_install_, dist_));
EXPECT_TRUE(state.GetSetupPath().empty());
- EXPECT_EQ(L"\"\" --uninstall",
- state.uninstall_command().command_line_string());
+ EXPECT_EQ(L" --uninstall", state.uninstall_command().command_line_string());
EXPECT_EQ(1U, state.uninstall_command().GetSwitchCount());
}
@@ -314,8 +313,18 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
ApplyUninstallCommand(L"setup.exe", NULL);
EXPECT_TRUE(state.Initialize(system_install_, dist_));
EXPECT_EQ(L"setup.exe", state.GetSetupPath().value());
- EXPECT_EQ(L"\"setup.exe\"",
- state.uninstall_command().command_line_string());
+ EXPECT_EQ(L"setup.exe", state.uninstall_command().command_line_string());
+ EXPECT_EQ(0U, state.uninstall_command().GetSwitchCount());
+ }
+
+ // Uninstall command with exe that requires quoting.
+ {
+ ProductState state;
+ ApplyUninstallCommand(L"set up.exe", NULL);
+ EXPECT_TRUE(state.Initialize(system_install_, dist_));
+ EXPECT_EQ(L"set up.exe", state.GetSetupPath().value());
+ EXPECT_EQ(L"\"set up.exe\"",
+ state.uninstall_command().command_line_string());
EXPECT_EQ(0U, state.uninstall_command().GetSwitchCount());
}
@@ -325,7 +334,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
ApplyUninstallCommand(L"setup.exe", L"--uninstall");
EXPECT_TRUE(state.Initialize(system_install_, dist_));
EXPECT_EQ(L"setup.exe", state.GetSetupPath().value());
- EXPECT_EQ(L"\"setup.exe\" --uninstall",
+ EXPECT_EQ(L"setup.exe --uninstall",
state.uninstall_command().command_line_string());
EXPECT_EQ(1U, state.uninstall_command().GetSwitchCount());
}