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

Unified Diff: chrome/installer/setup/uninstall.cc

Issue 11359013: Adding App Launcher shortcuts on install. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanups; adding DCHECK to ensure App Launcher-releated stuff are for user-level. Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/installer/setup/uninstall.cc
diff --git a/chrome/installer/setup/uninstall.cc b/chrome/installer/setup/uninstall.cc
index 2fb193b801d739f67c339aa1ae25dc8ecc1d9c93..62e2549e74a85172d3448ddb9744fccd8a12b33f 100644
--- a/chrome/installer/setup/uninstall.cc
+++ b/chrome/installer/setup/uninstall.cc
@@ -256,59 +256,78 @@ void CloseChromeFrameHelperProcess() {
}
}
-// This method deletes Chrome shortcut folder from Windows Start menu. It
-// checks system_uninstall to see if the shortcut is in all users start menu
-// or current user start menu.
-// We try to remove the standard desktop shortcut but if that fails we try
-// to remove the alternate desktop shortcut. Only one of them should be
-// present in a given install but at this point we don't know which one.
-// We remove all start screen secondary tiles by removing the folder Windows
-// uses to store this installation's tiles.
-void DeleteChromeShortcuts(const InstallerState& installer_state,
- const Product& product,
- const string16& chrome_exe) {
- if (!product.is_chrome()) {
- VLOG(1) << __FUNCTION__ " called for non-CHROME distribution";
- return;
- }
-
- BrowserDistribution* dist = product.distribution();
-
- // The per-user shortcut for this user, if present on a system-level install,
- // has already been deleted in chrome_browser_main_win.cc::DoUninstallTasks().
- ShellUtil::ShellChange install_level = installer_state.system_install() ?
- ShellUtil::SYSTEM_LEVEL : ShellUtil::CURRENT_USER;
-
+// Deletes shortcuts at |install_level| from Start menu, Desktop,
+// Quick Launch, and secondary tiles on the Start Screen (Win8+).
+// Only shortcuts pointing to |target| will be removed.
+void DeleteShortcutsCommon(ShellUtil::ShellChange install_level,
+ BrowserDistribution* dist,
+ const string16& target) {
VLOG(1) << "Deleting Desktop shortcut.";
if (!ShellUtil::RemoveChromeShortcut(
- ShellUtil::SHORTCUT_DESKTOP, dist, chrome_exe, install_level, NULL)) {
+ ShellUtil::SHORTCUT_DESKTOP, dist, target, install_level, NULL)) {
LOG(WARNING) << "Failed to delete Desktop shortcut.";
}
// Also try to delete the alternate desktop shortcut. It is not sufficient
// to do so upon failure of the above call as ERROR_FILE_NOT_FOUND on
// delete is considered success.
if (!ShellUtil::RemoveChromeShortcut(
- ShellUtil::SHORTCUT_DESKTOP, dist, chrome_exe, install_level,
+ ShellUtil::SHORTCUT_DESKTOP, dist, target, install_level,
&dist->GetAlternateApplicationName())) {
LOG(WARNING) << "Failed to delete alternate Desktop shortcut.";
}
VLOG(1) << "Deleting Quick Launch shortcut.";
if (!ShellUtil::RemoveChromeShortcut(
- ShellUtil::SHORTCUT_QUICK_LAUNCH, dist, chrome_exe, install_level,
+ ShellUtil::SHORTCUT_QUICK_LAUNCH, dist, target, install_level,
NULL)) {
LOG(WARNING) << "Failed to delete Quick Launch shortcut.";
}
VLOG(1) << "Deleting Start Menu shortcuts.";
if (!ShellUtil::RemoveChromeShortcut(
- ShellUtil::SHORTCUT_START_MENU, dist, chrome_exe, install_level,
+ ShellUtil::SHORTCUT_START_MENU, dist, target, install_level,
NULL)) {
LOG(WARNING) << "Failed to delete Start Menu shortcuts.";
}
- ShellUtil::RemoveChromeStartScreenShortcuts(product.distribution(),
- chrome_exe);
+ ShellUtil::RemoveChromeStartScreenShortcuts(dist, target);
+}
+
+// Deletes Chrome shortcuts as per DeleteShortcutsCommon().
+void DeleteChromeShortcuts(const InstallerState& installer_state,
+ const Product& product,
+ const string16& chrome_exe) {
+ if (!product.is_chrome()) {
+ VLOG(1) << __FUNCTION__ " called for non-Chrome distribution";
+ return;
+ }
+
+ VLOG(1) << "Deleting Chrome shortcuts.";
+
+ BrowserDistribution* dist = product.distribution();
+ // The per-user shortcut for this user, if present on a system-level install,
+ // has already been deleted in chrome_browser_main_win.cc::DoUninstallTasks().
+ ShellUtil::ShellChange install_level = installer_state.system_install() ?
+ ShellUtil::SYSTEM_LEVEL : ShellUtil::CURRENT_USER;
+ DeleteShortcutsCommon(install_level, dist, chrome_exe);
+}
+
+// Deletes App Launcher shortcuts as per DeleteShortcutsCommon().
+void DeleteAppLauncherShortcuts(const InstallerState& installer_state,
+ const Product& product,
+ const string16& app_host_exe) {
+ if (!product.is_chrome_app_host()) {
+ VLOG(1) << __FUNCTION__ " called for non-App Launcher distribution";
+ return;
+ }
+
+ VLOG(1) << "Deleting App Launcher shortcuts.";
+ ShellUtil::ShellChange install_level = installer_state.system_install() ?
+ ShellUtil::SYSTEM_LEVEL : ShellUtil::CURRENT_USER;
+
+ // Remove this check once we have system-level App Host.
+ DCHECK(install_level == ShellUtil::CURRENT_USER);
gab 2012/11/02 04:19:58 I find this weird... if you want to keep the above
erikwright (departed) 2012/11/02 04:31:01 There's presumably more code that would be needed
gab 2012/11/02 04:39:54 Well, no additional code would be required here th
erikwright (departed) 2012/11/02 04:48:39 If that's the case (I hadn't looked, assumed it wa
gab 2012/11/02 12:43:35 Well, thinking more about it, when you do implemen
grt (UTC plus 2) 2012/11/02 19:55:30 DCHECK_EQ
huangs 2012/11/02 21:05:10 Moved the check to the caller.
huangs 2012/11/02 21:05:10 Thanks (not applicable for this case any more thou
+ DeleteShortcutsCommon(install_level, product.distribution(), app_host_exe);
}
bool ScheduleParentAndGrandparentForDeletion(const FilePath& path) {
@@ -1053,6 +1072,13 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
}
}
+ if (product.is_chrome_app_host()) {
+ const string16 app_host_exe(installer_state
+ .target_path().Append(installer::kChromeAppHostExe).value());
gab 2012/11/02 04:19:58 nit: style dictates that either you wrap at the pa
huangs 2012/11/02 21:05:10 Done.
+ // Delete shortcuts from Start menu, Desktop, and Quick Launch.
+ DeleteAppLauncherShortcuts(installer_state, product, app_host_exe);
+ }
+
// Chrome is not in use so lets uninstall Chrome by deleting various files
// and registry entries. Here we will just make best effort and keep going
// in case of errors.
@@ -1067,7 +1093,7 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
auto_launch_util::DisableAllAutoStartFeatures(
ASCIIToUTF16(chrome::kInitialProfile));
- // First delete shortcuts from Start->Programs, Desktop & Quick Launch.
+ // First delete shortcuts from Start menu, Desktop, and Quick Launch.
gab 2012/11/02 04:19:58 Again, remove "First" as this is the only thing yo
huangs 2012/11/02 21:05:10 Done.
DeleteChromeShortcuts(installer_state, product, chrome_exe);
}

Powered by Google App Engine
This is Rietveld 408576698