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

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: Adding ResolveShortcutProperties() to read thumbnails; requiring old target to matchs icon to for i… 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..abfaec61ea611b78e2f15fbe9920118ab1142e47 100644
--- a/base/win/shortcut.cc
+++ b/base/win/shortcut.cc
@@ -172,9 +172,10 @@ 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* p) {
gab 2013/12/23 14:25:01 s/p/properties Chromium doesn't encourage abbrevi
huangs 2013/12/30 20:15:10 Done (also .h and comments).
+ DCHECK(p != NULL);
gab 2013/12/23 14:25:01 DCHECK(properties); (i.e. no need for "!= NULL")
huangs 2013/12/30 20:15:10 Done.
base::ThreadRestrictions::AssertIOAllowed();
HRESULT result;
@@ -197,8 +198,9 @@ bool ResolveShortcut(const FilePath& shortcut_path,
if (FAILED(result))
return false;
+ p->options = 0;
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))
@@ -208,16 +210,44 @@ bool ResolveShortcut(const FilePath& shortcut_path,
if (FAILED(result))
return false;
- *target_path = FilePath(temp);
+ p->set_target(FilePath(temp));
}
- if (args) {
+ if (options & ShortcutProperties::PROPERTIES_ARGUMENTS) {
result = i_shell_link->GetArguments(temp, MAX_PATH);
gab 2013/12/23 14:25:01 Looks like |result| is a write-only variable here
huangs 2013/12/30 20:15:10 Done.
if (FAILED(result))
return false;
- *args = string16(temp);
+ p->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;
+
+ p->set_icon(FilePath(temp), temp_index);
+ }
+
+ // Implement other options if the need arise.
+
+ return true;
+}
+
+bool ResolveShortcut(const FilePath& shortcut_path,
+ FilePath* target_path,
+ string16* args) {
+ uint32 options = 0;
+ options |= target_path ? ShortcutProperties::PROPERTIES_TARGET : 0;
+ options |= args ? ShortcutProperties::PROPERTIES_ARGUMENTS : 0;
gab 2013/12/23 14:25:01 Change these two lines to: if (target_path) opt
huangs 2013/12/30 20:15:10 Done. Also, being defensive: return true if option
+ ShortcutProperties p;
+ 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