OLD | NEW |
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/launcher_support/chrome_launcher_support.h" | 5 #include "chrome/installer/launcher_support/chrome_launcher_support.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <tchar.h> | 8 #include <tchar.h> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 const wchar_t kBrowserAppGuid[] = L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; | 38 const wchar_t kBrowserAppGuid[] = L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; |
39 | 39 |
40 // Copied from util_constants.cc. | 40 // Copied from util_constants.cc. |
41 const wchar_t kChromeAppHostExe[] = L"app_host.exe"; | 41 const wchar_t kChromeAppHostExe[] = L"app_host.exe"; |
42 const char kChromeAppLauncher[] = "app-launcher"; | 42 const char kChromeAppLauncher[] = "app-launcher"; |
43 const wchar_t kChromeExe[] = L"chrome.exe"; | 43 const wchar_t kChromeExe[] = L"chrome.exe"; |
44 const wchar_t kUninstallArgumentsField[] = L"UninstallArguments"; | 44 const wchar_t kUninstallArgumentsField[] = L"UninstallArguments"; |
45 const wchar_t kUninstallStringField[] = L"UninstallString"; | 45 const wchar_t kUninstallStringField[] = L"UninstallString"; |
46 | 46 |
47 #ifndef OFFICIAL_BUILD | 47 #ifndef OFFICIAL_BUILD |
48 FilePath GetDevelopmentExe(const wchar_t* exe_file) { | 48 base::FilePath GetDevelopmentExe(const wchar_t* exe_file) { |
49 base::FilePath current_directory; | 49 base::FilePath current_directory; |
50 if (PathService::Get(base::DIR_EXE, ¤t_directory)) { | 50 if (PathService::Get(base::DIR_EXE, ¤t_directory)) { |
51 base::FilePath chrome_exe_path(current_directory.Append(exe_file)); | 51 base::FilePath chrome_exe_path(current_directory.Append(exe_file)); |
52 if (file_util::PathExists(chrome_exe_path)) | 52 if (file_util::PathExists(chrome_exe_path)) |
53 return chrome_exe_path; | 53 return chrome_exe_path; |
54 } | 54 } |
55 return base::FilePath(); | 55 return base::FilePath(); |
56 } | 56 } |
57 #endif | 57 #endif |
58 | 58 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 return CommandLine::FromString(L"dummy.exe " + uninstall_arguments) | 100 return CommandLine::FromString(L"dummy.exe " + uninstall_arguments) |
101 .HasSwitch(kChromeAppLauncher) && | 101 .HasSwitch(kChromeAppLauncher) && |
102 !GetAppHostPathForInstallationLevel(level).empty(); | 102 !GetAppHostPathForInstallationLevel(level).empty(); |
103 } | 103 } |
104 return false; | 104 return false; |
105 } | 105 } |
106 | 106 |
107 // Reads the path to setup.exe from the value "UninstallString" within the | 107 // Reads the path to setup.exe from the value "UninstallString" within the |
108 // specified product's "ClientState" registry key. Returns an empty FilePath if | 108 // specified product's "ClientState" registry key. Returns an empty FilePath if |
109 // an error occurs or the product is not installed at the specified level. | 109 // an error occurs or the product is not installed at the specified level. |
110 FilePath GetSetupExeFromRegistry(InstallationLevel level, | 110 base::FilePath GetSetupExeFromRegistry(InstallationLevel level, |
111 const wchar_t* app_guid) { | 111 const wchar_t* app_guid) { |
112 string16 uninstall; | 112 string16 uninstall; |
113 if (GetClientStateValue(level, app_guid, kUninstallStringField, &uninstall)) { | 113 if (GetClientStateValue(level, app_guid, kUninstallStringField, &uninstall)) { |
114 base::FilePath setup_exe_path(uninstall); | 114 base::FilePath setup_exe_path(uninstall); |
115 if (file_util::PathExists(setup_exe_path)) | 115 if (file_util::PathExists(setup_exe_path)) |
116 return setup_exe_path; | 116 return setup_exe_path; |
117 } | 117 } |
118 return base::FilePath(); | 118 return base::FilePath(); |
119 } | 119 } |
120 | 120 |
121 // Returns the path to an installed |exe_file| (e.g. chrome.exe, app_host.exe) | 121 // Returns the path to an installed |exe_file| (e.g. chrome.exe, app_host.exe) |
122 // at the specified level, given |setup_exe_path| from Omaha client state. | 122 // at the specified level, given |setup_exe_path| from Omaha client state. |
123 // Returns empty base::FilePath if none found, or if |setup_exe_path| is empty. | 123 // Returns empty base::FilePath if none found, or if |setup_exe_path| is empty. |
124 FilePath FindExeRelativeToSetupExe(const base::FilePath setup_exe_path, | 124 base::FilePath FindExeRelativeToSetupExe(const base::FilePath setup_exe_path, |
125 const wchar_t* exe_file) { | 125 const wchar_t* exe_file) { |
126 if (!setup_exe_path.empty()) { | 126 if (!setup_exe_path.empty()) { |
127 // The uninstall path contains the path to setup.exe, which is two levels | 127 // The uninstall path contains the path to setup.exe, which is two levels |
128 // down from |exe_file|. Move up two levels (plus one to drop the file | 128 // down from |exe_file|. Move up two levels (plus one to drop the file |
129 // name) and look for chrome.exe from there. | 129 // name) and look for chrome.exe from there. |
130 base::FilePath exe_path( | 130 base::FilePath exe_path( |
131 setup_exe_path.DirName().DirName().DirName().Append(exe_file)); | 131 setup_exe_path.DirName().DirName().DirName().Append(exe_file)); |
132 if (file_util::PathExists(exe_path)) | 132 if (file_util::PathExists(exe_path)) |
133 return exe_path; | 133 return exe_path; |
134 // By way of mild future proofing, look up one to see if there's a | 134 // By way of mild future proofing, look up one to see if there's a |
135 // |exe_file| in the version directory | 135 // |exe_file| in the version directory |
136 exe_path = setup_exe_path.DirName().DirName().Append(exe_file); | 136 exe_path = setup_exe_path.DirName().DirName().Append(exe_file); |
137 if (file_util::PathExists(exe_path)) | 137 if (file_util::PathExists(exe_path)) |
138 return exe_path; | 138 return exe_path; |
139 } | 139 } |
140 return base::FilePath(); | 140 return base::FilePath(); |
141 } | 141 } |
142 | 142 |
143 } // namespace | 143 } // namespace |
144 | 144 |
145 FilePath GetSetupExeForInstallationLevel(InstallationLevel level) { | 145 base::FilePath GetSetupExeForInstallationLevel(InstallationLevel level) { |
146 // Look in the registry for Chrome Binaries first. | 146 // Look in the registry for Chrome Binaries first. |
147 base::FilePath setup_exe_path( | 147 base::FilePath setup_exe_path( |
148 GetSetupExeFromRegistry(level, kBinariesAppGuid)); | 148 GetSetupExeFromRegistry(level, kBinariesAppGuid)); |
149 // If the above fails, look in the registry for Chrome next. | 149 // If the above fails, look in the registry for Chrome next. |
150 if (setup_exe_path.empty()) | 150 if (setup_exe_path.empty()) |
151 setup_exe_path = GetSetupExeFromRegistry(level, kBrowserAppGuid); | 151 setup_exe_path = GetSetupExeFromRegistry(level, kBrowserAppGuid); |
152 // If we fail again, then setup_exe_path would be empty. | 152 // If we fail again, then setup_exe_path would be empty. |
153 return setup_exe_path; | 153 return setup_exe_path; |
154 } | 154 } |
155 | 155 |
156 FilePath GetChromePathForInstallationLevel(InstallationLevel level) { | 156 base::FilePath GetChromePathForInstallationLevel(InstallationLevel level) { |
157 return FindExeRelativeToSetupExe( | 157 return FindExeRelativeToSetupExe( |
158 GetSetupExeForInstallationLevel(level), kChromeExe); | 158 GetSetupExeForInstallationLevel(level), kChromeExe); |
159 } | 159 } |
160 | 160 |
161 FilePath GetAppHostPathForInstallationLevel(InstallationLevel level) { | 161 base::FilePath GetAppHostPathForInstallationLevel(InstallationLevel level) { |
162 return FindExeRelativeToSetupExe( | 162 return FindExeRelativeToSetupExe( |
163 GetSetupExeFromRegistry(level, kAppHostAppId), kChromeAppHostExe); | 163 GetSetupExeFromRegistry(level, kAppHostAppId), kChromeAppHostExe); |
164 } | 164 } |
165 | 165 |
166 FilePath GetAnyChromePath() { | 166 base::FilePath GetAnyChromePath() { |
167 base::FilePath chrome_path; | 167 base::FilePath chrome_path; |
168 #ifndef OFFICIAL_BUILD | 168 #ifndef OFFICIAL_BUILD |
169 // For development mode, chrome.exe should be in same dir as the stub. | 169 // For development mode, chrome.exe should be in same dir as the stub. |
170 chrome_path = GetDevelopmentExe(kChromeExe); | 170 chrome_path = GetDevelopmentExe(kChromeExe); |
171 #endif | 171 #endif |
172 if (chrome_path.empty()) | 172 if (chrome_path.empty()) |
173 chrome_path = GetChromePathForInstallationLevel(SYSTEM_LEVEL_INSTALLATION); | 173 chrome_path = GetChromePathForInstallationLevel(SYSTEM_LEVEL_INSTALLATION); |
174 if (chrome_path.empty()) | 174 if (chrome_path.empty()) |
175 chrome_path = GetChromePathForInstallationLevel(USER_LEVEL_INSTALLATION); | 175 chrome_path = GetChromePathForInstallationLevel(USER_LEVEL_INSTALLATION); |
176 return chrome_path; | 176 return chrome_path; |
177 } | 177 } |
178 | 178 |
179 FilePath GetAnyAppHostPath() { | 179 base::FilePath GetAnyAppHostPath() { |
180 base::FilePath app_host_path; | 180 base::FilePath app_host_path; |
181 #ifndef OFFICIAL_BUILD | 181 #ifndef OFFICIAL_BUILD |
182 // For development mode, app_host.exe should be in same dir as chrome.exe. | 182 // For development mode, app_host.exe should be in same dir as chrome.exe. |
183 app_host_path = GetDevelopmentExe(kChromeAppHostExe); | 183 app_host_path = GetDevelopmentExe(kChromeAppHostExe); |
184 #endif | 184 #endif |
185 if (app_host_path.empty()) { | 185 if (app_host_path.empty()) { |
186 app_host_path = GetAppHostPathForInstallationLevel( | 186 app_host_path = GetAppHostPathForInstallationLevel( |
187 SYSTEM_LEVEL_INSTALLATION); | 187 SYSTEM_LEVEL_INSTALLATION); |
188 } | 188 } |
189 if (app_host_path.empty()) | 189 if (app_host_path.empty()) |
(...skipping 10 matching lines...) Expand all Loading... |
200 return IsAppLauncherEnabledAtLevel(USER_LEVEL_INSTALLATION) || | 200 return IsAppLauncherEnabledAtLevel(USER_LEVEL_INSTALLATION) || |
201 IsAppLauncherEnabledAtLevel(SYSTEM_LEVEL_INSTALLATION); | 201 IsAppLauncherEnabledAtLevel(SYSTEM_LEVEL_INSTALLATION); |
202 } | 202 } |
203 | 203 |
204 bool IsChromeBrowserPresent() { | 204 bool IsChromeBrowserPresent() { |
205 return IsProductInstalled(USER_LEVEL_INSTALLATION, kBrowserAppGuid) || | 205 return IsProductInstalled(USER_LEVEL_INSTALLATION, kBrowserAppGuid) || |
206 IsProductInstalled(SYSTEM_LEVEL_INSTALLATION, kBrowserAppGuid); | 206 IsProductInstalled(SYSTEM_LEVEL_INSTALLATION, kBrowserAppGuid); |
207 } | 207 } |
208 | 208 |
209 } // namespace chrome_launcher_support | 209 } // namespace chrome_launcher_support |
OLD | NEW |