diff options
Diffstat (limited to 'chrome/installer/launcher_support/chrome_launcher_support.cc')
-rw-r--r-- | chrome/installer/launcher_support/chrome_launcher_support.cc | 146 |
1 files changed, 16 insertions, 130 deletions
diff --git a/chrome/installer/launcher_support/chrome_launcher_support.cc b/chrome/installer/launcher_support/chrome_launcher_support.cc index 8e5b6a5..9e9ba92 100644 --- a/chrome/installer/launcher_support/chrome_launcher_support.cc +++ b/chrome/installer/launcher_support/chrome_launcher_support.cc @@ -5,20 +5,12 @@ #include "chrome/installer/launcher_support/chrome_launcher_support.h" #include <windows.h> -#include <tchar.h> -#include "base/command_line.h" #include "base/file_util.h" #include "base/files/file_path.h" -#include "base/logging.h" -#include "base/process/launch.h" #include "base/strings/string16.h" #include "base/win/registry.h" -#ifndef OFFICIAL_BUILD -#include "base/path_service.h" -#endif - namespace chrome_launcher_support { namespace { @@ -26,8 +18,6 @@ namespace { // TODO(huangs) Refactor the constants: http://crbug.com/148538 const wchar_t kGoogleRegClientStateKey[] = L"Software\\Google\\Update\\ClientState"; -const wchar_t kGoogleRegClientsKey[] = L"Software\\Google\\Update\\Clients"; -const wchar_t kRegVersionField[] = L"pv"; // Copied from chrome_appid.cc. const wchar_t kBinariesAppGuid[] = L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}"; @@ -35,14 +25,8 @@ const wchar_t kBinariesAppGuid[] = L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}"; // Copied from google_chrome_distribution.cc. const wchar_t kBrowserAppGuid[] = L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; -// Copied frome google_chrome_sxs_distribution.cc. -const wchar_t kSxSBrowserAppGuid[] = L"{4ea16ac7-fd5a-47c3-875b-dbf4a2008c20}"; - // Copied from util_constants.cc. -const wchar_t kChromeAppHostExe[] = L"app_host.exe"; -const char kChromeAppLauncher[] = "app-launcher"; const wchar_t kChromeExe[] = L"chrome.exe"; -const wchar_t kUninstallArgumentsField[] = L"UninstallArguments"; const wchar_t kUninstallStringField[] = L"UninstallString"; // Reads a string value from the specified product's "ClientState" registry key. @@ -66,33 +50,6 @@ bool GetClientStateValue(InstallationLevel level, return false; } -// Determines whether the specified product has a key in "Clients". This -// indicates whether the product is installed at the given level. -bool IsProductInstalled(InstallationLevel level, const wchar_t* app_guid) { - HKEY root_key = (level == USER_LEVEL_INSTALLATION) ? - HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; - base::string16 subkey(kGoogleRegClientsKey); - subkey.append(1, L'\\').append(app_guid); - base::win::RegKey reg_key; - // Google Update always uses 32bit hive. - return reg_key.Open(root_key, subkey.c_str(), - KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS && - reg_key.HasValue(kRegVersionField); -} - -bool IsAppLauncherEnabledAtLevel(InstallationLevel level) { - base::string16 uninstall_arguments; - if (GetClientStateValue(level, - kAppLauncherGuid, - kUninstallArgumentsField, - &uninstall_arguments)) { - return CommandLine::FromString(L"dummy.exe " + uninstall_arguments) - .HasSwitch(kChromeAppLauncher) && - !GetAppHostPathForInstallationLevel(level).empty(); - } - return false; -} - // Reads the path to setup.exe from the value "UninstallString" within the // specified product's "ClientState" registry key. Returns an empty FilePath if // an error occurs or the product is not installed at the specified level. @@ -107,9 +64,22 @@ base::FilePath GetSetupExeFromRegistry(InstallationLevel level, return base::FilePath(); } -// Returns the path to an installed |exe_file| (e.g. chrome.exe, app_host.exe) -// at the specified level, given |setup_exe_path| from Omaha client state. -// Returns empty base::FilePath if none found, or if |setup_exe_path| is empty. +// Returns the path to an existing setup.exe at the specified level, if it can +// be found via Omaha client state. +base::FilePath GetSetupExeForInstallationLevel(InstallationLevel level) { + // Look in the registry for Chrome Binaries first. + base::FilePath setup_exe_path( + GetSetupExeFromRegistry(level, kBinariesAppGuid)); + // If the above fails, look in the registry for Chrome next. + if (setup_exe_path.empty()) + setup_exe_path = GetSetupExeFromRegistry(level, kBrowserAppGuid); + // If we fail again, then setup_exe_path would be empty. + return setup_exe_path; +} + +// Returns the path to an installed |exe_file| (e.g. chrome.exe) at the +// specified level, given |setup_exe_path| from Omaha client state. Returns +// empty base::FilePath if none found, or if |setup_exe_path| is empty. base::FilePath FindExeRelativeToSetupExe(const base::FilePath setup_exe_path, const wchar_t* exe_file) { if (!setup_exe_path.empty()) { @@ -131,52 +101,11 @@ base::FilePath FindExeRelativeToSetupExe(const base::FilePath setup_exe_path, } // namespace -const wchar_t kAppLauncherGuid[] = L"{FDA71E6F-AC4C-4a00-8B70-9958A68906BF}"; - -void UninstallLegacyAppLauncher(InstallationLevel level) { - base::FilePath setup_exe(GetSetupExeFromRegistry(level, kAppLauncherGuid)); - if (setup_exe.empty()) - return; - base::string16 uninstall_arguments; - if (GetClientStateValue(level, - kAppLauncherGuid, - kUninstallArgumentsField, - &uninstall_arguments)) { - CommandLine uninstall_cmd = CommandLine::FromString( - L"\"" + setup_exe.value() + L"\" " + uninstall_arguments); - - VLOG(1) << "Uninstalling legacy app launcher with command line: " - << uninstall_cmd.GetCommandLineString(); - base::LaunchProcess(uninstall_cmd, base::LaunchOptions(), NULL); - } -} - -base::FilePath GetSetupExeForInstallationLevel(InstallationLevel level) { - // Look in the registry for Chrome Binaries first. - base::FilePath setup_exe_path( - GetSetupExeFromRegistry(level, kBinariesAppGuid)); - // If the above fails, look in the registry for Chrome next. - if (setup_exe_path.empty()) - setup_exe_path = GetSetupExeFromRegistry(level, kBrowserAppGuid); - // If we fail again, then setup_exe_path would be empty. - return setup_exe_path; -} - base::FilePath GetChromePathForInstallationLevel(InstallationLevel level) { return FindExeRelativeToSetupExe( GetSetupExeForInstallationLevel(level), kChromeExe); } -base::FilePath GetAppHostPathForInstallationLevel(InstallationLevel level) { - return FindExeRelativeToSetupExe( - GetSetupExeFromRegistry(level, kAppLauncherGuid), kChromeAppHostExe); -} - -base::FilePath GetChromeSxSPathForInstallationLevel(InstallationLevel level) { - return FindExeRelativeToSetupExe( - GetSetupExeFromRegistry(level, kSxSBrowserAppGuid), kChromeExe); -} - base::FilePath GetAnyChromePath() { base::FilePath chrome_path; if (chrome_path.empty()) @@ -186,47 +115,4 @@ base::FilePath GetAnyChromePath() { return chrome_path; } -base::FilePath GetAnyAppHostPath() { - base::FilePath app_host_path; - if (app_host_path.empty()) { - app_host_path = GetAppHostPathForInstallationLevel( - SYSTEM_LEVEL_INSTALLATION); - } - if (app_host_path.empty()) - app_host_path = GetAppHostPathForInstallationLevel(USER_LEVEL_INSTALLATION); - return app_host_path; -} - -base::FilePath GetAnyChromeSxSPath() { - base::FilePath path = - GetChromeSxSPathForInstallationLevel(USER_LEVEL_INSTALLATION); - if (path.empty()) - path = GetChromeSxSPathForInstallationLevel(SYSTEM_LEVEL_INSTALLATION); - return path; -} - -bool IsAppHostPresent() { - base::FilePath app_host_exe = GetAnyAppHostPath(); - return !app_host_exe.empty(); -} - -InstallationState GetAppLauncherInstallationState() { - if (IsAppLauncherEnabledAtLevel(SYSTEM_LEVEL_INSTALLATION)) - return INSTALLED_AT_SYSTEM_LEVEL; - - if (IsAppLauncherEnabledAtLevel(USER_LEVEL_INSTALLATION)) - return INSTALLED_AT_USER_LEVEL; - - return NOT_INSTALLED; -} - -bool IsAppLauncherPresent() { - return GetAppLauncherInstallationState() != NOT_INSTALLED; -} - -bool IsChromeBrowserPresent() { - return IsProductInstalled(USER_LEVEL_INSTALLATION, kBrowserAppGuid) || - IsProductInstalled(SYSTEM_LEVEL_INSTALLATION, kBrowserAppGuid); -} - } // namespace chrome_launcher_support |