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

Unified Diff: base/win/shortcut.cc

Issue 108193019: Installer: adding ResolveShortcutProperties(); updating shortcut icons during shortcut migration. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removing 'shortcut update' flow; adding unit tests for shortcut retargeting; refactoring unittests. Created 7 years 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: base/win/shortcut.cc
diff --git a/base/win/shortcut.cc b/base/win/shortcut.cc
index 57a93dc6524e1540cad465eb639482ed6f6e90c2..f69592d6c2bac403631544bef11f96c2ce9fde26 100644
--- a/base/win/shortcut.cc
+++ b/base/win/shortcut.cc
@@ -172,52 +172,82 @@ bool CreateOrUpdateShortcutLink(const FilePath& shortcut_path,
return succeeded;
}
-bool ResolveShortcut(const FilePath& shortcut_path,
- FilePath* target_path,
- string16* args) {
+bool ResolveShortcutProperties(const FilePath& shortcut_path,
+ uint32 options,
+ ShortcutProperties* properties) {
+ DCHECK(properties);
+ DCHECK(options);
gab 2014/01/02 15:51:46 Switch order to match argument order (and/or group
huangs 2014/01/02 19:58:22 Going with && for implicit cast to bool.
base::ThreadRestrictions::AssertIOAllowed();
- HRESULT result;
ScopedComPtr<IShellLink> i_shell_link;
// Get pointer to the IShellLink interface.
- result = i_shell_link.CreateInstance(CLSID_ShellLink, NULL,
- CLSCTX_INPROC_SERVER);
- if (FAILED(result))
+ if (FAILED(i_shell_link.CreateInstance(CLSID_ShellLink, NULL,
+ CLSCTX_INPROC_SERVER))) {
return false;
+ }
ScopedComPtr<IPersistFile> persist;
// Query IShellLink for the IPersistFile interface.
- result = persist.QueryFrom(i_shell_link);
- if (FAILED(result))
+ if (FAILED(persist.QueryFrom(i_shell_link)))
return false;
// Load the shell link.
- result = persist->Load(shortcut_path.value().c_str(), STGM_READ);
- if (FAILED(result))
+ if (FAILED(persist->Load(shortcut_path.value().c_str(), STGM_READ)))
return false;
+ properties->options = 0;
gab 2014/01/02 15:51:46 Empty line below (otherwise it feels like this is
huangs 2014/01/02 19:58:22 Done.
WCHAR temp[MAX_PATH];
- if (target_path) {
+ if (options & ShortcutProperties::PROPERTIES_TARGET) {
// Try to find the target of a shortcut.
- result = i_shell_link->Resolve(0, SLR_NO_UI | SLR_NOSEARCH);
- if (FAILED(result))
+ if (FAILED(i_shell_link->Resolve(0, SLR_NO_UI | SLR_NOSEARCH)))
return false;
- result = i_shell_link->GetPath(temp, MAX_PATH, NULL, SLGP_UNCPRIORITY);
- if (FAILED(result))
+ if (FAILED(i_shell_link->GetPath(temp, MAX_PATH, NULL, SLGP_UNCPRIORITY)))
return false;
- *target_path = FilePath(temp);
+ properties->set_target(FilePath(temp));
}
- if (args) {
- result = i_shell_link->GetArguments(temp, MAX_PATH);
- if (FAILED(result))
+ if (options & ShortcutProperties::PROPERTIES_ARGUMENTS) {
+ if (FAILED(i_shell_link->GetArguments(temp, MAX_PATH)))
return false;
- *args = string16(temp);
+ properties->set_arguments(string16(temp));
}
+
+ if (options & ShortcutProperties::PROPERTIES_ICON) {
+ int temp_index;
+ if (FAILED(i_shell_link->GetIconLocation(temp, MAX_PATH, &temp_index)))
+ return false;
+
+ properties->set_icon(FilePath(temp), temp_index);
+ }
+
+ // Implement other options if the need arise.
gab 2014/01/02 15:51:46 Add to the comment in the header to mention which
huangs 2014/01/02 19:58:22 I realized that base\test\test_shortcut_win.cc: Va
+
+ return true;
+}
+
+bool ResolveShortcut(const FilePath& shortcut_path,
+ FilePath* target_path,
+ string16* args) {
+ uint32 options = 0;
+ if (target_path)
+ options |= ShortcutProperties::PROPERTIES_TARGET;
+ if (args)
+ options |= ShortcutProperties::PROPERTIES_ARGUMENTS;
+ if (!options)
+ return true; // Vacuous success if we want nothing.
gab 2014/01/02 15:51:46 I don't think it makes sense to call ResolveShortc
huangs 2014/01/02 19:58:22 Done, but adding DCHECK in this routine.
+
+ ShortcutProperties p;
gab 2014/01/02 15:51:46 s/p/properties
huangs 2014/01/02 19:58:22 Done.
+ if (!ResolveShortcutProperties(shortcut_path, options, &p))
+ return false;
+
+ if (target_path)
+ *target_path = p.target;
+ if (args)
+ *args = p.arguments;
return true;
}

Powered by Google App Engine
This is Rietveld 408576698