| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/installer/setup/installer_state.h" | 5 #include "chrome/installer/setup/installer_state.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <fstream> | 10 #include <fstream> |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 | 116 |
| 117 TEST_F(InstallerStateTest, InstallerResult) { | 117 TEST_F(InstallerStateTest, InstallerResult) { |
| 118 const bool system_level = true; | 118 const bool system_level = true; |
| 119 HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 119 HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| 120 | 120 |
| 121 RegKey key; | 121 RegKey key; |
| 122 std::wstring launch_cmd = L"hey diddle diddle"; | 122 std::wstring launch_cmd = L"hey diddle diddle"; |
| 123 std::wstring value; | 123 std::wstring value; |
| 124 DWORD dw_value; | 124 DWORD dw_value; |
| 125 | 125 |
| 126 // check results for a fresh install of single Chrome | 126 // Check results for a fresh install of single Chrome and the same for an |
| 127 { | 127 // attempt at multi-install, which is now ignored. |
| 128 static constexpr const wchar_t* kCommandLines[] = { |
| 129 L"setup.exe --system-level", |
| 130 L"setup.exe --system-level --multi-install --chrome", |
| 131 }; |
| 132 for (const wchar_t* command_line : kCommandLines) { |
| 128 RegistryOverrideManager override_manager; | 133 RegistryOverrideManager override_manager; |
| 129 override_manager.OverrideRegistry(root); | 134 override_manager.OverrideRegistry(root); |
| 130 base::CommandLine cmd_line = | 135 base::CommandLine cmd_line = base::CommandLine::FromString(command_line); |
| 131 base::CommandLine::FromString(L"setup.exe --system-level"); | |
| 132 const MasterPreferences prefs(cmd_line); | 136 const MasterPreferences prefs(cmd_line); |
| 133 InstallationState machine_state; | 137 InstallationState machine_state; |
| 134 machine_state.Initialize(); | 138 machine_state.Initialize(); |
| 135 InstallerState state; | 139 InstallerState state; |
| 136 state.Initialize(cmd_line, prefs, machine_state); | 140 state.Initialize(cmd_line, prefs, machine_state); |
| 137 state.WriteInstallerResult(installer::FIRST_INSTALL_SUCCESS, | 141 state.WriteInstallerResult(installer::FIRST_INSTALL_SUCCESS, |
| 138 IDS_INSTALL_OS_ERROR_BASE, &launch_cmd); | 142 IDS_INSTALL_OS_ERROR_BASE, &launch_cmd); |
| 139 BrowserDistribution* distribution = | 143 BrowserDistribution* distribution = |
| 140 BrowserDistribution::GetSpecificDistribution( | 144 BrowserDistribution::GetSpecificDistribution( |
| 141 BrowserDistribution::CHROME_BROWSER); | 145 BrowserDistribution::CHROME_BROWSER); |
| 142 EXPECT_EQ(ERROR_SUCCESS, | 146 EXPECT_EQ(ERROR_SUCCESS, |
| 143 key.Open(root, distribution->GetStateKey().c_str(), KEY_READ)); | 147 key.Open(root, distribution->GetStateKey().c_str(), KEY_READ)); |
| 144 EXPECT_EQ(ERROR_SUCCESS, | 148 EXPECT_EQ(ERROR_SUCCESS, |
| 145 key.ReadValueDW(installer::kInstallerResult, &dw_value)); | 149 key.ReadValueDW(installer::kInstallerResult, &dw_value)); |
| 146 EXPECT_EQ(static_cast<DWORD>(0), dw_value); | 150 EXPECT_EQ(static_cast<DWORD>(0), dw_value); |
| 147 EXPECT_EQ(ERROR_SUCCESS, | 151 EXPECT_EQ(ERROR_SUCCESS, |
| 148 key.ReadValueDW(installer::kInstallerError, &dw_value)); | 152 key.ReadValueDW(installer::kInstallerError, &dw_value)); |
| 149 EXPECT_EQ(static_cast<DWORD>(installer::FIRST_INSTALL_SUCCESS), dw_value); | 153 EXPECT_EQ(static_cast<DWORD>(installer::FIRST_INSTALL_SUCCESS), dw_value); |
| 150 EXPECT_EQ(ERROR_SUCCESS, | 154 EXPECT_EQ(ERROR_SUCCESS, |
| 151 key.ReadValue(installer::kInstallerResultUIString, &value)); | 155 key.ReadValue(installer::kInstallerResultUIString, &value)); |
| 152 EXPECT_FALSE(value.empty()); | 156 EXPECT_FALSE(value.empty()); |
| 153 EXPECT_EQ(ERROR_SUCCESS, | 157 EXPECT_EQ(ERROR_SUCCESS, |
| 154 key.ReadValue(installer::kInstallerSuccessLaunchCmdLine, &value)); | 158 key.ReadValue(installer::kInstallerSuccessLaunchCmdLine, &value)); |
| 155 EXPECT_EQ(launch_cmd, value); | 159 EXPECT_EQ(launch_cmd, value); |
| 156 } | 160 } |
| 157 | |
| 158 // check results for a fresh install of multi Chrome | |
| 159 { | |
| 160 RegistryOverrideManager override_manager; | |
| 161 override_manager.OverrideRegistry(root); | |
| 162 base::CommandLine cmd_line = base::CommandLine::FromString( | |
| 163 L"setup.exe --system-level --multi-install --chrome"); | |
| 164 const MasterPreferences prefs(cmd_line); | |
| 165 InstallationState machine_state; | |
| 166 machine_state.Initialize(); | |
| 167 InstallerState state; | |
| 168 state.Initialize(cmd_line, prefs, machine_state); | |
| 169 state.WriteInstallerResult(installer::FIRST_INSTALL_SUCCESS, 0, | |
| 170 &launch_cmd); | |
| 171 BrowserDistribution* distribution = | |
| 172 BrowserDistribution::GetSpecificDistribution( | |
| 173 BrowserDistribution::CHROME_BROWSER); | |
| 174 BrowserDistribution* binaries = | |
| 175 BrowserDistribution::GetSpecificDistribution( | |
| 176 BrowserDistribution::CHROME_BINARIES); | |
| 177 EXPECT_EQ(ERROR_SUCCESS, | |
| 178 key.Open(root, distribution->GetStateKey().c_str(), KEY_READ)); | |
| 179 EXPECT_EQ(ERROR_SUCCESS, | |
| 180 key.ReadValue(installer::kInstallerSuccessLaunchCmdLine, &value)); | |
| 181 EXPECT_EQ(launch_cmd, value); | |
| 182 EXPECT_EQ(ERROR_SUCCESS, | |
| 183 key.Open(root, binaries->GetStateKey().c_str(), KEY_READ)); | |
| 184 EXPECT_EQ(ERROR_SUCCESS, | |
| 185 key.ReadValue(installer::kInstallerSuccessLaunchCmdLine, &value)); | |
| 186 EXPECT_EQ(launch_cmd, value); | |
| 187 key.Close(); | |
| 188 } | |
| 189 } | 161 } |
| 190 | 162 |
| 191 // Test GetCurrentVersion when migrating single Chrome to multi | 163 // Test GetCurrentVersion when migrating single Chrome to multi |
| 192 TEST_F(InstallerStateTest, GetCurrentVersionMigrateChrome) { | 164 TEST_F(InstallerStateTest, GetCurrentVersionMigrateChrome) { |
| 193 using installer::FakeInstallationState; | 165 using installer::FakeInstallationState; |
| 194 | 166 |
| 195 const bool system_install = false; | 167 const bool system_install = false; |
| 196 FakeInstallationState machine_state; | 168 FakeInstallationState machine_state; |
| 197 | 169 |
| 198 // Pretend that this version of single-install Chrome is already installed. | 170 // Pretend that this version of single-install Chrome is already installed. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 temp); | 224 temp); |
| 253 registry_util::RegistryOverrideManager override_manager; | 225 registry_util::RegistryOverrideManager override_manager; |
| 254 override_manager.OverrideRegistry(HKEY_CURRENT_USER); | 226 override_manager.OverrideRegistry(HKEY_CURRENT_USER); |
| 255 override_manager.OverrideRegistry(HKEY_LOCAL_MACHINE); | 227 override_manager.OverrideRegistry(HKEY_LOCAL_MACHINE); |
| 256 | 228 |
| 257 InstallationState machine_state; | 229 InstallationState machine_state; |
| 258 machine_state.Initialize(); | 230 machine_state.Initialize(); |
| 259 | 231 |
| 260 InstallerState installer_state; | 232 InstallerState installer_state; |
| 261 | 233 |
| 262 // Initialize the instance to install multi Chrome. | 234 // Initialize the instance to install user-level Chrome. |
| 263 { | 235 { |
| 264 base::CommandLine cmd_line( | 236 base::CommandLine cmd_line(base::CommandLine::FromString(L"setup.exe")); |
| 265 base::CommandLine::FromString(L"setup.exe --multi-install --chrome")); | |
| 266 MasterPreferences prefs(cmd_line); | 237 MasterPreferences prefs(cmd_line); |
| 267 installer_state.Initialize(cmd_line, prefs, machine_state); | 238 installer_state.Initialize(cmd_line, prefs, machine_state); |
| 268 } | 239 } |
| 269 // Confirm the expected state. | 240 // Confirm the expected state. |
| 270 EXPECT_EQ(InstallerState::USER_LEVEL, installer_state.level()); | 241 EXPECT_EQ(InstallerState::USER_LEVEL, installer_state.level()); |
| 271 EXPECT_EQ(InstallerState::MULTI_PACKAGE, installer_state.package_type()); | 242 EXPECT_EQ(InstallerState::SINGLE_PACKAGE, installer_state.package_type()); |
| 272 EXPECT_EQ(InstallerState::MULTI_INSTALL, installer_state.operation()); | 243 EXPECT_EQ(InstallerState::SINGLE_INSTALL_OR_UPDATE, |
| 244 installer_state.operation()); |
| 273 EXPECT_TRUE(wcsstr(installer_state.target_path().value().c_str(), | 245 EXPECT_TRUE(wcsstr(installer_state.target_path().value().c_str(), |
| 274 BrowserDistribution::GetSpecificDistribution( | 246 BrowserDistribution::GetSpecificDistribution( |
| 275 BrowserDistribution::CHROME_BINARIES)-> | 247 BrowserDistribution::CHROME_BROWSER) |
| 276 GetInstallSubDir().c_str())); | 248 ->GetInstallSubDir() |
| 249 .c_str())); |
| 277 EXPECT_FALSE(installer_state.verbose_logging()); | 250 EXPECT_FALSE(installer_state.verbose_logging()); |
| 278 EXPECT_EQ(installer_state.state_key(), | 251 EXPECT_EQ(installer_state.state_key(), |
| 279 BrowserDistribution::GetSpecificDistribution( | 252 BrowserDistribution::GetSpecificDistribution( |
| 280 BrowserDistribution::CHROME_BROWSER)->GetStateKey()); | 253 BrowserDistribution::CHROME_BROWSER)->GetStateKey()); |
| 281 EXPECT_EQ(installer_state.state_type(), BrowserDistribution::CHROME_BROWSER); | 254 EXPECT_EQ(installer_state.state_type(), BrowserDistribution::CHROME_BROWSER); |
| 282 EXPECT_TRUE(installer_state.multi_package_binaries_distribution()); | |
| 283 EXPECT_TRUE(installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER)); | 255 EXPECT_TRUE(installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER)); |
| 284 | 256 |
| 285 // Now initialize it to install system-level single Chrome. | 257 // Now initialize it to install system-level single Chrome. |
| 286 { | 258 { |
| 287 base::CommandLine cmd_line(base::CommandLine::FromString( | 259 base::CommandLine cmd_line(base::CommandLine::FromString( |
| 288 L"setup.exe --system-level --verbose-logging")); | 260 L"setup.exe --system-level --verbose-logging")); |
| 289 MasterPreferences prefs(cmd_line); | 261 MasterPreferences prefs(cmd_line); |
| 290 installer_state.Initialize(cmd_line, prefs, machine_state); | 262 installer_state.Initialize(cmd_line, prefs, machine_state); |
| 291 } | 263 } |
| 292 | 264 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 // Critical update newer than the new version. | 421 // Critical update newer than the new version. |
| 450 EXPECT_FALSE( | 422 EXPECT_FALSE( |
| 451 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); | 423 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); |
| 452 EXPECT_FALSE( | 424 EXPECT_FALSE( |
| 453 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) | 425 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) |
| 454 .IsValid()); | 426 .IsValid()); |
| 455 EXPECT_FALSE( | 427 EXPECT_FALSE( |
| 456 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) | 428 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) |
| 457 .IsValid()); | 429 .IsValid()); |
| 458 } | 430 } |
| OLD | NEW |