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

Side by Side Diff: chrome/installer/util/google_update_settings.cc

Issue 300593002: Make omaha, gcapi and uninstall registry accesses use Wow6432Node on 64-bit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move the uninstall registry access to 32-bit Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
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> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 GoogleUpdateSettings::AUTOMATIC_UPDATES; 48 GoogleUpdateSettings::AUTOMATIC_UPDATES;
49 #else 49 #else
50 GoogleUpdateSettings::UPDATES_DISABLED; 50 GoogleUpdateSettings::UPDATES_DISABLED;
51 #endif 51 #endif
52 52
53 namespace { 53 namespace {
54 54
55 bool ReadGoogleUpdateStrKey(const wchar_t* const name, std::wstring* value) { 55 bool ReadGoogleUpdateStrKey(const wchar_t* const name, std::wstring* value) {
56 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 56 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
57 std::wstring reg_path = dist->GetStateKey(); 57 std::wstring reg_path = dist->GetStateKey();
58 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_READ); 58 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_READ | KEY_WOW64_32KEY);
59 if (key.ReadValue(name, value) != ERROR_SUCCESS) { 59 if (key.ReadValue(name, value) != ERROR_SUCCESS) {
60 RegKey hklm_key(HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_READ); 60 RegKey hklm_key(HKEY_LOCAL_MACHINE, reg_path.c_str(),
61 KEY_READ | KEY_WOW64_32KEY);
61 return (hklm_key.ReadValue(name, value) == ERROR_SUCCESS); 62 return (hklm_key.ReadValue(name, value) == ERROR_SUCCESS);
62 } 63 }
63 return true; 64 return true;
64 } 65 }
65 66
66 // Update a state registry key |name| to be |value| for the given browser 67 // Update a state registry key |name| to be |value| for the given browser
67 // |dist|. If this is a |system_install|, then update the value under 68 // |dist|. If this is a |system_install|, then update the value under
68 // HKLM (istead of HKCU for user-installs) using a group of keys (one 69 // HKLM (istead of HKCU for user-installs) using a group of keys (one
69 // for each OS user) and also include the method to |aggregate| these 70 // for each OS user) and also include the method to |aggregate| these
70 // values when reporting. 71 // values when reporting.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 BrowserDistribution::GetSpecificDistribution( 120 BrowserDistribution::GetSpecificDistribution(
120 BrowserDistribution::CHROME_BINARIES); 121 BrowserDistribution::CHROME_BINARIES);
121 return 122 return
122 WriteGoogleUpdateStrKeyInternal(multi_dist, false, name, value, NULL) && 123 WriteGoogleUpdateStrKeyInternal(multi_dist, false, name, value, NULL) &&
123 result; 124 result;
124 } 125 }
125 126
126 bool ClearGoogleUpdateStrKey(const wchar_t* const name) { 127 bool ClearGoogleUpdateStrKey(const wchar_t* const name) {
127 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 128 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
128 std::wstring reg_path = dist->GetStateKey(); 129 std::wstring reg_path = dist->GetStateKey();
129 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_READ | KEY_WRITE); 130 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(),
131 KEY_READ | KEY_WRITE | KEY_WOW64_32KEY);
130 std::wstring value; 132 std::wstring value;
131 if (key.ReadValue(name, &value) != ERROR_SUCCESS) 133 if (key.ReadValue(name, &value) != ERROR_SUCCESS)
132 return false; 134 return false;
133 return (key.WriteValue(name, L"") == ERROR_SUCCESS); 135 return (key.WriteValue(name, L"") == ERROR_SUCCESS);
134 } 136 }
135 137
136 bool RemoveGoogleUpdateStrKey(const wchar_t* const name) { 138 bool RemoveGoogleUpdateStrKey(const wchar_t* const name) {
137 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 139 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
138 std::wstring reg_path = dist->GetStateKey(); 140 std::wstring reg_path = dist->GetStateKey();
139 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_READ | KEY_WRITE); 141 RegKey key(HKEY_CURRENT_USER, reg_path.c_str(),
142 KEY_READ | KEY_WRITE | KEY_WOW64_32KEY);
140 if (!key.HasValue(name)) 143 if (!key.HasValue(name))
141 return true; 144 return true;
142 return (key.DeleteValue(name) == ERROR_SUCCESS); 145 return (key.DeleteValue(name) == ERROR_SUCCESS);
143 } 146 }
144 147
145 bool GetChromeChannelInternal(bool system_install, 148 bool GetChromeChannelInternal(bool system_install,
146 bool add_multi_modifier, 149 bool add_multi_modifier,
147 base::string16* channel) { 150 base::string16* channel) {
148 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 151 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
149 if (dist->GetChromeChannel(channel)) { 152 if (dist->GetChromeChannel(channel)) {
150 return true; 153 return true;
151 } 154 }
152 155
153 HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 156 HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
154 base::string16 reg_path = dist->GetStateKey(); 157 base::string16 reg_path = dist->GetStateKey();
155 RegKey key(root_key, reg_path.c_str(), KEY_READ); 158 RegKey key(root_key, reg_path.c_str(), KEY_READ | KEY_WOW64_32KEY);
156 159
157 installer::ChannelInfo channel_info; 160 installer::ChannelInfo channel_info;
158 if (!channel_info.Initialize(key)) { 161 if (!channel_info.Initialize(key)) {
159 channel->assign(installer::kChromeChannelUnknown); 162 channel->assign(installer::kChromeChannelUnknown);
160 return false; 163 return false;
161 } 164 }
162 165
163 if (!channel_info.GetChannelName(channel)) { 166 if (!channel_info.GetChannelName(channel)) {
164 channel->assign(installer::kChromeChannelUnknown); 167 channel->assign(installer::kChromeChannelUnknown);
165 } 168 }
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 DCHECK(archive_type != installer::UNKNOWN_ARCHIVE_TYPE || 430 DCHECK(archive_type != installer::UNKNOWN_ARCHIVE_TYPE ||
428 install_return_code != 0); 431 install_return_code != 0);
429 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 432 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
430 433
431 RegKey key; 434 RegKey key;
432 installer::ChannelInfo channel_info; 435 installer::ChannelInfo channel_info;
433 std::wstring reg_key(google_update::kRegPathClientState); 436 std::wstring reg_key(google_update::kRegPathClientState);
434 reg_key.append(L"\\"); 437 reg_key.append(L"\\");
435 reg_key.append(product_guid); 438 reg_key.append(product_guid);
436 LONG result = key.Open(reg_root, reg_key.c_str(), 439 LONG result = key.Open(reg_root, reg_key.c_str(),
437 KEY_QUERY_VALUE | KEY_SET_VALUE); 440 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY);
438 if (result == ERROR_SUCCESS) 441 if (result == ERROR_SUCCESS)
439 channel_info.Initialize(key); 442 channel_info.Initialize(key);
440 else if (result != ERROR_FILE_NOT_FOUND) 443 else if (result != ERROR_FILE_NOT_FOUND)
441 LOG(ERROR) << "Failed to open " << reg_key << "; Error: " << result; 444 LOG(ERROR) << "Failed to open " << reg_key << "; Error: " << result;
442 445
443 if (UpdateGoogleUpdateApKey(archive_type, install_return_code, 446 if (UpdateGoogleUpdateApKey(archive_type, install_return_code,
444 &channel_info)) { 447 &channel_info)) {
445 // We have a modified channel_info value to write. 448 // We have a modified channel_info value to write.
446 // Create the app's ClientState key if it doesn't already exist. 449 // Create the app's ClientState key if it doesn't already exist.
447 if (!key.Valid()) { 450 if (!key.Valid()) {
448 result = key.Open(reg_root, google_update::kRegPathClientState, 451 result = key.Open(reg_root, google_update::kRegPathClientState,
449 KEY_CREATE_SUB_KEY); 452 KEY_CREATE_SUB_KEY | KEY_WOW64_32KEY);
450 if (result == ERROR_SUCCESS) 453 if (result == ERROR_SUCCESS)
451 result = key.CreateKey(product_guid.c_str(), KEY_SET_VALUE); 454 result = key.CreateKey(product_guid.c_str(),
455 KEY_SET_VALUE | KEY_WOW64_32KEY);
452 456
453 if (result != ERROR_SUCCESS) { 457 if (result != ERROR_SUCCESS) {
454 LOG(ERROR) << "Failed to create " << reg_key << "; Error: " << result; 458 LOG(ERROR) << "Failed to create " << reg_key << "; Error: " << result;
455 return; 459 return;
456 } 460 }
457 } 461 }
458 if (!channel_info.Write(&key)) { 462 if (!channel_info.Write(&key)) {
459 LOG(ERROR) << "Failed to write to application's ClientState key " 463 LOG(ERROR) << "Failed to write to application's ClientState key "
460 << google_update::kRegApField << " = " << channel_info.value(); 464 << google_update::kRegApField << " = " << channel_info.value();
461 } 465 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 google_update::kRegProfilesSignedIn, 516 google_update::kRegProfilesSignedIn,
513 base::Int64ToString16(profiles_signedin), 517 base::Int64ToString16(profiles_signedin),
514 L"sum()"); 518 L"sum()");
515 } 519 }
516 520
517 int GoogleUpdateSettings::DuplicateGoogleUpdateSystemClientKey() { 521 int GoogleUpdateSettings::DuplicateGoogleUpdateSystemClientKey() {
518 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 522 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
519 std::wstring reg_path = dist->GetStateKey(); 523 std::wstring reg_path = dist->GetStateKey();
520 524
521 // Minimum access needed is to be able to write to this key. 525 // Minimum access needed is to be able to write to this key.
522 RegKey reg_key(HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_SET_VALUE); 526 RegKey reg_key(HKEY_LOCAL_MACHINE, reg_path.c_str(),
527 KEY_SET_VALUE | KEY_WOW64_32KEY);
523 if (!reg_key.Valid()) 528 if (!reg_key.Valid())
524 return 0; 529 return 0;
525 530
526 HANDLE target_handle = 0; 531 HANDLE target_handle = 0;
527 if (!DuplicateHandle(GetCurrentProcess(), reg_key.Handle(), 532 if (!DuplicateHandle(GetCurrentProcess(), reg_key.Handle(),
528 GetCurrentProcess(), &target_handle, KEY_SET_VALUE, 533 GetCurrentProcess(), &target_handle, KEY_SET_VALUE,
529 TRUE, DUPLICATE_SAME_ACCESS)) { 534 TRUE, DUPLICATE_SAME_ACCESS)) {
530 return 0; 535 return 0;
531 } 536 }
532 return reinterpret_cast<int>(target_handle); 537 return reinterpret_cast<int>(target_handle);
(...skipping 12 matching lines...) Expand all
545 const std::wstring& app_guid, 550 const std::wstring& app_guid,
546 bool* is_overridden) { 551 bool* is_overridden) {
547 bool found_override = false; 552 bool found_override = false;
548 UpdatePolicy update_policy = kDefaultUpdatePolicy; 553 UpdatePolicy update_policy = kDefaultUpdatePolicy;
549 554
550 #if defined(GOOGLE_CHROME_BUILD) 555 #if defined(GOOGLE_CHROME_BUILD)
551 DCHECK(!app_guid.empty()); 556 DCHECK(!app_guid.empty());
552 RegKey policy_key; 557 RegKey policy_key;
553 558
554 // Google Update Group Policy settings are always in HKLM. 559 // Google Update Group Policy settings are always in HKLM.
560 // TODO(wfh): Check if policies should go into Wow6432Node or not.
555 if (policy_key.Open(HKEY_LOCAL_MACHINE, kPoliciesKey, KEY_QUERY_VALUE) == 561 if (policy_key.Open(HKEY_LOCAL_MACHINE, kPoliciesKey, KEY_QUERY_VALUE) ==
556 ERROR_SUCCESS) { 562 ERROR_SUCCESS) {
557 DWORD value = 0; 563 DWORD value = 0;
558 base::string16 app_update_override(kUpdateOverrideValuePrefix); 564 base::string16 app_update_override(kUpdateOverrideValuePrefix);
559 app_update_override.append(app_guid); 565 app_update_override.append(app_guid);
560 // First try to read and comprehend the app-specific override. 566 // First try to read and comprehend the app-specific override.
561 found_override = (policy_key.ReadValueDW(app_update_override.c_str(), 567 found_override = (policy_key.ReadValueDW(app_update_override.c_str(),
562 &value) == ERROR_SUCCESS && 568 &value) == ERROR_SUCCESS &&
563 GetUpdatePolicyFromDword(value, &update_policy)); 569 GetUpdatePolicyFromDword(value, &update_policy));
564 570
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 return cmd_line; 702 return cmd_line;
697 } 703 }
698 704
699 Version GoogleUpdateSettings::GetGoogleUpdateVersion(bool system_install) { 705 Version GoogleUpdateSettings::GetGoogleUpdateVersion(bool system_install) {
700 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 706 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
701 base::string16 version; 707 base::string16 version;
702 RegKey key; 708 RegKey key;
703 709
704 if (key.Open(root_key, 710 if (key.Open(root_key,
705 google_update::kRegPathGoogleUpdate, 711 google_update::kRegPathGoogleUpdate,
706 KEY_QUERY_VALUE) == ERROR_SUCCESS && 712 KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS &&
707 key.ReadValue(google_update::kRegGoogleUpdateVersion, 713 key.ReadValue(google_update::kRegGoogleUpdateVersion,
708 &version) == ERROR_SUCCESS) { 714 &version) == ERROR_SUCCESS) {
709 return Version(base::UTF16ToUTF8(version)); 715 return Version(base::UTF16ToUTF8(version));
710 } 716 }
711 717
712 return Version(); 718 return Version();
713 } 719 }
714 720
715 base::Time GoogleUpdateSettings::GetGoogleUpdateLastStartedAU( 721 base::Time GoogleUpdateSettings::GetGoogleUpdateLastStartedAU(
716 bool system_install) { 722 bool system_install) {
717 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 723 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
718 RegKey update_key; 724 RegKey update_key;
719 725
720 if (update_key.Open(root_key, google_update::kRegPathGoogleUpdate, 726 if (update_key.Open(root_key, google_update::kRegPathGoogleUpdate,
721 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 727 KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS) {
722 DWORD last_start; 728 DWORD last_start;
723 if (update_key.ReadValueDW(google_update::kRegLastStartedAUField, 729 if (update_key.ReadValueDW(google_update::kRegLastStartedAUField,
724 &last_start) == ERROR_SUCCESS) { 730 &last_start) == ERROR_SUCCESS) {
725 return base::Time::FromTimeT(last_start); 731 return base::Time::FromTimeT(last_start);
726 } 732 }
727 } 733 }
728 734
729 return base::Time(); 735 return base::Time();
730 } 736 }
731 737
732 base::Time GoogleUpdateSettings::GetGoogleUpdateLastChecked( 738 base::Time GoogleUpdateSettings::GetGoogleUpdateLastChecked(
733 bool system_install) { 739 bool system_install) {
734 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 740 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
735 RegKey update_key; 741 RegKey update_key;
736 742
737 if (update_key.Open(root_key, google_update::kRegPathGoogleUpdate, 743 if (update_key.Open(root_key, google_update::kRegPathGoogleUpdate,
738 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 744 KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS) {
739 DWORD last_check; 745 DWORD last_check;
740 if (update_key.ReadValueDW(google_update::kRegLastCheckedField, 746 if (update_key.ReadValueDW(google_update::kRegLastCheckedField,
741 &last_check) == ERROR_SUCCESS) { 747 &last_check) == ERROR_SUCCESS) {
742 return base::Time::FromTimeT(last_check); 748 return base::Time::FromTimeT(last_check);
743 } 749 }
744 } 750 }
745 751
746 return base::Time(); 752 return base::Time();
747 } 753 }
748 754
749 bool GoogleUpdateSettings::GetUpdateDetailForApp(bool system_install, 755 bool GoogleUpdateSettings::GetUpdateDetailForApp(bool system_install,
750 const wchar_t* app_guid, 756 const wchar_t* app_guid,
751 ProductData* data) { 757 ProductData* data) {
752 DCHECK(app_guid); 758 DCHECK(app_guid);
753 DCHECK(data); 759 DCHECK(data);
754 760
755 bool product_found = false; 761 bool product_found = false;
756 762
757 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 763 const HKEY root_key = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
758 base::string16 clientstate_reg_path(google_update::kRegPathClientState); 764 base::string16 clientstate_reg_path(google_update::kRegPathClientState);
759 clientstate_reg_path.append(L"\\"); 765 clientstate_reg_path.append(L"\\");
760 clientstate_reg_path.append(app_guid); 766 clientstate_reg_path.append(app_guid);
761 767
762 RegKey clientstate; 768 RegKey clientstate;
763 if (clientstate.Open(root_key, clientstate_reg_path.c_str(), 769 if (clientstate.Open(root_key, clientstate_reg_path.c_str(),
764 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 770 KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS) {
765 base::string16 version; 771 base::string16 version;
766 DWORD dword_value; 772 DWORD dword_value;
767 if ((clientstate.ReadValueDW(google_update::kRegLastCheckSuccessField, 773 if ((clientstate.ReadValueDW(google_update::kRegLastCheckSuccessField,
768 &dword_value) == ERROR_SUCCESS) && 774 &dword_value) == ERROR_SUCCESS) &&
769 (clientstate.ReadValue(google_update::kRegVersionField, 775 (clientstate.ReadValue(google_update::kRegVersionField,
770 &version) == ERROR_SUCCESS)) { 776 &version) == ERROR_SUCCESS)) {
771 product_found = true; 777 product_found = true;
772 data->version = base::UTF16ToASCII(version); 778 data->version = base::UTF16ToASCII(version);
773 data->last_success = base::Time::FromTimeT(dword_value); 779 data->last_success = base::Time::FromTimeT(dword_value);
774 data->last_result = 0; 780 data->last_result = 0;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 HKEY reg_root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 823 HKEY reg_root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
818 824
819 // Use the browser distribution and install level to write to the correct 825 // Use the browser distribution and install level to write to the correct
820 // client state/app guid key. 826 // client state/app guid key.
821 bool success = false; 827 bool success = false;
822 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 828 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
823 if (dist->ShouldSetExperimentLabels()) { 829 if (dist->ShouldSetExperimentLabels()) {
824 base::string16 client_state_path( 830 base::string16 client_state_path(
825 system_install ? dist->GetStateMediumKey() : dist->GetStateKey()); 831 system_install ? dist->GetStateMediumKey() : dist->GetStateKey());
826 RegKey client_state( 832 RegKey client_state(
827 reg_root, client_state_path.c_str(), KEY_SET_VALUE); 833 reg_root, client_state_path.c_str(), KEY_SET_VALUE | KEY_WOW64_32KEY);
828 if (experiment_labels.empty()) { 834 if (experiment_labels.empty()) {
829 success = client_state.DeleteValue(google_update::kExperimentLabels) 835 success = client_state.DeleteValue(google_update::kExperimentLabels)
830 == ERROR_SUCCESS; 836 == ERROR_SUCCESS;
831 } else { 837 } else {
832 success = client_state.WriteValue(google_update::kExperimentLabels, 838 success = client_state.WriteValue(google_update::kExperimentLabels,
833 experiment_labels.c_str()) == ERROR_SUCCESS; 839 experiment_labels.c_str()) == ERROR_SUCCESS;
834 } 840 }
835 } 841 }
836 842
837 return success; 843 return success;
838 } 844 }
839 845
840 bool GoogleUpdateSettings::ReadExperimentLabels( 846 bool GoogleUpdateSettings::ReadExperimentLabels(
841 bool system_install, 847 bool system_install,
842 base::string16* experiment_labels) { 848 base::string16* experiment_labels) {
843 HKEY reg_root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 849 HKEY reg_root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
844 850
845 // If this distribution does not set the experiment labels, don't bother 851 // If this distribution does not set the experiment labels, don't bother
846 // reading. 852 // reading.
847 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 853 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
848 if (!dist->ShouldSetExperimentLabels()) 854 if (!dist->ShouldSetExperimentLabels())
849 return false; 855 return false;
850 856
851 base::string16 client_state_path( 857 base::string16 client_state_path(
852 system_install ? dist->GetStateMediumKey() : dist->GetStateKey()); 858 system_install ? dist->GetStateMediumKey() : dist->GetStateKey());
853 859
854 RegKey client_state; 860 RegKey client_state;
855 LONG result = 861 LONG result = client_state.Open(reg_root, client_state_path.c_str(),
856 client_state.Open(reg_root, client_state_path.c_str(), KEY_QUERY_VALUE); 862 KEY_QUERY_VALUE | KEY_WOW64_32KEY);
857 if (result == ERROR_SUCCESS) { 863 if (result == ERROR_SUCCESS) {
858 result = client_state.ReadValue(google_update::kExperimentLabels, 864 result = client_state.ReadValue(google_update::kExperimentLabels,
859 experiment_labels); 865 experiment_labels);
860 } 866 }
861 867
862 // If the key or value was not present, return the empty string. 868 // If the key or value was not present, return the empty string.
863 if (result == ERROR_FILE_NOT_FOUND || result == ERROR_PATH_NOT_FOUND) { 869 if (result == ERROR_FILE_NOT_FOUND || result == ERROR_PATH_NOT_FOUND) {
864 experiment_labels->clear(); 870 experiment_labels->clear();
865 return true; 871 return true;
866 } 872 }
867 873
868 return result == ERROR_SUCCESS; 874 return result == ERROR_SUCCESS;
869 } 875 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698