Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1345)

Side by Side Diff: chrome/install_static/install_util.cc

Issue 2345913003: [chrome_elf] NTRegistry - added wow64 redirection support. (Closed)
Patch Set: Final nits. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/install_static/BUILD.gn ('k') | chrome_elf/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/install_util.h" 5 #include "chrome/install_static/install_util.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <assert.h> 8 #include <assert.h>
9 #include <algorithm> 9 #include <algorithm>
10 #include <iostream> 10 #include <iostream>
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 app_guid = IsMultiInstall(system_install) ? kAppGuidGoogleBinaries 263 app_guid = IsMultiInstall(system_install) ? kAppGuidGoogleBinaries
264 : kAppGuidGoogleChrome; 264 : kAppGuidGoogleChrome;
265 } 265 }
266 266
267 DWORD out_value = 0; 267 DWORD out_value = 0;
268 268
269 // If system_install, first try kRegPathClientStateMedium. 269 // If system_install, first try kRegPathClientStateMedium.
270 std::wstring full_key_path(kRegPathClientStateMedium); 270 std::wstring full_key_path(kRegPathClientStateMedium);
271 full_key_path.append(1, L'\\'); 271 full_key_path.append(1, L'\\');
272 full_key_path.append(app_guid); 272 full_key_path.append(app_guid);
273 if (system_install && nt::QueryRegValueDWORD(nt::HKLM, full_key_path.c_str(), 273 if (system_install &&
274 kRegValueUsageStats, &out_value)) 274 nt::QueryRegValueDWORD(nt::HKLM, nt::WOW6432, full_key_path.c_str(),
275 kRegValueUsageStats, &out_value))
275 return (out_value == 1); 276 return (out_value == 1);
276 277
277 // Second, try kRegPathClientState. 278 // Second, try kRegPathClientState.
278 full_key_path = kRegPathClientState; 279 full_key_path = kRegPathClientState;
279 full_key_path.append(1, L'\\'); 280 full_key_path.append(1, L'\\');
280 full_key_path.append(app_guid); 281 full_key_path.append(app_guid);
281 return (nt::QueryRegValueDWORD((system_install ? nt::HKLM : nt::HKCU), 282 return (nt::QueryRegValueDWORD((system_install ? nt::HKLM : nt::HKCU),
282 full_key_path.c_str(), kRegValueUsageStats, 283 nt::WOW6432, full_key_path.c_str(),
283 &out_value) && 284 kRegValueUsageStats, &out_value) &&
284 out_value == 1); 285 out_value == 1);
285 } 286 }
286 287
287 // Returns true if the |source| string matches the |pattern|. The pattern 288 // Returns true if the |source| string matches the |pattern|. The pattern
288 // may contain wildcards like '?' which matches one character or a '*' 289 // may contain wildcards like '?' which matches one character or a '*'
289 // which matches 0 or more characters. 290 // which matches 0 or more characters.
290 // Please note that pattern matches the whole string. If you want to find 291 // Please note that pattern matches the whole string. If you want to find
291 // something in the middle of the string then you need to specify the pattern 292 // something in the middle of the string then you need to specify the pattern
292 // as '*xyz*'. 293 // as '*xyz*'.
293 // |source_index| is the index of the current character being matched in 294 // |source_index| is the index of the current character being matched in
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 return false; 404 return false;
404 } 405 }
405 406
406 bool IsMultiInstall(bool is_system_install) { 407 bool IsMultiInstall(bool is_system_install) {
407 std::wstring args; 408 std::wstring args;
408 409
409 std::wstring full_key_path(kRegPathClientState); 410 std::wstring full_key_path(kRegPathClientState);
410 full_key_path.append(1, L'\\'); 411 full_key_path.append(1, L'\\');
411 full_key_path.append(kAppGuidGoogleChrome); 412 full_key_path.append(kAppGuidGoogleChrome);
412 if (!nt::QueryRegValueSZ((is_system_install ? nt::HKLM : nt::HKCU), 413 if (!nt::QueryRegValueSZ((is_system_install ? nt::HKLM : nt::HKCU),
413 full_key_path.c_str(), kUninstallArgumentsField, 414 nt::WOW6432, full_key_path.c_str(),
414 &args)) 415 kUninstallArgumentsField, &args))
415 return false; 416 return false;
416 417
417 return (args.find(L"--multi-install") != std::wstring::npos); 418 return (args.find(L"--multi-install") != std::wstring::npos);
418 } 419 }
419 420
420 bool GetCollectStatsConsent() { 421 bool GetCollectStatsConsent() {
421 return GetCollectStatsConsentImpl(GetCurrentProcessExePath()); 422 return GetCollectStatsConsentImpl(GetCurrentProcessExePath());
422 } 423 }
423 424
424 bool GetCollectStatsConsentForTesting(const std::wstring& exe_path) { 425 bool GetCollectStatsConsentForTesting(const std::wstring& exe_path) {
425 return GetCollectStatsConsentImpl(exe_path); 426 return GetCollectStatsConsentImpl(exe_path);
426 } 427 }
427 428
428 bool GetCollectStatsInSample() { 429 bool GetCollectStatsInSample() {
429 std::wstring registry_path = GetChromeInstallRegistryPath(); 430 std::wstring registry_path = GetChromeInstallRegistryPath();
430 431
431 DWORD out_value = 0; 432 DWORD out_value = 0;
432 if (!nt::QueryRegValueDWORD(nt::HKCU, registry_path.c_str(), 433 if (!nt::QueryRegValueDWORD(nt::HKCU, nt::WOW6432, registry_path.c_str(),
433 kRegValueChromeStatsSample, &out_value)) { 434 kRegValueChromeStatsSample, &out_value)) {
434 // If reading the value failed, treat it as though sampling isn't in effect, 435 // If reading the value failed, treat it as though sampling isn't in effect,
435 // implicitly meaning this install is in the sample. 436 // implicitly meaning this install is in the sample.
436 return true; 437 return true;
437 } 438 }
438 return out_value == 1; 439 return out_value == 1;
439 } 440 }
440 441
441 bool SetCollectStatsInSample(bool in_sample) { 442 bool SetCollectStatsInSample(bool in_sample) {
442 std::wstring registry_path = GetChromeInstallRegistryPath(); 443 std::wstring registry_path = GetChromeInstallRegistryPath();
443 444
444 HANDLE key_handle = INVALID_HANDLE_VALUE; 445 HANDLE key_handle = INVALID_HANDLE_VALUE;
445 if (!nt::CreateRegKey(nt::HKCU, registry_path.c_str(), KEY_SET_VALUE, 446 if (!nt::CreateRegKey(nt::HKCU, registry_path.c_str(),
446 &key_handle)) { 447 KEY_SET_VALUE | KEY_WOW64_32KEY, &key_handle)) {
447 nt::CloseRegKey(key_handle); 448 nt::CloseRegKey(key_handle);
448 return false; 449 return false;
449 } 450 }
450 451
451 return nt::SetRegValueDWORD(key_handle, kRegValueChromeStatsSample, 452 return nt::SetRegValueDWORD(key_handle, kRegValueChromeStatsSample,
452 in_sample ? 1 : 0); 453 in_sample ? 1 : 0);
453 } 454 }
454 455
455 bool ReportingIsEnforcedByPolicy(bool* crash_reporting_enabled) { 456 bool ReportingIsEnforcedByPolicy(bool* crash_reporting_enabled) {
456 DWORD value = 0; 457 DWORD value = 0;
457 458
458 // First, try HKLM. 459 // First, try HKLM.
459 if (nt::QueryRegValueDWORD(nt::HKLM, kRegPathChromePolicy, 460 if (nt::QueryRegValueDWORD(nt::HKLM, nt::NONE, kRegPathChromePolicy,
460 kMetricsReportingEnabled, &value)) { 461 kMetricsReportingEnabled, &value)) {
461 *crash_reporting_enabled = (value != 0); 462 *crash_reporting_enabled = (value != 0);
462 return true; 463 return true;
463 } 464 }
464 465
465 // Second, try HKCU. 466 // Second, try HKCU.
466 if (nt::QueryRegValueDWORD(nt::HKCU, kRegPathChromePolicy, 467 if (nt::QueryRegValueDWORD(nt::HKCU, nt::NONE, kRegPathChromePolicy,
467 kMetricsReportingEnabled, &value)) { 468 kMetricsReportingEnabled, &value)) {
468 *crash_reporting_enabled = (value != 0); 469 *crash_reporting_enabled = (value != 0);
469 return true; 470 return true;
470 } 471 }
471 472
472 return false; 473 return false;
473 } 474 }
474 475
475 void InitializeProcessType() { 476 void InitializeProcessType() {
476 assert(g_process_type == ProcessType::UNINITIALIZED); 477 assert(g_process_type == ProcessType::UNINITIALIZED);
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 // but that the "ap" value therein cannot be read due to some reason *other* 637 // but that the "ap" value therein cannot be read due to some reason *other*
637 // than it not being present. This should be exceedingly rare. For 638 // than it not being present. This should be exceedingly rare. For
638 // simplicity's sake, use an empty |value| in case of any error whatsoever 639 // simplicity's sake, use an empty |value| in case of any error whatsoever
639 // here. 640 // here.
640 std::wstring value; 641 std::wstring value;
641 bool is_multi_install = IsMultiInstall(!is_per_user_install); 642 bool is_multi_install = IsMultiInstall(!is_per_user_install);
642 if (is_multi_install) { 643 if (is_multi_install) {
643 std::wstring full_key_path(kRegPathClientState); 644 std::wstring full_key_path(kRegPathClientState);
644 full_key_path.append(1, L'\\'); 645 full_key_path.append(1, L'\\');
645 full_key_path.append(kAppGuidGoogleBinaries); 646 full_key_path.append(kAppGuidGoogleBinaries);
646 nt::QueryRegValueSZ(is_per_user_install ? nt::HKCU : nt::HKLM, 647 nt::QueryRegValueSZ(is_per_user_install ? nt::HKCU : nt::HKLM, nt::WOW6432,
647 full_key_path.c_str(), kRegApField, &value); 648 full_key_path.c_str(), kRegApField, &value);
648 } else { 649 } else {
649 std::wstring full_key_path(kRegPathClientState); 650 std::wstring full_key_path(kRegPathClientState);
650 full_key_path.append(1, L'\\'); 651 full_key_path.append(1, L'\\');
651 full_key_path.append(kAppGuidGoogleChrome); 652 full_key_path.append(kAppGuidGoogleChrome);
652 nt::QueryRegValueSZ(is_per_user_install ? nt::HKCU : nt::HKLM, 653 nt::QueryRegValueSZ(is_per_user_install ? nt::HKCU : nt::HKLM, nt::WOW6432,
653 full_key_path.c_str(), kRegApField, &value); 654 full_key_path.c_str(), kRegApField, &value);
654 } 655 }
655 656
656 static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*"; 657 static constexpr wchar_t kChromeChannelBetaPattern[] = L"1?1-*";
657 static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*"; 658 static constexpr wchar_t kChromeChannelBetaX64Pattern[] = L"*x64-beta*";
658 static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*"; 659 static constexpr wchar_t kChromeChannelDevPattern[] = L"2?0-d*";
659 static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*"; 660 static constexpr wchar_t kChromeChannelDevX64Pattern[] = L"*x64-dev*";
660 661
661 std::transform(value.begin(), value.end(), value.begin(), ::tolower); 662 std::transform(value.begin(), value.end(), value.begin(), ::tolower);
662 663
(...skipping 25 matching lines...) Expand all
688 channel_name->push_back(L'-'); 689 channel_name->push_back(L'-');
689 channel_name->push_back(L'm'); 690 channel_name->push_back(L'm');
690 } 691 }
691 } 692 }
692 693
693 std::string GetGoogleUpdateVersion() { 694 std::string GetGoogleUpdateVersion() {
694 // TODO(ananta) 695 // TODO(ananta)
695 // Consider whether Chromium should connect to Google update to manage 696 // Consider whether Chromium should connect to Google update to manage
696 // updates. Should this be returning an empty string for Chromium builds?. 697 // updates. Should this be returning an empty string for Chromium builds?.
697 std::wstring update_version; 698 std::wstring update_version;
698 if (nt::QueryRegValueSZ(nt::AUTO, kRegPathGoogleUpdate, 699 if (nt::QueryRegValueSZ(nt::AUTO, nt::WOW6432, kRegPathGoogleUpdate,
699 kRegGoogleUpdateVersion, &update_version)) 700 kRegGoogleUpdateVersion, &update_version))
700 return UTF16ToUTF8(update_version); 701 return UTF16ToUTF8(update_version);
701 702
702 return std::string(); 703 return std::string();
703 } 704 }
704 705
705 std::wstring GetChromeInstallSubDirectory() { 706 std::wstring GetChromeInstallSubDirectory() {
706 #if defined(GOOGLE_CHROME_BUILD) 707 #if defined(GOOGLE_CHROME_BUILD)
707 std::wstring result = kGoogleChromeInstallSubDir1; 708 std::wstring result = kGoogleChromeInstallSubDir1;
708 result += L"\\"; 709 result += L"\\";
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 switch_value_end_offset = command_line_copy.length(); 887 switch_value_end_offset = command_line_copy.length();
887 888
888 std::string switch_value = command_line_copy.substr( 889 std::string switch_value = command_line_copy.substr(
889 switch_value_start_offset, 890 switch_value_start_offset,
890 switch_value_end_offset - (switch_offset + switch_token.length())); 891 switch_value_end_offset - (switch_offset + switch_token.length()));
891 TrimT<std::string>(&switch_value); 892 TrimT<std::string>(&switch_value);
892 return switch_value; 893 return switch_value;
893 } 894 }
894 895
895 } // namespace install_static 896 } // namespace install_static
OLDNEW
« no previous file with comments | « chrome/install_static/BUILD.gn ('k') | chrome_elf/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698