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

Unified Diff: chrome/installer/util/shell_util.cc

Issue 14031025: Implementing unified Chrome / App Launcher flow, and migrating old stand-alone App Launcher. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removing Start Menu root stuff; cleanups. Created 7 years, 7 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/util/shell_util.cc
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index 273c7f0324170eda2e0fbd7b474fd1c4ac6dc724..af18176cba976d853c544bc50c9b8259ec5dc460 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -1207,21 +1207,23 @@ bool ShortcutOpDelete(const base::FilePath& shortcut_path) {
bool ShortcutOpUpdate(const base::win::ShortcutProperties& shortcut_properties,
const base::FilePath& shortcut_path) {
bool ret = base::win::CreateOrUpdateShortcutLink(
- shortcut_path, shortcut_properties, base::win::SHORTCUT_REPLACE_EXISTING);
+ shortcut_path, shortcut_properties, base::win::SHORTCUT_UPDATE_EXISTING);
LOG_IF(ERROR, !ret) << "Failed to update " << shortcut_path.value();
return ret;
}
// {|location|, |dist|, |level|} determine |shortcut_folder|.
-// Applies |shortcut_operation| to each shortcut in |shortcut_folder| that
-// targets |target_exe|.
+// Applies |shortcut_operation| to shortcuts in |shortcut_folder| that
+// targets |target_exe|, and have filenames matching |filename_filter|.
// Returns true if all operations are successful. All intended operations are
// attempted even if failures occur.
-bool BatchShortcutAction(const FileOperationCallback& shortcut_operation,
- ShellUtil::ShortcutLocation location,
- BrowserDistribution* dist,
- ShellUtil::ShellChange level,
- const base::FilePath& target_exe) {
+bool BatchShortcutActionFilteredByName(
+ const FileOperationCallback& shortcut_operation,
+ ShellUtil::ShortcutLocation location,
+ BrowserDistribution* dist,
+ ShellUtil::ShellChange level,
+ const base::FilePath& target_exe,
+ const string16& filename_filter) {
DCHECK(!shortcut_operation.is_null());
base::FilePath shortcut_folder;
if (!ShellUtil::GetShortcutPath(location, dist, level, &shortcut_folder)) {
@@ -1233,24 +1235,35 @@ bool BatchShortcutAction(const FileOperationCallback& shortcut_operation,
InstallUtil::ProgramCompare target_compare(target_exe);
file_util::FileEnumerator enumerator(
shortcut_folder, false, file_util::FileEnumerator::FILES,
- string16(L"*") + installer::kLnkExt);
- base::FilePath target_path;
- for (base::FilePath shortcut_path = enumerator.Next();
- !shortcut_path.empty();
- shortcut_path = enumerator.Next()) {
- if (base::win::ResolveShortcut(shortcut_path, &target_path, NULL)) {
- if (target_compare.EvaluatePath(target_path) &&
- !shortcut_operation.Run(shortcut_path)) {
+ filename_filter);
+ base::FilePath original_target_exe;
+ for (base::FilePath shortcut_file = enumerator.Next();
+ !shortcut_file.empty();
+ shortcut_file = enumerator.Next()) {
+ if (base::win::ResolveShortcut(shortcut_file, &original_target_exe, NULL)) {
+ if (target_compare.EvaluatePath(original_target_exe) &&
+ !shortcut_operation.Run(shortcut_file)) {
success = false;
}
} else {
- LOG(ERROR) << "Cannot resolve shortcut at " << shortcut_path.value();
+ LOG(ERROR) << "Cannot resolve shortcut at " << shortcut_file.value();
success = false;
}
}
return success;
}
+// Adaptor to FilteredBatchShortcutAction() to process all files.
+bool BatchShortcutAction(const FileOperationCallback& shortcut_operation,
+ ShellUtil::ShortcutLocation location,
+ BrowserDistribution* dist,
+ ShellUtil::ShellChange level,
+ const base::FilePath& target_exe) {
+ return BatchShortcutActionFilteredByName(
+ shortcut_operation, location, dist, level, target_exe,
+ string16(L"*") + installer::kLnkExt);
+}
+
// Removes folder spsecified by {|location|, |dist|, |level|}.
bool RemoveShortcutFolder(ShellUtil::ShortcutLocation location,
BrowserDistribution* dist,
@@ -1397,7 +1410,7 @@ bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location,
}
if (add_folder_for_dist)
- *path = path->Append(dist->GetAppShortCutName());
+ *path = path->Append(dist->GetAppShortCutFolderName());
return true;
}
@@ -2020,6 +2033,26 @@ bool ShellUtil::UpdateShortcuts(
location, dist, level, target_exe);
}
+// static
+bool ShellUtil::UpdateShortcutsFilteredByName(
+ ShellUtil::ShortcutLocation location,
+ BrowserDistribution* dist,
+ ShellChange level,
+ const string16& name_filter,
+ const base::FilePath& target_exe,
+ const ShellUtil::ShortcutProperties& properties) {
+ DCHECK(EndsWith(name_filter, installer::kLnkExt, false));
+
+ if (!ShellUtil::ShortcutLocationIsSupported(location))
+ return true; // Vacuous success.
+
+ base::win::ShortcutProperties shortcut_properties(
+ TranslateShortcutProperties(properties));
+ return BatchShortcutActionFilteredByName(
+ base::Bind(&ShortcutOpUpdate, shortcut_properties),
+ location, dist, level, target_exe, name_filter);
+}
+
bool ShellUtil::GetUserSpecificRegistrySuffix(string16* suffix) {
// Use a thread-safe cache for the user's suffix.
static base::LazyInstance<UserSpecificRegistrySuffix>::Leaky suffix_instance =

Powered by Google App Engine
This is Rietveld 408576698