Chromium Code Reviews| Index: chrome/installer/util/shell_util.cc |
| diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc |
| index a5122d50ad4c3fa472a15585b3bbac1e020d3a8e..8477b8de81c91a7600f0bda1ee8db842559cec42 100644 |
| --- a/chrome/installer/util/shell_util.cc |
| +++ b/chrome/installer/util/shell_util.cc |
| @@ -1203,13 +1203,15 @@ typedef base::Callback<bool(const base::FilePath& /*shortcut_path*/, |
| ShortcutFilterCallback; |
| // FilterTargetEq is a shortcut filter that matches only shortcuts that have a |
| -// specific target. |
| +// specific target, and optionally matches shortcuts that have non-empty |
| +// arguments. |
| class FilterTargetEq { |
| public: |
| - explicit FilterTargetEq(const base::FilePath& desired_target_exe); |
| + FilterTargetEq(const base::FilePath& desired_target_exe, bool require_args); |
| // Returns true if filter rules are satisfied, i.e.: |
| - // - |target_path| matches |desired_target_compare_|. |
| + // - |target_path|'s target == |desired_target_compare_|, and |
| + // - |args| is non-empty (if |require_args_| == true). |
| bool Match(const base::FilePath& target_path, const string16& args) const; |
| // A convenience routine to create a callback to call Match(). |
| @@ -1219,14 +1221,22 @@ class FilterTargetEq { |
| private: |
| InstallUtil::ProgramCompare desired_target_compare_; |
| + |
| + bool require_args_; |
| }; |
| -FilterTargetEq::FilterTargetEq(const base::FilePath& desired_target_exe) |
| - : desired_target_compare_(desired_target_exe) {} |
| +FilterTargetEq::FilterTargetEq(const base::FilePath& desired_target_exe, |
| + bool require_args) |
| + : desired_target_compare_(desired_target_exe), |
| + require_args_(require_args) {} |
| bool FilterTargetEq::Match(const base::FilePath& target_path, |
| const string16& args) const { |
| - return desired_target_compare_.EvaluatePath(target_path); |
| + if (!desired_target_compare_.EvaluatePath(target_path)) |
| + return false; |
| + if (require_args_ && args.empty()) |
| + return false; |
| + return true; |
| } |
| ShortcutFilterCallback FilterTargetEq::AsShortcutFilterCallback() { |
| @@ -2042,7 +2052,7 @@ bool ShellUtil::RemoveShortcuts(ShellUtil::ShortcutLocation location, |
| if (!ShellUtil::ShortcutLocationIsSupported(location)) |
| return true; // Vacuous success. |
| - FilterTargetEq shortcut_filter(target_exe); |
| + FilterTargetEq shortcut_filter(target_exe, false); |
| // Main operation to apply to each shortcut in the directory specified. |
| ShortcutOperationCallback shortcut_operation( |
| location == SHORTCUT_LOCATION_TASKBAR_PINS ? |
| @@ -2064,11 +2074,12 @@ bool ShellUtil::UpdateShortcuts( |
| BrowserDistribution* dist, |
| ShellChange level, |
| const base::FilePath& target_exe, |
| + bool require_args, |
|
gab
2013/09/09 13:00:31
I don't see a case where setting |require_args| to
huangs
2013/09/11 19:02:52
The purpose of |require_args| is keep UpdateShortc
gab
2013/09/11 20:23:06
sgtm.
|
| const ShellUtil::ShortcutProperties& properties) { |
| if (!ShellUtil::ShortcutLocationIsSupported(location)) |
| return true; // Vacuous success. |
| - FilterTargetEq shortcut_filter(target_exe); |
| + FilterTargetEq shortcut_filter(target_exe, require_args); |
| ShortcutOperationCallback shortcut_operation( |
| base::Bind(&ShortcutOpUpdate, TranslateShortcutProperties(properties))); |
| return BatchShortcutAction(shortcut_filter.AsShortcutFilterCallback(), |