| Index: chrome/installer/util/shell_util.cc
|
| diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
|
| index a753f802a160ddf145e294d92f9ec2bf4aed136b..cd21044571a7bb435b7035f360e50c57f5686ca1 100644
|
| --- a/chrome/installer/util/shell_util.cc
|
| +++ b/chrome/installer/util/shell_util.cc
|
| @@ -1573,7 +1573,8 @@ bool RemoveShortcutFolderIfEmpty(ShellUtil::ShortcutLocation location,
|
| BrowserDistribution* dist,
|
| ShellUtil::ShellChange level) {
|
| // Explicitly whitelist locations, since accidental calls can be very harmful.
|
| - if (location != ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_DIR &&
|
| + if (location !=
|
| + ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED &&
|
| location != ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR &&
|
| location != ShellUtil::SHORTCUT_LOCATION_APP_SHORTCUTS) {
|
| NOTREACHED();
|
| @@ -1659,7 +1660,7 @@ bool ShellUtil::ShortcutLocationIsSupported(
|
| case SHORTCUT_LOCATION_DESKTOP: // Falls through.
|
| case SHORTCUT_LOCATION_QUICK_LAUNCH: // Falls through.
|
| case SHORTCUT_LOCATION_START_MENU_ROOT: // Falls through.
|
| - case SHORTCUT_LOCATION_START_MENU_CHROME_DIR: // Falls through.
|
| + case SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED: // Falls through.
|
| case SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR:
|
| return true;
|
| case SHORTCUT_LOCATION_TASKBAR_PINS:
|
| @@ -1693,7 +1694,7 @@ bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location,
|
| dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU :
|
| base::DIR_COMMON_START_MENU;
|
| break;
|
| - case SHORTCUT_LOCATION_START_MENU_CHROME_DIR:
|
| + case SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED:
|
| dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU :
|
| base::DIR_COMMON_START_MENU;
|
| folder_to_append = dist->GetStartMenuShortcutSubfolder(
|
| @@ -1728,6 +1729,38 @@ bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location,
|
| return true;
|
| }
|
|
|
| +bool ShellUtil::MoveExistingShortcut(
|
| + ShellUtil::ShortcutLocation old_location,
|
| + ShellUtil::ShortcutLocation new_location,
|
| + BrowserDistribution* dist,
|
| + ShellUtil::ShellChange shortcut_level,
|
| + const ShellUtil::ShortcutProperties& properties) {
|
| + // Explicitly whitelist locations to which this is applicable.
|
| + if (old_location != SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED ||
|
| + new_location != SHORTCUT_LOCATION_START_MENU_ROOT) {
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| +
|
| + base::string16 shortcut_name(
|
| + ExtractShortcutNameFromProperties(dist, properties));
|
| +
|
| + base::FilePath old_shortcut_path;
|
| + base::FilePath new_shortcut_path;
|
| + ShellUtil::GetShortcutPath(
|
| + old_location, dist, shortcut_level, &old_shortcut_path);
|
| + ShellUtil::GetShortcutPath(
|
| + new_location, dist, shortcut_level, &new_shortcut_path);
|
| + old_shortcut_path = old_shortcut_path.Append(shortcut_name);
|
| + new_shortcut_path = new_shortcut_path.Append(shortcut_name);
|
| +
|
| + bool result = !!::MoveFile(old_shortcut_path.value().c_str(),
|
| + new_shortcut_path.value().c_str());
|
| +
|
| + RemoveShortcutFolderIfEmpty(old_location, dist, shortcut_level);
|
| + return result;
|
| +}
|
| +
|
| bool ShellUtil::CreateOrUpdateShortcut(
|
| ShellUtil::ShortcutLocation location,
|
| BrowserDistribution* dist,
|
| @@ -1737,7 +1770,7 @@ bool ShellUtil::CreateOrUpdateShortcut(
|
| if (location != SHORTCUT_LOCATION_DESKTOP &&
|
| location != SHORTCUT_LOCATION_QUICK_LAUNCH &&
|
| location != SHORTCUT_LOCATION_START_MENU_ROOT &&
|
| - location != SHORTCUT_LOCATION_START_MENU_CHROME_DIR &&
|
| + location != SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED &&
|
| location != SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR) {
|
| NOTREACHED();
|
| return false;
|
| @@ -2406,7 +2439,7 @@ bool ShellUtil::RemoveShortcuts(ShellUtil::ShortcutLocation location,
|
| NULL);
|
| // Remove chrome-specific shortcut folders if they are now empty.
|
| if (success &&
|
| - (location == SHORTCUT_LOCATION_START_MENU_CHROME_DIR ||
|
| + (location == SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED ||
|
| location == SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR ||
|
| location == SHORTCUT_LOCATION_APP_SHORTCUTS)) {
|
| success = RemoveShortcutFolderIfEmpty(location, dist, level);
|
|
|