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

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

Issue 3172009: Cleanup Registry API: part 3. (Closed) Base URL: git://git.chromium.org/chromium.git
Patch Set: chrome fixes Created 10 years, 4 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // This file defines functions that integrate Chrome in Windows shell. These 5 // This file defines functions that integrate Chrome in Windows shell. These
6 // functions can be used by Chrome as well as Chrome installer. All of the 6 // functions can be used by Chrome as well as Chrome installer. All of the
7 // work is done by the local functions defined in anonymous namespace in 7 // work is done by the local functions defined in anonymous namespace in
8 // this class. 8 // this class.
9 9
10 #include "chrome/installer/util/shell_util.h" 10 #include "chrome/installer/util/shell_util.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 if (_is_string) { 184 if (_is_string) {
185 items->AddSetRegValueWorkItem(root, _key_path, _name, _value, true); 185 items->AddSetRegValueWorkItem(root, _key_path, _name, _value, true);
186 } else { 186 } else {
187 items->AddSetRegValueWorkItem(root, _key_path, _name, _int_value, true); 187 items->AddSetRegValueWorkItem(root, _key_path, _name, _int_value, true);
188 } 188 }
189 } 189 }
190 190
191 // Checks if the current registry entry exists in HKLM registry and the value 191 // Checks if the current registry entry exists in HKLM registry and the value
192 // is same. 192 // is same.
193 bool ExistsInHKLM() const { 193 bool ExistsInHKLM() const {
194 RegKey key(HKEY_LOCAL_MACHINE, _key_path.c_str()); 194 RegKey key(HKEY_LOCAL_MACHINE, _key_path.c_str(), KEY_READ);
195 bool found = false; 195 bool found = false;
196 if (_is_string) { 196 if (_is_string) {
197 std::wstring read_value; 197 std::wstring read_value;
198 found = (key.ReadValue(_name.c_str(), &read_value)) && 198 found = (key.ReadValue(_name.c_str(), &read_value)) &&
199 (read_value.size() == _value.size()) && 199 (read_value.size() == _value.size()) &&
200 (std::equal(_value.begin(), _value.end(), read_value.begin(), 200 (std::equal(_value.begin(), _value.end(), read_value.begin(),
201 CaseInsensitiveCompare<wchar_t>())); 201 CaseInsensitiveCompare<wchar_t>()));
202 } else { 202 } else {
203 DWORD read_value; 203 DWORD read_value;
204 found = key.ReadValueDW(_name.c_str(), &read_value) && 204 found = key.ReadValueDW(_name.c_str(), &read_value) &&
205 read_value == _int_value; 205 read_value == _int_value;
206 } 206 }
207 key.Close(); 207 key.Close();
208 return found; 208 return found;
209 } 209 }
210 210
211 // Checks if the current registry entry exists in HKLM registry 211 // Checks if the current registry entry exists in HKLM registry
212 // (only the name). 212 // (only the name).
213 bool NameExistsInHKLM() const { 213 bool NameExistsInHKLM() const {
214 RegKey key(HKEY_LOCAL_MACHINE, _key_path.c_str()); 214 RegKey key(HKEY_LOCAL_MACHINE, _key_path.c_str(), KEY_READ);
215 bool found = false; 215 bool found = false;
216 if (_is_string) { 216 if (_is_string) {
217 std::wstring read_value; 217 std::wstring read_value;
218 found = key.ReadValue(_name.c_str(), &read_value); 218 found = key.ReadValue(_name.c_str(), &read_value);
219 } else { 219 } else {
220 DWORD read_value; 220 DWORD read_value;
221 found = key.ReadValueDW(_name.c_str(), &read_value); 221 found = key.ReadValueDW(_name.c_str(), &read_value);
222 } 222 }
223 key.Close(); 223 key.Close();
224 return found; 224 return found;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 // the new process will make the necessary changes and return SUCCESS that 296 // the new process will make the necessary changes and return SUCCESS that
297 // we capture and return. 297 // we capture and return.
298 bool ElevateAndRegisterChrome(const std::wstring& chrome_exe, 298 bool ElevateAndRegisterChrome(const std::wstring& chrome_exe,
299 const std::wstring& suffix) { 299 const std::wstring& suffix) {
300 std::wstring exe_path(file_util::GetDirectoryFromPath(chrome_exe)); 300 std::wstring exe_path(file_util::GetDirectoryFromPath(chrome_exe));
301 file_util::AppendToPath(&exe_path, installer_util::kSetupExe); 301 file_util::AppendToPath(&exe_path, installer_util::kSetupExe);
302 if (!file_util::PathExists(FilePath::FromWStringHack(exe_path))) { 302 if (!file_util::PathExists(FilePath::FromWStringHack(exe_path))) {
303 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 303 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
304 HKEY reg_root = InstallUtil::IsPerUserInstall(chrome_exe.c_str()) ? 304 HKEY reg_root = InstallUtil::IsPerUserInstall(chrome_exe.c_str()) ?
305 HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; 305 HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE;
306 RegKey key(reg_root, dist->GetUninstallRegPath().c_str()); 306 RegKey key(reg_root, dist->GetUninstallRegPath().c_str(), KEY_READ);
307 key.ReadValue(installer_util::kUninstallStringField, &exe_path); 307 key.ReadValue(installer_util::kUninstallStringField, &exe_path);
308 CommandLine command_line = CommandLine::FromString(exe_path); 308 CommandLine command_line = CommandLine::FromString(exe_path);
309 exe_path = command_line.program(); 309 exe_path = command_line.program();
310 } 310 }
311 if (file_util::PathExists(FilePath::FromWStringHack(exe_path))) { 311 if (file_util::PathExists(FilePath::FromWStringHack(exe_path))) {
312 std::wstring params(L"--"); 312 std::wstring params(L"--");
313 params.append( 313 params.append(
314 ASCIIToWide(installer_util::switches::kRegisterChromeBrowser)); 314 ASCIIToWide(installer_util::switches::kRegisterChromeBrowser));
315 params.append(L"=\"" + chrome_exe + L"\""); 315 params.append(L"=\"" + chrome_exe + L"\"");
316 if (!suffix.empty()) { 316 if (!suffix.empty()) {
(...skipping 25 matching lines...) Expand all
342 // - Software\Clients\StartMenuInternet\Chromium\"" key should have a valid 342 // - Software\Clients\StartMenuInternet\Chromium\"" key should have a valid
343 // value. 343 // value.
344 // - The value should not be same as given value in |chrome_exe| 344 // - The value should not be same as given value in |chrome_exe|
345 // - Finally to handle the default install path (C:\Document and Settings\ 345 // - Finally to handle the default install path (C:\Document and Settings\
346 // <user>\Local Settings\Application Data\Chromium\Application) the value 346 // <user>\Local Settings\Application Data\Chromium\Application) the value
347 // of the above key should differ from |chrome_exe| only in user name. 347 // of the above key should differ from |chrome_exe| only in user name.
348 bool AnotherUserHasDefaultBrowser(const std::wstring& chrome_exe) { 348 bool AnotherUserHasDefaultBrowser(const std::wstring& chrome_exe) {
349 std::wstring reg_key(ShellUtil::kRegStartMenuInternet); 349 std::wstring reg_key(ShellUtil::kRegStartMenuInternet);
350 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 350 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
351 reg_key.append(L"\\" + dist->GetApplicationName() + ShellUtil::kRegShellOpen); 351 reg_key.append(L"\\" + dist->GetApplicationName() + ShellUtil::kRegShellOpen);
352 RegKey key(HKEY_LOCAL_MACHINE, reg_key.c_str()); 352 RegKey key(HKEY_LOCAL_MACHINE, reg_key.c_str(), KEY_READ);
353 std::wstring registry_chrome_exe; 353 std::wstring registry_chrome_exe;
354 if (!key.ReadValue(L"", &registry_chrome_exe) || 354 if (!key.ReadValue(L"", &registry_chrome_exe) ||
355 registry_chrome_exe.length() < 2) 355 registry_chrome_exe.length() < 2)
356 return false; 356 return false;
357 357
358 registry_chrome_exe = registry_chrome_exe.substr(1, 358 registry_chrome_exe = registry_chrome_exe.substr(1,
359 registry_chrome_exe.length() - 2); 359 registry_chrome_exe.length() - 2);
360 if ((registry_chrome_exe.size() == chrome_exe.size()) && 360 if ((registry_chrome_exe.size() == chrome_exe.size()) &&
361 (std::equal(chrome_exe.begin(), chrome_exe.end(), 361 (std::equal(chrome_exe.begin(), chrome_exe.end(),
362 registry_chrome_exe.begin(), 362 registry_chrome_exe.begin(),
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 file_util::AppendToPath(path, kQuickLaunchPath); 562 file_util::AppendToPath(path, kQuickLaunchPath);
563 return true; 563 return true;
564 } 564 }
565 565
566 void ShellUtil::GetRegisteredBrowsers(std::map<std::wstring, 566 void ShellUtil::GetRegisteredBrowsers(std::map<std::wstring,
567 std::wstring>* browsers) { 567 std::wstring>* browsers) {
568 std::wstring base_key(ShellUtil::kRegStartMenuInternet); 568 std::wstring base_key(ShellUtil::kRegStartMenuInternet);
569 HKEY root = HKEY_LOCAL_MACHINE; 569 HKEY root = HKEY_LOCAL_MACHINE;
570 for (RegistryKeyIterator iter(root, base_key.c_str()); iter.Valid(); ++iter) { 570 for (RegistryKeyIterator iter(root, base_key.c_str()); iter.Valid(); ++iter) {
571 std::wstring key = base_key + L"\\" + iter.Name(); 571 std::wstring key = base_key + L"\\" + iter.Name();
572 RegKey capabilities(root, (key + L"\\Capabilities").c_str()); 572 RegKey capabilities(root, (key + L"\\Capabilities").c_str(), KEY_READ);
573 std::wstring name; 573 std::wstring name;
574 if (!capabilities.Valid() || 574 if (!capabilities.Valid() ||
575 !capabilities.ReadValue(L"ApplicationName", &name)) { 575 !capabilities.ReadValue(L"ApplicationName", &name)) {
576 RegKey base_key(root, key.c_str()); 576 RegKey base_key(root, key.c_str(), KEY_READ);
577 if (!base_key.ReadValue(L"", &name)) 577 if (!base_key.ReadValue(L"", &name))
578 continue; 578 continue;
579 } 579 }
580 RegKey install_info(root, (key + L"\\InstallInfo").c_str()); 580 RegKey install_info(root, (key + L"\\InstallInfo").c_str(), KEY_READ);
581 std::wstring command; 581 std::wstring command;
582 if (!install_info.Valid() || 582 if (!install_info.Valid() ||
583 !install_info.ReadValue(L"ReinstallCommand", &command)) 583 !install_info.ReadValue(L"ReinstallCommand", &command))
584 continue; 584 continue;
585 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 585 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
586 if (!name.empty() && !command.empty() && 586 if (!name.empty() && !command.empty() &&
587 name.find(dist->GetApplicationName()) == std::wstring::npos) 587 name.find(dist->GetApplicationName()) == std::wstring::npos)
588 (*browsers)[name] = command; 588 (*browsers)[name] = command;
589 } 589 }
590 } 590 }
591 591
592 bool ShellUtil::GetUserSpecificDefaultBrowserSuffix(std::wstring* entry) { 592 bool ShellUtil::GetUserSpecificDefaultBrowserSuffix(std::wstring* entry) {
593 wchar_t user_name[256]; 593 wchar_t user_name[256];
594 DWORD size = _countof(user_name); 594 DWORD size = _countof(user_name);
595 if (::GetUserName(user_name, &size) == 0) 595 if (::GetUserName(user_name, &size) == 0)
596 return false; 596 return false;
597 entry->assign(L"."); 597 entry->assign(L".");
598 entry->append(user_name); 598 entry->append(user_name);
599 599
600 std::wstring start_menu_entry(ShellUtil::kRegStartMenuInternet); 600 std::wstring start_menu_entry(ShellUtil::kRegStartMenuInternet);
601 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 601 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
602 start_menu_entry.append(L"\\" + dist->GetApplicationName() + *entry); 602 start_menu_entry.append(L"\\" + dist->GetApplicationName() + *entry);
603 RegKey key(HKEY_LOCAL_MACHINE, start_menu_entry.c_str()); 603 RegKey key(HKEY_LOCAL_MACHINE, start_menu_entry.c_str(), KEY_READ);
604 return key.Valid(); 604 return key.Valid();
605 } 605 }
606 606
607 bool ShellUtil::MakeChromeDefault(int shell_change, 607 bool ShellUtil::MakeChromeDefault(int shell_change,
608 const std::wstring& chrome_exe, 608 const std::wstring& chrome_exe,
609 bool elevate_if_not_admin) { 609 bool elevate_if_not_admin) {
610 if (!BrowserDistribution::GetDistribution()->CanSetAsDefault()) 610 if (!BrowserDistribution::GetDistribution()->CanSetAsDefault())
611 return false; 611 return false;
612 612
613 ShellUtil::RegisterChromeBrowser(chrome_exe, L"", elevate_if_not_admin); 613 ShellUtil::RegisterChromeBrowser(chrome_exe, L"", elevate_if_not_admin);
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 chrome_exe.c_str(), // target 797 chrome_exe.c_str(), // target
798 shortcut.c_str(), // shortcut 798 shortcut.c_str(), // shortcut
799 chrome_path.c_str(), // working dir 799 chrome_path.c_str(), // working dir
800 NULL, // arguments 800 NULL, // arguments
801 description.c_str(), // description 801 description.c_str(), // description
802 chrome_exe.c_str(), // icon file 802 chrome_exe.c_str(), // icon file
803 icon_index, // icon index 803 icon_index, // icon index
804 dist->GetBrowserAppId().c_str()); // app id 804 dist->GetBrowserAppId().c_str()); // app id
805 } 805 }
806 } 806 }
OLDNEW
« no previous file with comments | « chrome/installer/util/install_util.cc ('k') | chrome/test/mini_installer_test/chrome_mini_installer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698