Chromium Code Reviews| 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/util/google_update_settings.h" | 5 #include "chrome/installer/util/google_update_settings.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | |
| 9 | 8 |
| 10 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 11 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 12 #include "base/logging.h" | 11 #include "base/logging.h" |
| 13 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 14 #include "base/path_service.h" | 13 #include "base/path_service.h" |
| 15 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 16 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/threading/thread_restrictions.h" | 17 #include "base/threading/thread_restrictions.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 46 const GoogleUpdateSettings::UpdatePolicy | 45 const GoogleUpdateSettings::UpdatePolicy |
| 47 GoogleUpdateSettings::kDefaultUpdatePolicy = | 46 GoogleUpdateSettings::kDefaultUpdatePolicy = |
| 48 #if defined(GOOGLE_CHROME_BUILD) | 47 #if defined(GOOGLE_CHROME_BUILD) |
| 49 GoogleUpdateSettings::AUTOMATIC_UPDATES; | 48 GoogleUpdateSettings::AUTOMATIC_UPDATES; |
| 50 #else | 49 #else |
| 51 GoogleUpdateSettings::UPDATES_DISABLED; | 50 GoogleUpdateSettings::UPDATES_DISABLED; |
| 52 #endif | 51 #endif |
| 53 | 52 |
| 54 namespace { | 53 namespace { |
| 55 | 54 |
| 56 bool ReadGoogleUpdateStrKey(const wchar_t* const name, std::wstring* value) { | 55 bool ReadGoogleUpdateStrKey(const wchar_t* const name, base::string16* value) { |
| 57 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 56 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 58 std::wstring reg_path = dist->GetStateKey(); | 57 base::string16 reg_path = dist->GetStateKey(); |
| 59 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_READ | KEY_WOW64_32KEY); | 58 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_READ | KEY_WOW64_32KEY); |
| 60 if (key.ReadValue(name, value) != ERROR_SUCCESS) { | 59 if (key.ReadValue(name, value) != ERROR_SUCCESS) { |
| 61 RegKey hklm_key( | 60 RegKey hklm_key( |
| 62 HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_READ | KEY_WOW64_32KEY); | 61 HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_READ | KEY_WOW64_32KEY); |
| 63 return (hklm_key.ReadValue(name, value) == ERROR_SUCCESS); | 62 return (hklm_key.ReadValue(name, value) == ERROR_SUCCESS); |
| 64 } | 63 } |
| 65 return true; | 64 return true; |
| 66 } | 65 } |
| 67 | 66 |
| 68 // Updates a registry key |name| to be |value| for the given |app_reg_data|. | 67 // Updates a registry key |name| to be |value| for the given |app_reg_data|. |
| 69 // If this is a |system_install|, then update the value under HKLM (istead of | 68 // If this is a |system_install|, then update the value under HKLM (istead of |
| 70 // HKCU for user-installs) using a group of keys (one for each OS user) and also | 69 // HKCU for user-installs) using a group of keys (one for each OS user) and also |
| 71 // include the method to |aggregate| these values when reporting. | 70 // include the method to |aggregate| these values when reporting. |
| 72 bool WriteGoogleUpdateStrKeyInternal(const AppRegistrationData& app_reg_data, | 71 bool WriteGoogleUpdateStrKeyInternal(const AppRegistrationData& app_reg_data, |
| 73 bool system_install, | 72 bool system_install, |
| 74 const wchar_t* const name, | 73 const wchar_t* const name, |
| 75 // presubmit: allow wstring | 74 const base::string16& value, |
| 76 const std::wstring& value, | |
| 77 const wchar_t* const aggregate) { | 75 const wchar_t* const aggregate) { |
| 78 const REGSAM kAccess = KEY_SET_VALUE | KEY_WOW64_32KEY; | 76 const REGSAM kAccess = KEY_SET_VALUE | KEY_WOW64_32KEY; |
| 79 if (system_install) { | 77 if (system_install) { |
| 80 DCHECK(aggregate); | 78 DCHECK(aggregate); |
| 81 // Machine installs require each OS user to write a unique key under a | 79 // Machine installs require each OS user to write a unique key under a |
| 82 // named key in HKLM as well as an "aggregation" function that describes | 80 // named key in HKLM as well as an "aggregation" function that describes |
| 83 // how the values of multiple users are to be combined. | 81 // how the values of multiple users are to be combined. |
| 84 std::wstring uniquename; // presubmit: allow wstring | 82 base::string16 uniquename; |
| 85 if (!base::win::GetUserSidString(&uniquename)) { | 83 if (!base::win::GetUserSidString(&uniquename)) { |
| 86 NOTREACHED(); | 84 NOTREACHED(); |
| 87 return false; | 85 return false; |
| 88 } | 86 } |
| 89 | 87 |
| 90 base::string16 reg_path(app_reg_data.GetStateMediumKey()); | 88 base::string16 reg_path(app_reg_data.GetStateMediumKey()); |
| 91 reg_path.append(L"\\"); | 89 reg_path.append(L"\\"); |
| 92 reg_path.append(name); | 90 reg_path.append(name); |
| 93 RegKey key(HKEY_LOCAL_MACHINE, reg_path.c_str(), kAccess); | 91 RegKey key(HKEY_LOCAL_MACHINE, reg_path.c_str(), kAccess); |
| 94 key.WriteValue(google_update::kRegAggregateMethod, aggregate); | 92 key.WriteValue(google_update::kRegAggregateMethod, aggregate); |
| 95 return (key.WriteValue(uniquename.c_str(), value.c_str()) == ERROR_SUCCESS); | 93 return (key.WriteValue(uniquename.c_str(), value.c_str()) == ERROR_SUCCESS); |
| 96 } else { | 94 } else { |
| 97 // User installs are easy: just write the values to HKCU tree. | 95 // User installs are easy: just write the values to HKCU tree. |
| 98 RegKey key(HKEY_CURRENT_USER, app_reg_data.GetStateKey().c_str(), kAccess); | 96 RegKey key(HKEY_CURRENT_USER, app_reg_data.GetStateKey().c_str(), kAccess); |
| 99 return (key.WriteValue(name, value.c_str()) == ERROR_SUCCESS); | 97 return (key.WriteValue(name, value.c_str()) == ERROR_SUCCESS); |
| 100 } | 98 } |
| 101 } | 99 } |
| 102 | 100 |
| 103 bool WriteGoogleUpdateStrKey(const wchar_t* const name, | 101 bool WriteGoogleUpdateStrKey(const wchar_t* const name, |
| 104 const std::wstring& value) { | 102 const base::string16& value) { |
| 105 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 103 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 106 return WriteGoogleUpdateStrKeyInternal( | 104 return WriteGoogleUpdateStrKeyInternal( |
| 107 dist->GetAppRegistrationData(), false, name, value, NULL); | 105 dist->GetAppRegistrationData(), false, name, value, NULL); |
| 108 } | 106 } |
| 109 | 107 |
| 110 bool ClearGoogleUpdateStrKey(const wchar_t* const name) { | 108 bool ClearGoogleUpdateStrKey(const wchar_t* const name) { |
| 111 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 109 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 112 std::wstring reg_path = dist->GetStateKey(); | 110 base::string16 reg_path = dist->GetStateKey(); |
| 113 RegKey key(HKEY_CURRENT_USER, | 111 RegKey key(HKEY_CURRENT_USER, |
| 114 reg_path.c_str(), | 112 reg_path.c_str(), |
| 115 KEY_READ | KEY_WRITE | KEY_WOW64_32KEY); | 113 KEY_READ | KEY_WRITE | KEY_WOW64_32KEY); |
| 116 std::wstring value; | 114 base::string16 value; |
| 117 if (key.ReadValue(name, &value) != ERROR_SUCCESS) | 115 if (key.ReadValue(name, &value) != ERROR_SUCCESS) |
| 118 return false; | 116 return false; |
| 119 return (key.WriteValue(name, L"") == ERROR_SUCCESS); | 117 return (key.WriteValue(name, L"") == ERROR_SUCCESS); |
| 120 } | 118 } |
| 121 | 119 |
| 122 bool RemoveGoogleUpdateStrKey(const wchar_t* const name) { | 120 bool RemoveGoogleUpdateStrKey(const wchar_t* const name) { |
| 123 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 121 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 124 std::wstring reg_path = dist->GetStateKey(); | 122 base::string16 reg_path = dist->GetStateKey(); |
| 125 RegKey key(HKEY_CURRENT_USER, | 123 RegKey key(HKEY_CURRENT_USER, |
| 126 reg_path.c_str(), | 124 reg_path.c_str(), |
| 127 KEY_READ | KEY_WRITE | KEY_WOW64_32KEY); | 125 KEY_READ | KEY_WRITE | KEY_WOW64_32KEY); |
| 128 if (!key.HasValue(name)) | 126 if (!key.HasValue(name)) |
| 129 return true; | 127 return true; |
| 130 return (key.DeleteValue(name) == ERROR_SUCCESS); | 128 return (key.DeleteValue(name) == ERROR_SUCCESS); |
| 131 } | 129 } |
| 132 | 130 |
| 133 bool GetChromeChannelInternal(bool system_install, | 131 bool GetChromeChannelInternal(bool system_install, |
| 134 bool add_multi_modifier, | 132 bool add_multi_modifier, |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 274 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 272 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 275 | 273 |
| 276 // Consent applies to all products in a multi-install package. | 274 // Consent applies to all products in a multi-install package. |
| 277 if (InstallUtil::IsMultiInstall(dist, system_install)) { | 275 if (InstallUtil::IsMultiInstall(dist, system_install)) { |
| 278 dist = BrowserDistribution::GetSpecificDistribution( | 276 dist = BrowserDistribution::GetSpecificDistribution( |
| 279 BrowserDistribution::CHROME_BINARIES); | 277 BrowserDistribution::CHROME_BINARIES); |
| 280 } | 278 } |
| 281 | 279 |
| 282 // Write to ClientStateMedium for system-level; ClientState otherwise. | 280 // Write to ClientStateMedium for system-level; ClientState otherwise. |
| 283 HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 281 HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| 284 std::wstring reg_path = | 282 base::string16 reg_path = |
| 285 system_install ? dist->GetStateMediumKey() : dist->GetStateKey(); | 283 system_install ? dist->GetStateMediumKey() : dist->GetStateKey(); |
| 286 RegKey key; | 284 RegKey key; |
| 287 LONG result = key.Create( | 285 LONG result = key.Create( |
| 288 root_key, reg_path.c_str(), KEY_SET_VALUE | KEY_WOW64_32KEY); | 286 root_key, reg_path.c_str(), KEY_SET_VALUE | KEY_WOW64_32KEY); |
| 289 if (result != ERROR_SUCCESS) { | 287 if (result != ERROR_SUCCESS) { |
| 290 LOG(ERROR) << "Failed opening key " << reg_path << " to set " | 288 LOG(ERROR) << "Failed opening key " << reg_path << " to set " |
| 291 << google_update::kRegUsageStatsField << "; result: " << result; | 289 << google_update::kRegUsageStatsField << "; result: " << result; |
| 292 } else { | 290 } else { |
| 293 result = key.WriteValue(google_update::kRegUsageStatsField, value); | 291 result = key.WriteValue(google_update::kRegUsageStatsField, value); |
| 294 LOG_IF(ERROR, result != ERROR_SUCCESS) << "Failed setting " | 292 LOG_IF(ERROR, result != ERROR_SUCCESS) << "Failed setting " |
| 295 << google_update::kRegUsageStatsField << " in key " << reg_path | 293 << google_update::kRegUsageStatsField << " in key " << reg_path |
| 296 << "; result: " << result; | 294 << "; result: " << result; |
| 297 } | 295 } |
| 298 return (result == ERROR_SUCCESS); | 296 return (result == ERROR_SUCCESS); |
| 299 } | 297 } |
| 300 | 298 |
| 301 bool GoogleUpdateSettings::GetMetricsId(std::string* metrics_id) { | 299 bool GoogleUpdateSettings::GetMetricsId(std::string* metrics_id) { |
| 302 std::wstring metrics_id_w; | 300 base::string16 metrics_id_w; |
|
grt (UTC plus 2)
2014/07/07 22:48:39
_w -> 16
huangs
2014/07/08 00:02:19
Done.
| |
| 303 bool rv = ReadGoogleUpdateStrKey(google_update::kRegMetricsId, &metrics_id_w); | 301 bool rv = ReadGoogleUpdateStrKey(google_update::kRegMetricsId, &metrics_id_w); |
| 304 *metrics_id = base::WideToUTF8(metrics_id_w); | 302 *metrics_id = base::WideToUTF8(metrics_id_w); |
| 305 return rv; | 303 return rv; |
| 306 } | 304 } |
| 307 | 305 |
| 308 bool GoogleUpdateSettings::SetMetricsId(const std::string& metrics_id) { | 306 bool GoogleUpdateSettings::SetMetricsId(const std::string& metrics_id) { |
| 309 std::wstring metrics_id_w = base::UTF8ToWide(metrics_id); | 307 base::string16 metrics_id_w = base::UTF8ToWide(metrics_id); |
|
gab
2014/07/07 21:41:14
Please also update all UT8ToWide and WideToUTF8 ma
huangs
2014/07/08 00:02:19
Ah good catch. Done!
|
grt (UTC plus 2)
2014/07/07 22:48:39
_w -> 16
huangs
2014/07/08 00:02:19
Done.
|
| 310 return WriteGoogleUpdateStrKey(google_update::kRegMetricsId, metrics_id_w); | 308 return WriteGoogleUpdateStrKey(google_update::kRegMetricsId, metrics_id_w); |
| 311 } | 309 } |
| 312 | 310 |
| 313 // EULA consent is only relevant for system-level installs. | 311 // EULA consent is only relevant for system-level installs. |
| 314 bool GoogleUpdateSettings::SetEULAConsent( | 312 bool GoogleUpdateSettings::SetEULAConsent( |
| 315 const InstallationState& machine_state, | 313 const InstallationState& machine_state, |
| 316 BrowserDistribution* dist, | 314 BrowserDistribution* dist, |
| 317 bool consented) { | 315 bool consented) { |
| 318 DCHECK(dist); | 316 DCHECK(dist); |
| 319 const DWORD eula_accepted = consented ? 1 : 0; | 317 const DWORD eula_accepted = consented ? 1 : 0; |
| 320 const REGSAM kAccess = KEY_SET_VALUE | KEY_WOW64_32KEY; | 318 const REGSAM kAccess = KEY_SET_VALUE | KEY_WOW64_32KEY; |
| 321 std::wstring reg_path = dist->GetStateMediumKey(); | 319 base::string16 reg_path = dist->GetStateMediumKey(); |
| 322 bool succeeded = true; | 320 bool succeeded = true; |
| 323 RegKey key; | 321 RegKey key; |
| 324 | 322 |
| 325 // Write the consent value into the product's ClientStateMedium key. | 323 // Write the consent value into the product's ClientStateMedium key. |
| 326 if (key.Create(HKEY_LOCAL_MACHINE, reg_path.c_str(), | 324 if (key.Create(HKEY_LOCAL_MACHINE, reg_path.c_str(), |
| 327 kAccess) != ERROR_SUCCESS || | 325 kAccess) != ERROR_SUCCESS || |
| 328 key.WriteValue(google_update::kRegEULAAceptedField, | 326 key.WriteValue(google_update::kRegEULAAceptedField, |
| 329 eula_accepted) != ERROR_SUCCESS) { | 327 eula_accepted) != ERROR_SUCCESS) { |
| 330 succeeded = false; | 328 succeeded = false; |
| 331 } | 329 } |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 344 key.WriteValue(google_update::kRegEULAAceptedField, | 342 key.WriteValue(google_update::kRegEULAAceptedField, |
| 345 eula_accepted) != ERROR_SUCCESS) { | 343 eula_accepted) != ERROR_SUCCESS) { |
| 346 succeeded = false; | 344 succeeded = false; |
| 347 } | 345 } |
| 348 } | 346 } |
| 349 | 347 |
| 350 return succeeded; | 348 return succeeded; |
| 351 } | 349 } |
| 352 | 350 |
| 353 int GoogleUpdateSettings::GetLastRunTime() { | 351 int GoogleUpdateSettings::GetLastRunTime() { |
| 354 std::wstring time_s; | 352 base::string16 time_s; |
| 355 if (!ReadGoogleUpdateStrKey(google_update::kRegLastRunTimeField, &time_s)) | 353 if (!ReadGoogleUpdateStrKey(google_update::kRegLastRunTimeField, &time_s)) |
| 356 return -1; | 354 return -1; |
| 357 int64 time_i; | 355 int64 time_i; |
| 358 if (!base::StringToInt64(time_s, &time_i)) | 356 if (!base::StringToInt64(time_s, &time_i)) |
| 359 return -1; | 357 return -1; |
| 360 base::TimeDelta td = | 358 base::TimeDelta td = |
| 361 base::Time::NowFromSystemTime() - base::Time::FromInternalValue(time_i); | 359 base::Time::NowFromSystemTime() - base::Time::FromInternalValue(time_i); |
| 362 return td.InDays(); | 360 return td.InDays(); |
| 363 } | 361 } |
| 364 | 362 |
| 365 bool GoogleUpdateSettings::SetLastRunTime() { | 363 bool GoogleUpdateSettings::SetLastRunTime() { |
| 366 int64 time = base::Time::NowFromSystemTime().ToInternalValue(); | 364 int64 time = base::Time::NowFromSystemTime().ToInternalValue(); |
| 367 return WriteGoogleUpdateStrKey(google_update::kRegLastRunTimeField, | 365 return WriteGoogleUpdateStrKey(google_update::kRegLastRunTimeField, |
| 368 base::Int64ToString16(time)); | 366 base::Int64ToString16(time)); |
| 369 } | 367 } |
| 370 | 368 |
| 371 bool GoogleUpdateSettings::RemoveLastRunTime() { | 369 bool GoogleUpdateSettings::RemoveLastRunTime() { |
| 372 return RemoveGoogleUpdateStrKey(google_update::kRegLastRunTimeField); | 370 return RemoveGoogleUpdateStrKey(google_update::kRegLastRunTimeField); |
| 373 } | 371 } |
| 374 | 372 |
| 375 bool GoogleUpdateSettings::GetBrowser(std::wstring* browser) { | 373 bool GoogleUpdateSettings::GetBrowser(base::string16* browser) { |
| 376 return ReadGoogleUpdateStrKey(google_update::kRegBrowserField, browser); | 374 return ReadGoogleUpdateStrKey(google_update::kRegBrowserField, browser); |
| 377 } | 375 } |
| 378 | 376 |
| 379 bool GoogleUpdateSettings::GetLanguage(std::wstring* language) { | 377 bool GoogleUpdateSettings::GetLanguage(base::string16* language) { |
| 380 return ReadGoogleUpdateStrKey(google_update::kRegLangField, language); | 378 return ReadGoogleUpdateStrKey(google_update::kRegLangField, language); |
| 381 } | 379 } |
| 382 | 380 |
| 383 bool GoogleUpdateSettings::GetBrand(std::wstring* brand) { | 381 bool GoogleUpdateSettings::GetBrand(base::string16* brand) { |
| 384 return ReadGoogleUpdateStrKey(google_update::kRegRLZBrandField, brand); | 382 return ReadGoogleUpdateStrKey(google_update::kRegRLZBrandField, brand); |
| 385 } | 383 } |
| 386 | 384 |
| 387 bool GoogleUpdateSettings::GetReactivationBrand(std::wstring* brand) { | 385 bool GoogleUpdateSettings::GetReactivationBrand(base::string16* brand) { |
| 388 return ReadGoogleUpdateStrKey(google_update::kRegRLZReactivationBrandField, | 386 return ReadGoogleUpdateStrKey(google_update::kRegRLZReactivationBrandField, |
| 389 brand); | 387 brand); |
| 390 } | 388 } |
| 391 | 389 |
| 392 bool GoogleUpdateSettings::GetClient(std::wstring* client) { | 390 bool GoogleUpdateSettings::GetClient(base::string16* client) { |
| 393 return ReadGoogleUpdateStrKey(google_update::kRegClientField, client); | 391 return ReadGoogleUpdateStrKey(google_update::kRegClientField, client); |
| 394 } | 392 } |
| 395 | 393 |
| 396 bool GoogleUpdateSettings::SetClient(const std::wstring& client) { | 394 bool GoogleUpdateSettings::SetClient(const base::string16& client) { |
| 397 return WriteGoogleUpdateStrKey(google_update::kRegClientField, client); | 395 return WriteGoogleUpdateStrKey(google_update::kRegClientField, client); |
| 398 } | 396 } |
| 399 | 397 |
| 400 bool GoogleUpdateSettings::GetReferral(std::wstring* referral) { | 398 bool GoogleUpdateSettings::GetReferral(base::string16* referral) { |
| 401 return ReadGoogleUpdateStrKey(google_update::kRegReferralField, referral); | 399 return ReadGoogleUpdateStrKey(google_update::kRegReferralField, referral); |
| 402 } | 400 } |
| 403 | 401 |
| 404 bool GoogleUpdateSettings::ClearReferral() { | 402 bool GoogleUpdateSettings::ClearReferral() { |
| 405 return ClearGoogleUpdateStrKey(google_update::kRegReferralField); | 403 return ClearGoogleUpdateStrKey(google_update::kRegReferralField); |
| 406 } | 404 } |
| 407 | 405 |
| 408 bool GoogleUpdateSettings::UpdateDidRunStateForApp( | 406 bool GoogleUpdateSettings::UpdateDidRunStateForApp( |
| 409 const AppRegistrationData& app_reg_data, | 407 const AppRegistrationData& app_reg_data, |
| 410 bool did_run) { | 408 bool did_run) { |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 432 } | 430 } |
| 433 | 431 |
| 434 bool GoogleUpdateSettings::GetChromeChannelAndModifiers( | 432 bool GoogleUpdateSettings::GetChromeChannelAndModifiers( |
| 435 bool system_install, | 433 bool system_install, |
| 436 base::string16* channel) { | 434 base::string16* channel) { |
| 437 return GetChromeChannelInternal(system_install, true, channel); | 435 return GetChromeChannelInternal(system_install, true, channel); |
| 438 } | 436 } |
| 439 | 437 |
| 440 void GoogleUpdateSettings::UpdateInstallStatus(bool system_install, | 438 void GoogleUpdateSettings::UpdateInstallStatus(bool system_install, |
| 441 installer::ArchiveType archive_type, int install_return_code, | 439 installer::ArchiveType archive_type, int install_return_code, |
| 442 const std::wstring& product_guid) { | 440 const base::string16& product_guid) { |
| 443 DCHECK(archive_type != installer::UNKNOWN_ARCHIVE_TYPE || | 441 DCHECK(archive_type != installer::UNKNOWN_ARCHIVE_TYPE || |
| 444 install_return_code != 0); | 442 install_return_code != 0); |
| 445 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 443 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| 446 | 444 |
| 447 RegKey key; | 445 RegKey key; |
| 448 installer::ChannelInfo channel_info; | 446 installer::ChannelInfo channel_info; |
| 449 std::wstring reg_key(google_update::kRegPathClientState); | 447 base::string16 reg_key(google_update::kRegPathClientState); |
| 450 reg_key.append(L"\\"); | 448 reg_key.append(L"\\"); |
| 451 reg_key.append(product_guid); | 449 reg_key.append(product_guid); |
| 452 LONG result = key.Open(reg_root, | 450 LONG result = key.Open(reg_root, |
| 453 reg_key.c_str(), | 451 reg_key.c_str(), |
| 454 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY); | 452 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY); |
| 455 if (result == ERROR_SUCCESS) | 453 if (result == ERROR_SUCCESS) |
| 456 channel_info.Initialize(key); | 454 channel_info.Initialize(key); |
| 457 else if (result != ERROR_FILE_NOT_FOUND) | 455 else if (result != ERROR_FILE_NOT_FOUND) |
| 458 LOG(ERROR) << "Failed to open " << reg_key << "; Error: " << result; | 456 LOG(ERROR) << "Failed to open " << reg_key << "; Error: " << result; |
| 459 | 457 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 530 L"sum()"); | 528 L"sum()"); |
| 531 WriteGoogleUpdateStrKeyInternal(dist->GetAppRegistrationData(), | 529 WriteGoogleUpdateStrKeyInternal(dist->GetAppRegistrationData(), |
| 532 system_install, | 530 system_install, |
| 533 google_update::kRegProfilesSignedIn, | 531 google_update::kRegProfilesSignedIn, |
| 534 base::Int64ToString16(profiles_signedin), | 532 base::Int64ToString16(profiles_signedin), |
| 535 L"sum()"); | 533 L"sum()"); |
| 536 } | 534 } |
| 537 | 535 |
| 538 int GoogleUpdateSettings::DuplicateGoogleUpdateSystemClientKey() { | 536 int GoogleUpdateSettings::DuplicateGoogleUpdateSystemClientKey() { |
| 539 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 537 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 540 std::wstring reg_path = dist->GetStateKey(); | 538 base::string16 reg_path = dist->GetStateKey(); |
| 541 | 539 |
| 542 // Minimum access needed is to be able to write to this key. | 540 // Minimum access needed is to be able to write to this key. |
| 543 RegKey reg_key( | 541 RegKey reg_key( |
| 544 HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_SET_VALUE | KEY_WOW64_32KEY); | 542 HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_SET_VALUE | KEY_WOW64_32KEY); |
| 545 if (!reg_key.Valid()) | 543 if (!reg_key.Valid()) |
| 546 return 0; | 544 return 0; |
| 547 | 545 |
| 548 HANDLE target_handle = 0; | 546 HANDLE target_handle = 0; |
| 549 if (!DuplicateHandle(GetCurrentProcess(), reg_key.Handle(), | 547 if (!DuplicateHandle(GetCurrentProcess(), reg_key.Handle(), |
| 550 GetCurrentProcess(), &target_handle, KEY_SET_VALUE, | 548 GetCurrentProcess(), &target_handle, KEY_SET_VALUE, |
| 551 TRUE, DUPLICATE_SAME_ACCESS)) { | 549 TRUE, DUPLICATE_SAME_ACCESS)) { |
| 552 return 0; | 550 return 0; |
| 553 } | 551 } |
| 554 return reinterpret_cast<int>(target_handle); | 552 return reinterpret_cast<int>(target_handle); |
| 555 } | 553 } |
| 556 | 554 |
| 557 bool GoogleUpdateSettings::WriteGoogleUpdateSystemClientKey( | 555 bool GoogleUpdateSettings::WriteGoogleUpdateSystemClientKey( |
| 558 int handle, const std::wstring& key, const std::wstring& value) { | 556 int handle, const base::string16& key, const base::string16& value) { |
| 559 HKEY reg_key = reinterpret_cast<HKEY>(reinterpret_cast<void*>(handle)); | 557 HKEY reg_key = reinterpret_cast<HKEY>(reinterpret_cast<void*>(handle)); |
| 560 DWORD size = static_cast<DWORD>(value.size()) * sizeof(wchar_t); | 558 DWORD size = static_cast<DWORD>(value.size()) * sizeof(wchar_t); |
| 561 LSTATUS status = RegSetValueEx(reg_key, key.c_str(), 0, REG_SZ, | 559 LSTATUS status = RegSetValueEx(reg_key, key.c_str(), 0, REG_SZ, |
| 562 reinterpret_cast<const BYTE*>(value.c_str()), size); | 560 reinterpret_cast<const BYTE*>(value.c_str()), size); |
| 563 return status == ERROR_SUCCESS; | 561 return status == ERROR_SUCCESS; |
| 564 } | 562 } |
| 565 | 563 |
| 566 GoogleUpdateSettings::UpdatePolicy GoogleUpdateSettings::GetAppUpdatePolicy( | 564 GoogleUpdateSettings::UpdatePolicy GoogleUpdateSettings::GetAppUpdatePolicy( |
| 567 const std::wstring& app_guid, | 565 const base::string16& app_guid, |
| 568 bool* is_overridden) { | 566 bool* is_overridden) { |
| 569 bool found_override = false; | 567 bool found_override = false; |
| 570 UpdatePolicy update_policy = kDefaultUpdatePolicy; | 568 UpdatePolicy update_policy = kDefaultUpdatePolicy; |
| 571 | 569 |
| 572 #if defined(GOOGLE_CHROME_BUILD) | 570 #if defined(GOOGLE_CHROME_BUILD) |
| 573 DCHECK(!app_guid.empty()); | 571 DCHECK(!app_guid.empty()); |
| 574 RegKey policy_key; | 572 RegKey policy_key; |
| 575 | 573 |
| 576 // Google Update Group Policy settings are always in HKLM. | 574 // Google Update Group Policy settings are always in HKLM. |
| 577 // TODO(wfh): Check if policies should go into Wow6432Node or not. | 575 // TODO(wfh): Check if policies should go into Wow6432Node or not. |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 886 } | 884 } |
| 887 | 885 |
| 888 // If the key or value was not present, return the empty string. | 886 // If the key or value was not present, return the empty string. |
| 889 if (result == ERROR_FILE_NOT_FOUND || result == ERROR_PATH_NOT_FOUND) { | 887 if (result == ERROR_FILE_NOT_FOUND || result == ERROR_PATH_NOT_FOUND) { |
| 890 experiment_labels->clear(); | 888 experiment_labels->clear(); |
| 891 return true; | 889 return true; |
| 892 } | 890 } |
| 893 | 891 |
| 894 return result == ERROR_SUCCESS; | 892 return result == ERROR_SUCCESS; |
| 895 } | 893 } |
| OLD | NEW |