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

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

Issue 10836247: Refactor ShellUtil shortcut code -- single multi-purpose methods as opposed to many slighlty diffe… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix shell_util_unittests.cc Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/installer/setup/install.cc
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index ffd0f2b055db97a726f85846a1b7f13a0c8d5437..f9d4f2a133c3154a6833a3c31fd512fec5fc9265 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -265,9 +265,8 @@ void CreateOrUpdateStartMenuAndTaskbarShortcuts(
DCHECK(product.is_chrome());
// Information used for all shortcut types
- BrowserDistribution* browser_dist = product.distribution();
- const string16 product_name(browser_dist->GetAppShortCutName());
- const string16 product_desc(browser_dist->GetAppDescription());
+ BrowserDistribution* dist = product.distribution();
+ const string16 product_desc(dist->GetAppDescription());
// Chrome link target
FilePath chrome_exe(
installer_state.target_path().Append(installer::kChromeExe));
@@ -275,44 +274,15 @@ void CreateOrUpdateStartMenuAndTaskbarShortcuts(
bool create_always = ((options & ShellUtil::SHORTCUT_CREATE_ALWAYS) != 0);
const char* operation = create_always ? "Creating" : "Updating";
- // Create Start Menu shortcuts.
- // The location of Start->Programs->Google Chrome folder
- FilePath start_menu_folder_path;
- int dir_enum = installer_state.system_install() ?
- base::DIR_COMMON_START_MENU : base::DIR_START_MENU;
- if (!PathService::Get(dir_enum, &start_menu_folder_path)) {
- LOG(ERROR) << "Failed to get start menu path.";
- return;
- }
-
- start_menu_folder_path = start_menu_folder_path.Append(product_name);
-
- // Create/update Chrome link (points to chrome.exe) & Uninstall Chrome link
- // (which points to setup.exe) under |start_menu_folder_path|.
-
- // Chrome link (launches Chrome)
- FilePath chrome_link(start_menu_folder_path.Append(product_name + L".lnk"));
-
- if (create_always && !file_util::PathExists(start_menu_folder_path))
- file_util::CreateDirectoryW(start_menu_folder_path);
-
- VLOG(1) << operation << " shortcut to " << chrome_exe.value() << " at "
- << chrome_link.value();
- if (!ShellUtil::UpdateChromeShortcut(browser_dist, chrome_exe.value(),
- chrome_link.value(), string16(), product_desc, chrome_exe.value(),
- browser_dist->GetIconIndex(), options)) {
- LOG(WARNING) << operation << " shortcut at " << chrome_link.value()
- << " failed.";
- } else if (create_always &&
- base::win::GetVersion() >= base::win::VERSION_WIN7) {
- // If the Start Menu shortcut was successfully created and |create_always|,
- // proceed to pin the Start Menu shortcut to the taskbar on Win7+.
- VLOG(1) << "Pinning new shortcut at " << chrome_link.value()
- << " to taskbar";
- if (!file_util::TaskbarPinShortcutLink(chrome_link.value().c_str())) {
- LOG(ERROR) << "Failed to pin shortcut to taskbar: "
- << chrome_link.value();
- }
+ VLOG(1) << operation << " Start Menu shortcut for " << chrome_exe.value()
+ << ((create_always &&
+ base::win::GetVersion() >= base::win::VERSION_WIN7) ?
+ " and pinning it to the taskbar." : ".");
+ if (!ShellUtil::CreateOrUpdateChromeShortcut(
+ ShellUtil::SHORTCUT_START_MENU, dist, chrome_exe.value(),
+ product_desc, string16(), string16(), chrome_exe.value(),
+ dist->GetIconIndex(), options | ShellUtil::SHORTCUT_PIN_TO_TASKBAR)) {
+ LOG(WARNING) << operation << " Start Menu shortcut (or pinning it) failed.";
}
// Create/update uninstall link if we are not an MSI install. MSI
@@ -321,20 +291,16 @@ void CreateOrUpdateStartMenuAndTaskbarShortcuts(
// TODO(robertshield): We could add a shortcut to msiexec /X {GUID} here.
if (!installer_state.is_msi()) {
// Uninstall Chrome link
- FilePath uninstall_link(start_menu_folder_path.Append(
- browser_dist->GetUninstallLinkName() + L".lnk"));
-
CommandLine arguments(CommandLine::NO_PROGRAM);
AppendUninstallCommandLineFlags(installer_state, product, &arguments);
- VLOG(1) << operation << " uninstall link at " << uninstall_link.value();
- if (!file_util::CreateOrUpdateShortcutLink(setup_exe.value().c_str(),
- uninstall_link.value().c_str(), NULL,
- arguments.GetCommandLineString().c_str(), NULL,
- setup_exe.value().c_str(), 0, NULL,
- create_always ? file_util::SHORTCUT_CREATE_ALWAYS :
- file_util::SHORTCUT_NO_OPTIONS)) {
- LOG(WARNING) << operation << " uninstall link at "
- << uninstall_link.value() << " failed.";
+ VLOG(1) << operation << " uninstall link to " << setup_exe.value()
+ << arguments.GetCommandLineString();
+ if (!ShellUtil::CreateOrUpdateChromeShortcut(
+ ShellUtil::SHORTCUT_START_MENU_UNINSTALL, dist,
+ setup_exe.value().c_str(), string16(), string16(),
+ arguments.GetCommandLineString().c_str(), setup_exe.value().c_str(),
+ 0, options)) {
+ LOG(WARNING) << operation << " uninstall link failed.";
}
}
}
@@ -347,9 +313,8 @@ void CreateOrUpdateDesktopAndQuickLaunchShortcuts(
DCHECK(product.is_chrome());
// Information used for all shortcut types
- BrowserDistribution* browser_dist = product.distribution();
- const string16 product_name(browser_dist->GetAppShortCutName());
- const string16 product_desc(browser_dist->GetAppDescription());
+ BrowserDistribution* dist = product.distribution();
+ const string16 product_desc(dist->GetAppDescription());
// Chrome link target
FilePath chrome_exe(
installer_state.target_path().Append(installer::kChromeExe));
@@ -357,28 +322,40 @@ void CreateOrUpdateDesktopAndQuickLaunchShortcuts(
bool create_always = ((options & ShellUtil::SHORTCUT_CREATE_ALWAYS) != 0);
const char* operation = create_always ? "Creating" : "Updating";
- ShellUtil::ShellChange desktop_level = ShellUtil::CURRENT_USER;
- int quick_launch_levels = ShellUtil::CURRENT_USER;
- if (installer_state.system_install()) {
- desktop_level = ShellUtil::SYSTEM_LEVEL;
- quick_launch_levels |= ShellUtil::SYSTEM_LEVEL;
- }
-
VLOG(1) << operation << " desktop shortcut for " << chrome_exe.value();
- if (!ShellUtil::CreateChromeDesktopShortcut(
- browser_dist, chrome_exe.value(), product_desc, string16(),
- string16(), chrome_exe.value(), browser_dist->GetIconIndex(),
- desktop_level, options)) {
+ if (!ShellUtil::CreateOrUpdateChromeShortcut(
+ ShellUtil::SHORTCUT_DESKTOP,
+ dist, chrome_exe.value(), product_desc, string16(),
+ string16(), chrome_exe.value(), dist->GetIconIndex(), options)) {
LOG(WARNING) << operation << " desktop shortcut for " << chrome_exe.value()
<< " failed.";
}
VLOG(1) << operation << " quick launch shortcut for " << chrome_exe.value();
- if (!ShellUtil::CreateChromeQuickLaunchShortcut(
- browser_dist, chrome_exe.value(), quick_launch_levels, options)) {
+ if (!ShellUtil::CreateOrUpdateChromeShortcut(
+ ShellUtil::SHORTCUT_QUICK_LAUNCH,
+ dist, chrome_exe.value(), product_desc, string16(),
+ string16(), chrome_exe.value(), dist->GetIconIndex(), options)) {
LOG(WARNING) << operation << " quick launch shortcut for "
<< chrome_exe.value() << " failed.";
}
+
+ if (installer_state.system_install() &&
+ (options & ShellUtil::SHORTCUT_CREATE_ALWAYS)) {
+ // On system-level installs, also create the user-level quick launch
+ // shortcut for the user running the install.
+ uint32 user_options = options & !ShellUtil::SHORTCUT_SYSTEM_LEVEL;
+ VLOG(1) << operation << " user-level quick launch shortcut for "
+ << chrome_exe.value();
+ if (!ShellUtil::CreateOrUpdateChromeShortcut(
+ ShellUtil::SHORTCUT_QUICK_LAUNCH,
+ dist, chrome_exe.value(), product_desc, string16(),
+ string16(), chrome_exe.value(), dist->GetIconIndex(),
+ user_options)) {
+ LOG(WARNING) << operation << " user-level quick launch shortcut for "
+ << chrome_exe.value() << " failed.";
+ }
+ }
}
void RegisterChromeOnMachine(const InstallerState& installer_state,
@@ -500,6 +477,10 @@ InstallStatus InstallOrUpdateProduct(
// the user).
shortcut_options |= ShellUtil::SHORTCUT_CREATE_ALWAYS;
}
+
+ if (installer_state.system_install())
+ shortcut_options |= ShellUtil::SHORTCUT_SYSTEM_LEVEL;
+
FilePath setup_exe(installer_state.GetInstallerDirectory(new_version)
.Append(setup_path.BaseName()));
CreateOrUpdateStartMenuAndTaskbarShortcuts(

Powered by Google App Engine
This is Rietveld 408576698