diff options
author | kuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-28 17:17:18 +0000 |
---|---|---|
committer | kuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-28 17:17:18 +0000 |
commit | 921af02d638c6f90c45c15b804620c90fd324d19 (patch) | |
tree | 271e35d4faeb232e4b7310941ae1180dbdcd14ee /chrome/installer | |
parent | 76fdc21de47ba710cd71f1d06ca55362b118c390 (diff) | |
download | chromium_src-921af02d638c6f90c45c15b804620c90fd324d19.zip chromium_src-921af02d638c6f90c45c15b804620c90fd324d19.tar.gz chromium_src-921af02d638c6f90c45c15b804620c90fd324d19.tar.bz2 |
For system level install read setup.exe path from HKLM instead of HKCU.
Also register extensions separately for Chrome and Chromium (only one can be made default at one time).
BUG=9697
Review URL: http://codereview.chromium.org/101001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14739 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/installer')
-rw-r--r-- | chrome/installer/util/shell_util.cc | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc index 99fd0a6..55e576a 100644 --- a/chrome/installer/util/shell_util.cc +++ b/chrome/installer/util/shell_util.cc @@ -75,26 +75,17 @@ class RegistryEntry { entries.push_front(new RegistryEntry(open_with_key, std::wstring())); } - // Chrome extension installer + // Chrome Extension file handler std::wstring install_cmd = ShellUtil::GetChromeInstallExtensionCmd(chrome_exe); std::wstring prog_id = std::wstring(L"Software\\Classes\\") + ShellUtil::kChromeExtProgId; - - // Extension file handler entries.push_front(new RegistryEntry(prog_id, - ShellUtil::kChromeExtProgIdDesc)); + ShellUtil::kChromeExtProgIdDesc)); entries.push_front(new RegistryEntry( - prog_id + L"\\DefaultIcon", icon_path)); + prog_id + ShellUtil::kRegDefaultIcon, icon_path)); entries.push_front(new RegistryEntry( - prog_id + L"\\shell\\open\\command", install_cmd)); - - // .crx file type extension - std::wstring file_extension_key(L"Software\\Classes\\"); - file_extension_key.append(L"."); - file_extension_key.append(chrome::kExtensionFileExtension); - entries.push_front(new RegistryEntry(file_extension_key, - ShellUtil::kChromeExtProgId)); + prog_id + ShellUtil::kRegShellOpen, install_cmd)); BrowserDistribution* dist = BrowserDistribution::GetDistribution(); std::wstring start_menu_entry(ShellUtil::kRegStartMenuInternet); @@ -133,6 +124,9 @@ class RegistryEntry { capabilities + L"\\FileAssociations", ShellUtil::kFileAssociations[i], ShellUtil::kChromeHTMLProgId)); } + entries.push_front(new RegistryEntry( + capabilities + L"\\FileAssociations", + chrome::kExtensionFileExtension, ShellUtil::kChromeExtProgId)); for (int i = 0; ShellUtil::kProtocolAssociations[i] != NULL; i++) { entries.push_front(new RegistryEntry( capabilities + L"\\URLAssociations", @@ -244,6 +238,14 @@ bool BindChromeAssociations(HKEY root_key, const std::wstring& chrome_exe) { ShellUtil::kChromeHTMLProgId, true); } + // .crx file type extension + std::wstring file_extension_key = classes_path + L"\\." + + chrome::kExtensionFileExtension; + items->AddCreateRegKeyWorkItem(root_key, file_extension_key); + items->AddSetRegValueWorkItem(root_key, file_extension_key, L"", + ShellUtil::kChromeExtProgId, true); + + // protocols associations std::wstring chrome_open = ShellUtil::GetChromeShellOpenCmd(chrome_exe); std::wstring chrome_icon(chrome_exe); @@ -356,7 +358,9 @@ ShellUtil::RegisterStatus RegisterOnVista(const std::wstring& chrome_exe, file_util::AppendToPath(&exe_path, installer_util::kSetupExe); if (!file_util::PathExists(exe_path)) { BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - RegKey key(HKEY_CURRENT_USER, dist->GetUninstallRegPath().c_str()); + HKEY reg_root = InstallUtil::IsPerUserInstall(chrome_exe.c_str()) ? + HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; + RegKey key(reg_root, dist->GetUninstallRegPath().c_str()); key.ReadValue(installer_util::kUninstallStringField, &exe_path); CommandLine command_line(L""); command_line.ParseFromString(exe_path); @@ -394,9 +398,11 @@ const wchar_t* ShellUtil::kAppPathsRegistryKey = const wchar_t* ShellUtil::kAppPathsRegistryPathName = L"Path"; #if defined(GOOGLE_CHROME_BUILD) +const wchar_t* ShellUtil::kChromeExtProgId = L"ChromeExt"; const wchar_t* ShellUtil::kChromeHTMLProgId = L"ChromeHTML"; const wchar_t* ShellUtil::kChromeHTMLProgIdDesc = L"Chrome HTML"; #else +const wchar_t* ShellUtil::kChromeExtProgId = L"ChromiumExt"; const wchar_t* ShellUtil::kChromeHTMLProgId = L"ChromiumHTML"; const wchar_t* ShellUtil::kChromeHTMLProgIdDesc = L"Chromium HTML"; #endif @@ -407,7 +413,6 @@ const wchar_t* ShellUtil::kProtocolAssociations[] = {L"ftp", L"http", L"https", NULL}; const wchar_t* ShellUtil::kRegUrlProtocol = L"URL Protocol"; -const wchar_t* ShellUtil::kChromeExtProgId = L"ChromeExt"; const wchar_t* ShellUtil::kChromeExtProgIdDesc = L"Chrome Extension Installer"; ShellUtil::RegisterStatus ShellUtil::AddChromeToSetAccessDefaults( |