OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/install_static/product_install_details.h" | 5 #include "chrome/install_static/product_install_details.h" |
6 | 6 |
7 #include "base/base_paths.h" | 7 #include "base/base_paths.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/i18n/case_conversion.h" | 9 #include "base/i18n/case_conversion.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 override_manager_.OverrideRegistry(root_key_, &path); | 177 override_manager_.OverrideRegistry(root_key_, &path); |
178 nt::SetTestingOverride(nt_root_key_, path); | 178 nt::SetTestingOverride(nt_root_key_, path); |
179 } | 179 } |
180 | 180 |
181 ~MakeProductDetailsTest() { | 181 ~MakeProductDetailsTest() { |
182 nt::SetTestingOverride(nt_root_key_, base::string16()); | 182 nt::SetTestingOverride(nt_root_key_, base::string16()); |
183 } | 183 } |
184 | 184 |
185 const TestData& test_data() const { return test_data_; } | 185 const TestData& test_data() const { return test_data_; } |
186 | 186 |
187 void SetUninstallArguments(const wchar_t* value) { | 187 void SetAp(const wchar_t* value) { |
188 ASSERT_THAT( | 188 ASSERT_THAT(base::win::RegKey(root_key_, GetClientStateKeyPath().c_str(), |
189 base::win::RegKey(root_key_, GetClientStateKeyPath(false).c_str(), | 189 KEY_WOW64_32KEY | KEY_SET_VALUE) |
190 KEY_WOW64_32KEY | KEY_SET_VALUE) | 190 .WriteValue(L"ap", value), |
191 .WriteValue(L"UninstallArguments", value), | 191 Eq(ERROR_SUCCESS)); |
192 Eq(ERROR_SUCCESS)); | |
193 } | |
194 | |
195 void SetAp(const wchar_t* value, bool binaries) { | |
196 ASSERT_TRUE(!binaries || | |
197 kInstallModes[test_data().index].supports_multi_install); | |
198 ASSERT_THAT( | |
199 base::win::RegKey(root_key_, GetClientStateKeyPath(binaries).c_str(), | |
200 KEY_WOW64_32KEY | KEY_SET_VALUE) | |
201 .WriteValue(L"ap", value), | |
202 Eq(ERROR_SUCCESS)); | |
203 } | 192 } |
204 | 193 |
205 private: | 194 private: |
206 // Returns the registry path for the product's ClientState key. | 195 // Returns the registry path for the product's ClientState key. |
207 std::wstring GetClientStateKeyPath(bool binaries) { | 196 std::wstring GetClientStateKeyPath() { |
208 EXPECT_TRUE(!binaries || | |
209 kInstallModes[test_data().index].supports_multi_install); | |
210 std::wstring result(L"Software\\"); | 197 std::wstring result(L"Software\\"); |
211 if (kUseGoogleUpdateIntegration) { | 198 if (kUseGoogleUpdateIntegration) { |
212 result.append(L"Google\\Update\\ClientState\\"); | 199 result.append(L"Google\\Update\\ClientState\\"); |
213 if (binaries) | 200 result.append(kInstallModes[test_data().index].app_guid); |
214 result.append(kBinariesAppGuid); | |
215 else | |
216 result.append(kInstallModes[test_data().index].app_guid); | |
217 } else if (binaries) { | |
218 result.append(kBinariesPathName); | |
219 } else { | 201 } else { |
220 result.append(kProductPathName); | 202 result.append(kProductPathName); |
221 } | 203 } |
222 return result; | 204 return result; |
223 } | 205 } |
224 | 206 |
225 registry_util::RegistryOverrideManager override_manager_; | 207 registry_util::RegistryOverrideManager override_manager_; |
226 const TestData& test_data_; | 208 const TestData& test_data_; |
227 HKEY root_key_; | 209 HKEY root_key_; |
228 nt::ROOT_KEY nt_root_key_; | 210 nt::ROOT_KEY nt_root_key_; |
(...skipping 15 matching lines...) Expand all Loading... |
244 EXPECT_THAT(details->system_level(), Eq(test_data().system_level)); | 226 EXPECT_THAT(details->system_level(), Eq(test_data().system_level)); |
245 } | 227 } |
246 | 228 |
247 // Test that the default channel is sniffed properly based on the path. | 229 // Test that the default channel is sniffed properly based on the path. |
248 TEST_P(MakeProductDetailsTest, DefaultChannel) { | 230 TEST_P(MakeProductDetailsTest, DefaultChannel) { |
249 std::unique_ptr<PrimaryInstallDetails> details( | 231 std::unique_ptr<PrimaryInstallDetails> details( |
250 MakeProductDetails(test_data().path)); | 232 MakeProductDetails(test_data().path)); |
251 EXPECT_THAT(details->channel(), StrEq(test_data().channel)); | 233 EXPECT_THAT(details->channel(), StrEq(test_data().channel)); |
252 } | 234 } |
253 | 235 |
254 // Test that multi-install is properly parsed out of the registry. | |
255 TEST_P(MakeProductDetailsTest, MultiInstall) { | |
256 { | |
257 std::unique_ptr<PrimaryInstallDetails> details( | |
258 MakeProductDetails(test_data().path)); | |
259 EXPECT_FALSE(details->multi_install()); | |
260 } | |
261 | |
262 { | |
263 SetUninstallArguments(L"--uninstall"); | |
264 std::unique_ptr<PrimaryInstallDetails> details( | |
265 MakeProductDetails(test_data().path)); | |
266 EXPECT_FALSE(details->multi_install()); | |
267 } | |
268 | |
269 if (!kInstallModes[test_data().index].supports_multi_install) | |
270 return; | |
271 | |
272 { | |
273 SetUninstallArguments(L"--uninstall --multi-install --chrome"); | |
274 std::unique_ptr<PrimaryInstallDetails> details( | |
275 MakeProductDetails(test_data().path)); | |
276 EXPECT_TRUE(details->multi_install()); | |
277 } | |
278 } | |
279 | |
280 // Test that the channel name is properly parsed out of additional parameters. | 236 // Test that the channel name is properly parsed out of additional parameters. |
281 TEST_P(MakeProductDetailsTest, AdditionalParametersChannels) { | 237 TEST_P(MakeProductDetailsTest, AdditionalParametersChannels) { |
282 const std::pair<const wchar_t*, const wchar_t*> kApChannels[] = { | 238 const std::pair<const wchar_t*, const wchar_t*> kApChannels[] = { |
283 // stable | 239 // stable |
284 {L"", L""}, | 240 {L"", L""}, |
285 {L"-full", L""}, | 241 {L"-full", L""}, |
286 {L"x64-stable", L""}, | 242 {L"x64-stable", L""}, |
287 {L"x64-stable-full", L""}, | 243 {L"x64-stable-full", L""}, |
288 {L"baz-x64-stable", L""}, | 244 {L"baz-x64-stable", L""}, |
289 {L"foo-1.1-beta", L""}, | 245 {L"foo-1.1-beta", L""}, |
290 {L"2.0-beta", L""}, | 246 {L"2.0-beta", L""}, |
291 {L"bar-2.0-dev", L""}, | 247 {L"bar-2.0-dev", L""}, |
292 {L"1.0-dev", L""}, | 248 {L"1.0-dev", L""}, |
293 {L"fuzzy", L""}, | 249 {L"fuzzy", L""}, |
294 {L"foo", L""}, | 250 {L"foo", L""}, |
295 {L"-multi-chrome", L""}, | 251 {L"-multi-chrome", L""}, // Legacy. |
296 {L"x64-stable-multi-chrome", L""}, | 252 {L"x64-stable-multi-chrome", L""}, // Legacy. |
297 {L"-stage:ensemble_patching-multi-chrome-full", L""}, | 253 {L"-stage:ensemble_patching-multi-chrome-full", L""}, // Legacy. |
298 {L"-multi-chrome-full", L""}, | 254 {L"-multi-chrome-full", L""}, // Legacy. |
299 // beta | 255 // beta |
300 {L"1.1-beta", L"beta"}, | 256 {L"1.1-beta", L"beta"}, |
301 {L"1.1-beta-full", L"beta"}, | 257 {L"1.1-beta-full", L"beta"}, |
302 {L"x64-beta", L"beta"}, | 258 {L"x64-beta", L"beta"}, |
303 {L"x64-beta-full", L"beta"}, | 259 {L"x64-beta-full", L"beta"}, |
304 {L"1.1-bar", L"beta"}, | 260 {L"1.1-bar", L"beta"}, |
305 {L"1n1-foobar", L"beta"}, | 261 {L"1n1-foobar", L"beta"}, |
306 {L"x64-Beta", L"beta"}, | 262 {L"x64-Beta", L"beta"}, |
307 {L"bar-x64-beta", L"beta"}, | 263 {L"bar-x64-beta", L"beta"}, |
308 // dev | 264 // dev |
309 {L"2.0-dev", L"dev"}, | 265 {L"2.0-dev", L"dev"}, |
310 {L"2.0-dev-full", L"dev"}, | 266 {L"2.0-dev-full", L"dev"}, |
311 {L"x64-dev", L"dev"}, | 267 {L"x64-dev", L"dev"}, |
312 {L"x64-dev-full", L"dev"}, | 268 {L"x64-dev-full", L"dev"}, |
313 {L"2.0-DEV", L"dev"}, | 269 {L"2.0-DEV", L"dev"}, |
314 {L"2.0-dev-eloper", L"dev"}, | 270 {L"2.0-dev-eloper", L"dev"}, |
315 {L"2.0-doom", L"dev"}, | 271 {L"2.0-doom", L"dev"}, |
316 {L"250-doom", L"dev"}, | 272 {L"250-doom", L"dev"}, |
317 }; | 273 }; |
318 | 274 |
319 for (const auto& ap_and_channel : kApChannels) { | 275 for (const auto& ap_and_channel : kApChannels) { |
320 SetAp(ap_and_channel.first, false); | 276 SetAp(ap_and_channel.first); |
321 std::unique_ptr<PrimaryInstallDetails> details( | 277 std::unique_ptr<PrimaryInstallDetails> details( |
322 MakeProductDetails(test_data().path)); | 278 MakeProductDetails(test_data().path)); |
323 if (kInstallModes[test_data().index].channel_strategy == | 279 if (kInstallModes[test_data().index].channel_strategy == |
324 ChannelStrategy::ADDITIONAL_PARAMETERS) { | |
325 EXPECT_THAT(details->channel(), StrEq(ap_and_channel.second)); | |
326 } else { | |
327 // "ap" is ignored for this mode. | |
328 EXPECT_THAT(details->channel(), StrEq(test_data().channel)); | |
329 } | |
330 } | |
331 | |
332 if (!kInstallModes[test_data().index].supports_multi_install) | |
333 return; | |
334 | |
335 // For multi-install modes, "ap" is pulled from the binaries' key. | |
336 for (const auto& ap_and_channel : kApChannels) { | |
337 SetAp(ap_and_channel.first, true); | |
338 SetUninstallArguments(L"--uninstall --multi-install --chrome"); | |
339 std::unique_ptr<PrimaryInstallDetails> details( | |
340 MakeProductDetails(test_data().path)); | |
341 if (kInstallModes[test_data().index].channel_strategy == | |
342 ChannelStrategy::ADDITIONAL_PARAMETERS) { | 280 ChannelStrategy::ADDITIONAL_PARAMETERS) { |
343 EXPECT_THAT(details->channel(), StrEq(ap_and_channel.second)); | 281 EXPECT_THAT(details->channel(), StrEq(ap_and_channel.second)); |
344 } else { | 282 } else { |
345 // "ap" is ignored for this mode. | 283 // "ap" is ignored for this mode. |
346 EXPECT_THAT(details->channel(), StrEq(test_data().channel)); | 284 EXPECT_THAT(details->channel(), StrEq(test_data().channel)); |
347 } | 285 } |
348 } | 286 } |
349 } | 287 } |
350 | 288 |
351 INSTANTIATE_TEST_CASE_P(All, | 289 INSTANTIATE_TEST_CASE_P(All, |
352 MakeProductDetailsTest, | 290 MakeProductDetailsTest, |
353 testing::ValuesIn(kTestData)); | 291 testing::ValuesIn(kTestData)); |
354 | 292 |
355 } // namespace install_static | 293 } // namespace install_static |
OLD | NEW |