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

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

Issue 22382007: On user-level Chrome self-destruct, make user-created shortcuts target system-level chrome.exe. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync. Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/installer/util/shell_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // 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 <windows.h> 9 #include <windows.h>
10 10
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 321 }
322 } 322 }
323 323
324 if (kill) { 324 if (kill) {
325 VLOG(1) << installer::kChromeFrameHelperExe << " hung. Killing."; 325 VLOG(1) << installer::kChromeFrameHelperExe << " hung. Killing.";
326 base::CleanupProcesses(installer::kChromeFrameHelperExe, base::TimeDelta(), 326 base::CleanupProcesses(installer::kChromeFrameHelperExe, base::TimeDelta(),
327 content::RESULT_CODE_HUNG, NULL); 327 content::RESULT_CODE_HUNG, NULL);
328 } 328 }
329 } 329 }
330 330
331 // Updates shortcuts to |old_target_exe| to target |new_target_exe| instead. If
332 // |require_args| is set, then only updates shortcuts with non-empty targets.
333 void RetargetShortcuts(const InstallerState& installer_state,
grt (UTC plus 2) 2013/09/04 03:50:36 since this only makes sense for a self-destruct, w
huangs 2013/09/04 14:48:39 Done. Also added blurb on function comment.
334 const Product& product,
335 const base::FilePath& old_target_exe,
336 const base::FilePath& new_target_exe,
337 bool require_args) {
338 BrowserDistribution* dist = product.distribution();
339 ShellUtil::ShellChange install_level = installer_state.system_install() ?
340 ShellUtil::SYSTEM_LEVEL : ShellUtil::CURRENT_USER;
341 ShellUtil::ShortcutProperties updated_properties(install_level);
342 updated_properties.set_target(new_target_exe);
343
344 VLOG(1) << "Retargeting Desktop shortcuts.";
345 if (!ShellUtil::UpdateShortcuts(ShellUtil::SHORTCUT_LOCATION_DESKTOP, dist,
346 install_level, old_target_exe, require_args,
347 updated_properties)) {
348 LOG(WARNING) << "Failed to retarget Desktop shortcuts.";
349 }
350
351 VLOG(1) << "Retargeting Quick Launch shortcuts.";
352 if (!ShellUtil::UpdateShortcuts(ShellUtil::SHORTCUT_LOCATION_QUICK_LAUNCH,
353 dist, install_level, old_target_exe,
354 require_args, updated_properties)) {
355 LOG(WARNING) << "Failed to retarget Quick Launch shortcuts.";
356 }
357
358 VLOG(1) << "Retargeting Start Menu shortcuts.";
359 if (!ShellUtil::UpdateShortcuts(ShellUtil::SHORTCUT_LOCATION_START_MENU, dist,
360 install_level, old_target_exe, require_args,
361 updated_properties)) {
362 LOG(WARNING) << "Failed to retarget Start Menu shortcuts.";
363 }
364
365 // Retarget pinned-to-taskbar shortcuts that point to |chrome_exe|.
366 if (!ShellUtil::UpdateShortcuts(ShellUtil::SHORTCUT_LOCATION_TASKBAR_PINS,
367 dist, ShellUtil::CURRENT_USER, old_target_exe,
368 require_args, updated_properties)) {
369 LOG(WARNING) << "Failed to retarget taskbar shortcuts at user-level.";
370 }
371
372 // Retarget the folder of secondary tiles from the start screen for |dist|.
373 if (!ShellUtil::UpdateShortcuts(ShellUtil::SHORTCUT_LOCATION_APP_SHORTCUTS,
374 dist, install_level, old_target_exe,
375 require_args, updated_properties)) {
376 LOG(WARNING) << "Failed to retarget start-screen shortcuts.";
377 }
378 }
379
331 // Deletes shortcuts at |install_level| from Start menu, Desktop, 380 // Deletes shortcuts at |install_level| from Start menu, Desktop,
332 // Quick Launch, taskbar, and secondary tiles on the Start Screen (Win8+). 381 // Quick Launch, taskbar, and secondary tiles on the Start Screen (Win8+).
333 // Only shortcuts pointing to |target_exe| will be removed. 382 // Only shortcuts pointing to |target_exe| will be removed.
334 void DeleteShortcuts(const InstallerState& installer_state, 383 void DeleteShortcuts(const InstallerState& installer_state,
335 const Product& product, 384 const Product& product,
336 const base::FilePath& target_exe) { 385 const base::FilePath& target_exe) {
337 BrowserDistribution* dist = product.distribution(); 386 BrowserDistribution* dist = product.distribution();
338 387
339 // The per-user shortcut for this user, if present on a system-level install, 388 // The per-user shortcut for this user, if present on a system-level install,
340 // has already been deleted in chrome_browser_main_win.cc::DoUninstallTasks(). 389 // has already been deleted in chrome_browser_main_win.cc::DoUninstallTasks().
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 ClearRlzProductState(); 1178 ClearRlzProductState();
1130 // Delete the key that delegate_execute might make. 1179 // Delete the key that delegate_execute might make.
1131 if (base::win::GetVersion() >= base::win::VERSION_WIN8) { 1180 if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
1132 InstallUtil::DeleteRegistryKey(HKEY_CURRENT_USER, 1181 InstallUtil::DeleteRegistryKey(HKEY_CURRENT_USER,
1133 chrome::kMetroRegistryPath); 1182 chrome::kMetroRegistryPath);
1134 } 1183 }
1135 1184
1136 auto_launch_util::DisableAllAutoStartFeatures( 1185 auto_launch_util::DisableAllAutoStartFeatures(
1137 ASCIIToUTF16(chrome::kInitialProfile)); 1186 ASCIIToUTF16(chrome::kInitialProfile));
1138 1187
1188 // Self-destruct flow: removing user-level Chrome because system-level
1189 // Chrome exists.
1190 if (cmd_line.HasSwitch(installer::switches::kSelfDestruct) &&
1191 !installer_state.system_install()) {
1192 const base::FilePath system_chrome_path(
1193 GetChromeInstallPath(true, browser_dist).
1194 Append(installer::kChromeExe));
1195 VLOG(1) << "Retargeting user-generated Chrome shortcuts.";
1196 if (base::PathExists(system_chrome_path)) {
1197 // Retarget all user-generated shortcuts to user-level chrome.exe to
1198 // system-level chrome.exe. Heuristic: consider only shortcuts tha have
grt (UTC plus 2) 2013/09/04 03:50:36 tha -> that
huangs 2013/09/04 14:48:39 Done.
1199 // non-empty args. Therefore the main user-level chrome.exe will not get
1200 // retarged, and will get deleted by DeleteShortcuts() below.
1201 RetargetShortcuts(installer_state, product, base::FilePath(chrome_exe),
1202 system_chrome_path, true);
1203 } else {
1204 VLOG(1) << "Retarget failed: system-level Chrome not found.";
1205 }
1206 }
1207
1139 DeleteShortcuts(installer_state, product, base::FilePath(chrome_exe)); 1208 DeleteShortcuts(installer_state, product, base::FilePath(chrome_exe));
1140 1209
1141 } else if (product.is_chrome_app_host()) { 1210 } else if (product.is_chrome_app_host()) {
1142 const base::FilePath app_host_exe( 1211 const base::FilePath app_host_exe(
1143 installer_state.target_path().Append(installer::kChromeAppHostExe)); 1212 installer_state.target_path().Append(installer::kChromeAppHostExe));
1144 DeleteShortcuts(installer_state, product, app_host_exe); 1213 DeleteShortcuts(installer_state, product, app_host_exe);
1145 } 1214 }
1146 1215
1147 // Delete the registry keys (Uninstall key and Version key). 1216 // Delete the registry keys (Uninstall key and Version key).
1148 HKEY reg_root = installer_state.root_key(); 1217 HKEY reg_root = installer_state.root_key();
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 // deletion unconditionally. If they are not empty, the session manager 1496 // deletion unconditionally. If they are not empty, the session manager
1428 // will not delete them on reboot. 1497 // will not delete them on reboot.
1429 ScheduleParentAndGrandparentForDeletion(target_path); 1498 ScheduleParentAndGrandparentForDeletion(target_path);
1430 } else if (DeleteApplicationProductAndVendorDirectories(target_path) == 1499 } else if (DeleteApplicationProductAndVendorDirectories(target_path) ==
1431 installer::DELETE_FAILED) { 1500 installer::DELETE_FAILED) {
1432 *uninstall_status = installer::UNINSTALL_FAILED; 1501 *uninstall_status = installer::UNINSTALL_FAILED;
1433 } 1502 }
1434 } 1503 }
1435 1504
1436 } // namespace installer 1505 } // namespace installer
OLDNEW
« no previous file with comments | « no previous file | chrome/installer/util/shell_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698