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

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

Issue 10914109: Refactoring and tests for the highly undertested file_util::CreateOrUpdateShortcutLink() method. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: namespace s/Win/win Created 8 years, 3 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
« no previous file with comments | « chrome/installer/util/shell_util.h ('k') | chrome/installer/util/shell_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/shell_util.cc
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index 99c2fb931c392bb5122534dc37ad207684678a28..f6e696c1f885aaaf39f0f2236de47cb32ebbbaff 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -32,6 +32,7 @@
#include "base/values.h"
#include "base/win/registry.h"
#include "base/win/scoped_comptr.h"
+#include "base/win/shortcut.h"
#include "base/win/win_util.h"
#include "base/win/windows_version.h"
#include "chrome/common/chrome_constants.h"
@@ -730,15 +731,6 @@ bool LaunchApplicationAssociationDialog(const string16& app_id) {
return SUCCEEDED(hr);
}
-uint32 ConvertShellUtilShortcutOptionsToFileUtil(uint32 options) {
- uint32 converted_options = 0;
- if (options & ShellUtil::SHORTCUT_DUAL_MODE)
- converted_options |= file_util::SHORTCUT_DUAL_MODE;
- if (options & ShellUtil::SHORTCUT_CREATE_ALWAYS)
- converted_options |= file_util::SHORTCUT_CREATE_ALWAYS;
- return converted_options;
-}
-
// As of r133333, the DelegateExecute verb handler was being registered for
// Google Chrome installs on Windows 8 even though the binary itself wasn't
// present. This affected Chrome 20.0.1115.1 on the dev channel (and anyone who
@@ -1672,56 +1664,24 @@ bool ShellUtil::UpdateChromeShortcut(BrowserDistribution* dist,
}
const string16 app_id(GetBrowserModelId(dist, chrome_exe));
-
- return file_util::CreateOrUpdateShortcutLink(
- chrome_exe.c_str(),
- shortcut.c_str(),
- chrome_path.value().c_str(),
- arguments.c_str(),
- description.c_str(),
- icon_path.c_str(),
- icon_index,
- app_id.c_str(),
- ConvertShellUtilShortcutOptionsToFileUtil(options));
-}
-
-ShellUtil::VerifyShortcutStatus ShellUtil::VerifyChromeShortcut(
- const string16& exe_path, const string16& shortcut,
- const string16& description, int icon_index) {
- base::win::ScopedComPtr<IShellLink> i_shell_link;
- base::win::ScopedComPtr<IPersistFile> i_persist_file;
- wchar_t long_path[MAX_PATH] = {0};
- wchar_t short_path[MAX_PATH] = {0};
- wchar_t file_path[MAX_PATH] = {0};
- wchar_t icon_path[MAX_PATH] = {0};
- wchar_t desc[MAX_PATH] = {0};
- int index = 0;
-
- // Get the shortcut's properties.
- if (FAILED(i_shell_link.CreateInstance(CLSID_ShellLink, NULL,
- CLSCTX_INPROC_SERVER)) ||
- FAILED(i_persist_file.QueryFrom(i_shell_link)) ||
- FAILED(i_persist_file->Load(shortcut.c_str(), 0)) ||
- ::GetLongPathName(exe_path.c_str(), long_path, MAX_PATH) == 0 ||
- ::GetShortPathName(exe_path.c_str(), short_path, MAX_PATH) == 0 ||
- FAILED(i_shell_link->GetPath(file_path, MAX_PATH, NULL,
- SLGP_UNCPRIORITY)) ||
- FAILED(i_shell_link->GetIconLocation(icon_path, MAX_PATH, &index)) ||
- FAILED(i_shell_link->GetDescription(desc, MAX_PATH)) ||
- FAILED(i_shell_link->GetDescription(desc, MAX_PATH)))
- return VERIFY_SHORTCUT_FAILURE_UNEXPECTED;
-
- FilePath path(file_path);
- if (path != FilePath(long_path) && path != FilePath(short_path))
- return VERIFY_SHORTCUT_FAILURE_PATH;
-
- if (string16(desc) != string16(description))
- return VERIFY_SHORTCUT_FAILURE_DESCRIPTION;
-
- if (index != icon_index)
- return VERIFY_SHORTCUT_FAILURE_ICON_INDEX;
-
- return VERIFY_SHORTCUT_SUCCESS;
+ const bool is_dual_mode = ((options & ShellUtil::SHORTCUT_DUAL_MODE) != 0);
+ const base::win::ShortcutOperation operation =
+ (options & ShellUtil::SHORTCUT_CREATE_ALWAYS) != 0 ?
+ base::win::SHORTCUT_CREATE_ALWAYS :
+ base::win::SHORTCUT_UPDATE_EXISTING;
+
+ // TODO(gab): The shell_util interface will also be refactored in an upcoming
+ // CL to use a ShortcutProperties like interface for its shortcut methods.
+ base::win::ShortcutProperties shortcut_properties;
+ shortcut_properties.set_target(FilePath(chrome_exe));
+ shortcut_properties.set_working_dir(chrome_path);
+ shortcut_properties.set_arguments(arguments);
+ shortcut_properties.set_description(description);
+ shortcut_properties.set_icon(FilePath(icon_path), icon_index);
+ shortcut_properties.set_app_id(app_id);
+ shortcut_properties.set_dual_mode(is_dual_mode);
+ return base::win::CreateOrUpdateShortcutLink(
+ FilePath(shortcut), shortcut_properties, operation);
}
bool ShellUtil::GetUserSpecificRegistrySuffix(string16* suffix) {
« no previous file with comments | « chrome/installer/util/shell_util.h ('k') | chrome/installer/util/shell_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698