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

Side by Side Diff: chrome/installer/setup/uninstall.cc

Issue 7377010: This change will split the result codes between content and chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: actually rename the files Created 9 years, 5 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 the methods useful for uninstalling Chrome. 5 // This file defines the methods useful for uninstalling Chrome.
6 6
7 #include "chrome/installer/setup/uninstall.h" 7 #include "chrome/installer/setup/uninstall.h"
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "base/win/registry.h" 14 #include "base/win/registry.h"
15 #include "base/win/scoped_handle.h" 15 #include "base/win/scoped_handle.h"
16 #include "base/win/windows_version.h" 16 #include "base/win/windows_version.h"
17 #include "chrome/common/chrome_constants.h" 17 #include "chrome/common/chrome_constants.h"
18 #include "chrome/common/chrome_paths_internal.h" 18 #include "chrome/common/chrome_paths_internal.h"
19 #include "chrome/common/chrome_result_codes.h"
19 #include "chrome/installer/setup/install.h" 20 #include "chrome/installer/setup/install.h"
20 #include "chrome/installer/setup/install_worker.h" 21 #include "chrome/installer/setup/install_worker.h"
21 #include "chrome/installer/setup/setup_constants.h" 22 #include "chrome/installer/setup/setup_constants.h"
22 #include "chrome/installer/setup/setup_util.h" 23 #include "chrome/installer/setup/setup_util.h"
23 #include "chrome/installer/util/browser_distribution.h" 24 #include "chrome/installer/util/browser_distribution.h"
24 #include "chrome/installer/util/channel_info.h" 25 #include "chrome/installer/util/channel_info.h"
25 #include "chrome/installer/util/delete_after_reboot_helper.h" 26 #include "chrome/installer/util/delete_after_reboot_helper.h"
26 #include "chrome/installer/util/google_update_constants.h" 27 #include "chrome/installer/util/google_update_constants.h"
27 #include "chrome/installer/util/helper.h" 28 #include "chrome/installer/util/helper.h"
28 #include "chrome/installer/util/install_util.h" 29 #include "chrome/installer/util/install_util.h"
29 #include "chrome/installer/util/installation_state.h" 30 #include "chrome/installer/util/installation_state.h"
30 #include "chrome/installer/util/installer_state.h" 31 #include "chrome/installer/util/installer_state.h"
31 #include "chrome/installer/util/logging_installer.h" 32 #include "chrome/installer/util/logging_installer.h"
32 #include "chrome/installer/util/self_cleaning_temp_dir.h" 33 #include "chrome/installer/util/self_cleaning_temp_dir.h"
33 #include "chrome/installer/util/shell_util.h" 34 #include "chrome/installer/util/shell_util.h"
34 #include "chrome/installer/util/util_constants.h" 35 #include "chrome/installer/util/util_constants.h"
35 #include "content/common/result_codes.h"
36 #include "rlz/win/lib/rlz_lib.h" 36 #include "rlz/win/lib/rlz_lib.h"
37 37
38 // Build-time generated include file. 38 // Build-time generated include file.
39 #include "registered_dlls.h" // NOLINT 39 #include "registered_dlls.h" // NOLINT
40 40
41 using base::win::RegKey; 41 using base::win::RegKey;
42 using installer::InstallStatus; 42 using installer::InstallStatus;
43 using installer::MasterPreferences; 43 using installer::MasterPreferences;
44 44
45 namespace { 45 namespace {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 for (int j = 0; j < 4; ++j) { 131 for (int j = 0; j < 4; ++j) {
132 std::wstring wnd_class(L"Chrome_WidgetWin_"); 132 std::wstring wnd_class(L"Chrome_WidgetWin_");
133 wnd_class.append(base::IntToString16(j)); 133 wnd_class.append(base::IntToString16(j));
134 HWND window = FindWindowEx(NULL, NULL, wnd_class.c_str(), NULL); 134 HWND window = FindWindowEx(NULL, NULL, wnd_class.c_str(), NULL);
135 while (window) { 135 while (window) {
136 HWND tmpWnd = window; 136 HWND tmpWnd = window;
137 window = FindWindowEx(NULL, window, wnd_class.c_str(), NULL); 137 window = FindWindowEx(NULL, window, wnd_class.c_str(), NULL);
138 if (!SendMessageTimeout(tmpWnd, WM_CLOSE, 0, 0, SMTO_BLOCK, 3000, NULL) && 138 if (!SendMessageTimeout(tmpWnd, WM_CLOSE, 0, 0, SMTO_BLOCK, 3000, NULL) &&
139 (GetLastError() == ERROR_TIMEOUT)) { 139 (GetLastError() == ERROR_TIMEOUT)) {
140 base::CleanupProcesses(installer::kChromeExe, 0, 140 base::CleanupProcesses(installer::kChromeExe, 0,
141 ResultCodes::HUNG, NULL); 141 content::RESULT_CODE_HUNG, NULL);
142 base::CleanupProcesses(installer::kNaClExe, 0, 142 base::CleanupProcesses(installer::kNaClExe, 0,
143 ResultCodes::HUNG, NULL); 143 content::RESULT_CODE_HUNG, NULL);
144 return; 144 return;
145 } 145 }
146 } 146 }
147 } 147 }
148 148
149 // If asking politely didn't work, wait for 15 seconds and then kill all 149 // If asking politely didn't work, wait for 15 seconds and then kill all
150 // chrome.exe. This check is just in case Chrome is ignoring WM_CLOSE 150 // chrome.exe. This check is just in case Chrome is ignoring WM_CLOSE
151 // messages. 151 // messages.
152 base::CleanupProcesses(installer::kChromeExe, 15000, 152 base::CleanupProcesses(installer::kChromeExe, 15000,
153 ResultCodes::HUNG, NULL); 153 content::RESULT_CODE_HUNG, NULL);
154 base::CleanupProcesses(installer::kNaClExe, 15000, 154 base::CleanupProcesses(installer::kNaClExe, 15000,
155 ResultCodes::HUNG, NULL); 155 content::RESULT_CODE_HUNG, NULL);
156 } 156 }
157 157
158 // Attempts to close the Chrome Frame helper process by sending WM_CLOSE 158 // Attempts to close the Chrome Frame helper process by sending WM_CLOSE
159 // messages to its window, or just killing it if that doesn't work. 159 // messages to its window, or just killing it if that doesn't work.
160 void CloseChromeFrameHelperProcess() { 160 void CloseChromeFrameHelperProcess() {
161 HWND window = FindWindow(installer::kChromeFrameHelperWndClass, NULL); 161 HWND window = FindWindow(installer::kChromeFrameHelperWndClass, NULL);
162 if (!::IsWindow(window)) 162 if (!::IsWindow(window))
163 return; 163 return;
164 164
165 const DWORD kWaitMs = 3000; 165 const DWORD kWaitMs = 3000;
(...skipping 14 matching lines...) Expand all
180 << " to exit failed or timed out."; 180 << " to exit failed or timed out.";
181 } else { 181 } else {
182 kill = false; 182 kill = false;
183 VLOG(1) << installer::kChromeFrameHelperExe << " exited normally."; 183 VLOG(1) << installer::kChromeFrameHelperExe << " exited normally.";
184 } 184 }
185 } 185 }
186 186
187 if (kill) { 187 if (kill) {
188 VLOG(1) << installer::kChromeFrameHelperExe << " hung. Killing."; 188 VLOG(1) << installer::kChromeFrameHelperExe << " hung. Killing.";
189 base::CleanupProcesses(installer::kChromeFrameHelperExe, 0, 189 base::CleanupProcesses(installer::kChromeFrameHelperExe, 0,
190 ResultCodes::HUNG, NULL); 190 content::RESULT_CODE_HUNG, NULL);
191 } 191 }
192 } 192 }
193 193
194 // This method tries to figure out if current user has registered Chrome. 194 // This method tries to figure out if current user has registered Chrome.
195 // It returns true iff: 195 // It returns true iff:
196 // - Software\Clients\StartMenuInternet\Chromium\"" key has a valid value. 196 // - Software\Clients\StartMenuInternet\Chromium\"" key has a valid value.
197 // - The value is same as chrome.exe path for the current installation. 197 // - The value is same as chrome.exe path for the current installation.
198 bool CurrentUserHasDefaultBrowser(const InstallerState& installer_state, 198 bool CurrentUserHasDefaultBrowser(const InstallerState& installer_state,
199 const Product& product) { 199 const Product& product) {
200 std::wstring reg_key(ShellUtil::kRegStartMenuInternet); 200 std::wstring reg_key(ShellUtil::kRegStartMenuInternet);
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 } 433 }
434 return result; 434 return result;
435 } 435 }
436 436
437 // This method checks if Chrome is currently running or if the user has 437 // This method checks if Chrome is currently running or if the user has
438 // cancelled the uninstall operation by clicking Cancel on the confirmation 438 // cancelled the uninstall operation by clicking Cancel on the confirmation
439 // box that Chrome pops up. 439 // box that Chrome pops up.
440 InstallStatus IsChromeActiveOrUserCancelled( 440 InstallStatus IsChromeActiveOrUserCancelled(
441 const InstallerState& installer_state, 441 const InstallerState& installer_state,
442 const Product& product) { 442 const Product& product) {
443 int32 exit_code = ResultCodes::NORMAL_EXIT; 443 int32 exit_code = content::RESULT_CODE_NORMAL_EXIT;
444 CommandLine options(CommandLine::NO_PROGRAM); 444 CommandLine options(CommandLine::NO_PROGRAM);
445 options.AppendSwitch(installer::switches::kUninstall); 445 options.AppendSwitch(installer::switches::kUninstall);
446 446
447 // Here we want to save user from frustration (in case of Chrome crashes) 447 // Here we want to save user from frustration (in case of Chrome crashes)
448 // and continue with the uninstallation as long as chrome.exe process exit 448 // and continue with the uninstallation as long as chrome.exe process exit
449 // code is NOT one of the following: 449 // code is NOT one of the following:
450 // - UNINSTALL_CHROME_ALIVE - chrome.exe is currently running 450 // - UNINSTALL_CHROME_ALIVE - chrome.exe is currently running
451 // - UNINSTALL_USER_CANCEL - User cancelled uninstallation 451 // - UNINSTALL_USER_CANCEL - User cancelled uninstallation
452 // - HUNG - chrome.exe was killed by HuntForZombieProcesses() (until we can 452 // - HUNG - chrome.exe was killed by HuntForZombieProcesses() (until we can
453 // give this method some brains and not kill chrome.exe launched 453 // give this method some brains and not kill chrome.exe launched
454 // by us, we will not uninstall if we get this return code). 454 // by us, we will not uninstall if we get this return code).
455 VLOG(1) << "Launching Chrome to do uninstall tasks."; 455 VLOG(1) << "Launching Chrome to do uninstall tasks.";
456 if (product.LaunchChromeAndWait(installer_state.target_path(), options, 456 if (product.LaunchChromeAndWait(installer_state.target_path(), options,
457 &exit_code)) { 457 &exit_code)) {
458 VLOG(1) << "chrome.exe launched for uninstall confirmation returned: " 458 VLOG(1) << "chrome.exe launched for uninstall confirmation returned: "
459 << exit_code; 459 << exit_code;
460 if ((exit_code == ResultCodes::UNINSTALL_CHROME_ALIVE) || 460 if ((exit_code == chrome::RESULT_CODE_UNINSTALL_CHROME_ALIVE) ||
461 (exit_code == ResultCodes::UNINSTALL_USER_CANCEL) || 461 (exit_code == chrome::RESULT_CODE_UNINSTALL_USER_CANCEL) ||
462 (exit_code == ResultCodes::HUNG)) 462 (exit_code == chrome::RESULT_CODE_HUNG))
463 return installer::UNINSTALL_CANCELLED; 463 return installer::UNINSTALL_CANCELLED;
464 464
465 if (exit_code == ResultCodes::UNINSTALL_DELETE_PROFILE) 465 if (exit_code == chrome::RESULT_CODE_UNINSTALL_DELETE_PROFILE)
466 return installer::UNINSTALL_DELETE_PROFILE; 466 return installer::UNINSTALL_DELETE_PROFILE;
467 } else { 467 } else {
468 PLOG(ERROR) << "Failed to launch chrome.exe for uninstall confirmation."; 468 PLOG(ERROR) << "Failed to launch chrome.exe for uninstall confirmation.";
469 } 469 }
470 470
471 return installer::UNINSTALL_CONFIRMED; 471 return installer::UNINSTALL_CONFIRMED;
472 } 472 }
473 473
474 bool ShouldDeleteProfile(const InstallerState& installer_state, 474 bool ShouldDeleteProfile(const InstallerState& installer_state,
475 const CommandLine& cmd_line, InstallStatus status, 475 const CommandLine& cmd_line, InstallStatus status,
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 858
859 // Try and delete the preserved local state once the post-install 859 // Try and delete the preserved local state once the post-install
860 // operations are complete. 860 // operations are complete.
861 if (!backup_state_file.empty()) 861 if (!backup_state_file.empty())
862 file_util::Delete(backup_state_file, false); 862 file_util::Delete(backup_state_file, false);
863 863
864 return ret; 864 return ret;
865 } 865 }
866 866
867 } // namespace installer 867 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698