Index: chrome/browser/web_applications/web_app_win.cc |
diff --git a/chrome/browser/web_applications/web_app_win.cc b/chrome/browser/web_applications/web_app_win.cc |
index cef73dffffc82d8e03c11d09e2b114328bcf1d8a..3178d6790fcaa10d006f9f0d8b62f4c59ca5b838 100644 |
--- a/chrome/browser/web_applications/web_app_win.cc |
+++ b/chrome/browser/web_applications/web_app_win.cc |
@@ -32,8 +32,6 @@ namespace { |
const base::FilePath::CharType kIconChecksumFileExt[] = |
FILE_PATH_LITERAL(".ico.md5"); |
-// Width and height of icons exported to .ico files. |
- |
// Calculates checksum of an icon family using MD5. |
// The checksum is derived from all of the icons in the family. |
void GetImageCheckSum(const gfx::ImageFamily& image, base::MD5Digest* digest) { |
@@ -173,12 +171,8 @@ bool CreateShortcutsInPaths( |
} |
// Generates file name to use with persisted ico and shortcut file. |
- base::FilePath file_name = |
- web_app::internals::GetSanitizedFileName(shortcut_info.title); |
- |
- // Creates an ico file to use with shortcut. |
- base::FilePath icon_file = web_app_path.Append(file_name).AddExtension( |
- FILE_PATH_LITERAL(".ico")); |
+ base::FilePath icon_file = |
+ web_app::internals::GetIconFilePath(web_app_path, shortcut_info.title); |
if (!web_app::internals::CheckAndSaveIcon(icon_file, shortcut_info.favicon)) { |
return false; |
} |
@@ -214,8 +208,11 @@ bool CreateShortcutsInPaths( |
bool success = true; |
for (size_t i = 0; i < shortcut_paths.size(); ++i) { |
- base::FilePath shortcut_file = shortcut_paths[i].Append(file_name). |
- AddExtension(installer::kLnkExt); |
+ base::FilePath shortcut_file = |
+ shortcut_paths[i] |
+ .Append( |
+ web_app::internals::GetSanitizedFileName(shortcut_info.title)) |
+ .AddExtension(installer::kLnkExt); |
if (creation_reason == web_app::SHORTCUT_CREATION_AUTOMATED) { |
// Check whether there is an existing shortcut to this app. |
std::vector<base::FilePath> shortcut_files = |
@@ -336,10 +333,23 @@ base::FilePath CreateShortcutInWebAppDir( |
std::vector<base::FilePath> paths; |
paths.push_back(web_app_dir); |
std::vector<base::FilePath> out_filenames; |
- CreateShortcutsInPaths(web_app_dir, shortcut_info, paths, |
- SHORTCUT_CREATION_BY_USER, &out_filenames); |
- DCHECK_EQ(out_filenames.size(), 1u); |
- return out_filenames[0]; |
+ base::FilePath web_app_dir_shortcut = |
+ web_app_dir.Append(internals::GetSanitizedFileName(shortcut_info.title)) |
+ .AddExtension(installer::kLnkExt); |
+ if (!PathExists(web_app_dir_shortcut)) { |
+ CreateShortcutsInPaths(web_app_dir, |
+ shortcut_info, |
+ paths, |
+ SHORTCUT_CREATION_BY_USER, |
+ &out_filenames); |
+ DCHECK_EQ(out_filenames.size(), 1u); |
+ DCHECK_EQ(out_filenames[0].value(), web_app_dir_shortcut.value()); |
+ } else { |
+ internals::CheckAndSaveIcon( |
+ internals::GetIconFilePath(web_app_dir, shortcut_info.title), |
+ shortcut_info.favicon); |
+ } |
+ return web_app_dir_shortcut; |
} |
namespace internals { |
@@ -393,8 +403,7 @@ bool CreatePlatformShortcuts( |
return false; |
if (pin_to_taskbar) { |
- base::FilePath file_name = |
- web_app::internals::GetSanitizedFileName(shortcut_info.title); |
+ base::FilePath file_name = GetSanitizedFileName(shortcut_info.title); |
// Use the web app path shortcut for pinning to avoid having unique numbers |
// in the application name. |
base::FilePath shortcut_to_pin = web_app_path.Append(file_name). |
@@ -431,8 +440,7 @@ void UpdatePlatformShortcuts( |
// GetShortcutLocationsAndDeleteShortcuts will have deleted it. In that |
// case, re-pin it. |
if (was_pinned_to_taskbar) { |
- base::FilePath file_name = |
- web_app::internals::GetSanitizedFileName(shortcut_info.title); |
+ base::FilePath file_name = GetSanitizedFileName(shortcut_info.title); |
// Use the web app path shortcut for pinning to avoid having unique |
// numbers in the application name. |
base::FilePath shortcut_to_pin = web_app_path.Append(file_name). |
@@ -442,9 +450,8 @@ void UpdatePlatformShortcuts( |
} |
// Update the icon if necessary. |
- base::FilePath icon_file = web_app_path.Append(file_name).AddExtension( |
- FILE_PATH_LITERAL(".ico")); |
- web_app::internals::CheckAndSaveIcon(icon_file, shortcut_info.favicon); |
+ base::FilePath icon_file = GetIconFilePath(web_app_path, shortcut_info.title); |
+ CheckAndSaveIcon(icon_file, shortcut_info.favicon); |
} |
void DeletePlatformShortcuts( |
@@ -533,6 +540,12 @@ std::vector<base::FilePath> GetShortcutPaths( |
return shortcut_paths; |
} |
+base::FilePath GetIconFilePath(const base::FilePath& web_app_path, |
+ const base::string16& title) { |
+ return web_app_path.Append(GetSanitizedFileName(title)) |
+ .AddExtension(FILE_PATH_LITERAL(".ico")); |
+} |
+ |
} // namespace internals |
} // namespace web_app |