| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/web_applications/web_app_win.h" | 5 #include "chrome/browser/web_applications/web_app_win.h" |
| 6 | 6 |
| 7 #include <shlobj.h> | 7 #include <shlobj.h> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 sizeof(digest)) == sizeof(digest); | 68 sizeof(digest)) == sizeof(digest); |
| 69 } | 69 } |
| 70 | 70 |
| 71 // Returns true if |icon_file| is missing or different from |image|. | 71 // Returns true if |icon_file| is missing or different from |image|. |
| 72 bool ShouldUpdateIcon(const base::FilePath& icon_file, | 72 bool ShouldUpdateIcon(const base::FilePath& icon_file, |
| 73 const gfx::ImageFamily& image) { | 73 const gfx::ImageFamily& image) { |
| 74 base::FilePath checksum_file( | 74 base::FilePath checksum_file( |
| 75 icon_file.ReplaceExtension(kIconChecksumFileExt)); | 75 icon_file.ReplaceExtension(kIconChecksumFileExt)); |
| 76 | 76 |
| 77 // Returns true if icon_file or checksum file is missing. | 77 // Returns true if icon_file or checksum file is missing. |
| 78 if (!file_util::PathExists(icon_file) || | 78 if (!base::PathExists(icon_file) || |
| 79 !file_util::PathExists(checksum_file)) | 79 !base::PathExists(checksum_file)) |
| 80 return true; | 80 return true; |
| 81 | 81 |
| 82 base::MD5Digest persisted_image_checksum; | 82 base::MD5Digest persisted_image_checksum; |
| 83 if (sizeof(persisted_image_checksum) != file_util::ReadFile(checksum_file, | 83 if (sizeof(persisted_image_checksum) != file_util::ReadFile(checksum_file, |
| 84 reinterpret_cast<char*>(&persisted_image_checksum), | 84 reinterpret_cast<char*>(&persisted_image_checksum), |
| 85 sizeof(persisted_image_checksum))) | 85 sizeof(persisted_image_checksum))) |
| 86 return true; | 86 return true; |
| 87 | 87 |
| 88 base::MD5Digest downloaded_image_checksum; | 88 base::MD5Digest downloaded_image_checksum; |
| 89 GetImageCheckSum(image, &downloaded_image_checksum); | 89 GetImageCheckSum(image, &downloaded_image_checksum); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 Append(web_app::internals::GetSanitizedFileName(shortcut_name)). | 136 Append(web_app::internals::GetSanitizedFileName(shortcut_name)). |
| 137 AddExtension(FILE_PATH_LITERAL(".lnk")); | 137 AddExtension(FILE_PATH_LITERAL(".lnk")); |
| 138 | 138 |
| 139 const int fileNamesToCheck = 10; | 139 const int fileNamesToCheck = 10; |
| 140 for (int i = 0; i < fileNamesToCheck; ++i) { | 140 for (int i = 0; i < fileNamesToCheck; ++i) { |
| 141 base::FilePath shortcut_file = base_path; | 141 base::FilePath shortcut_file = base_path; |
| 142 if (i > 0) { | 142 if (i > 0) { |
| 143 shortcut_file = shortcut_file.InsertBeforeExtensionASCII( | 143 shortcut_file = shortcut_file.InsertBeforeExtensionASCII( |
| 144 base::StringPrintf(" (%d)", i)); | 144 base::StringPrintf(" (%d)", i)); |
| 145 } | 145 } |
| 146 if (file_util::PathExists(shortcut_file) && | 146 if (base::PathExists(shortcut_file) && |
| 147 IsAppShortcutForProfile(shortcut_file, profile_path)) { | 147 IsAppShortcutForProfile(shortcut_file, profile_path)) { |
| 148 shortcut_paths.push_back(shortcut_file); | 148 shortcut_paths.push_back(shortcut_file); |
| 149 } | 149 } |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | 152 |
| 153 return shortcut_paths; | 153 return shortcut_paths; |
| 154 } | 154 } |
| 155 | 155 |
| 156 // Creates application shortcuts in a given set of paths. | 156 // Creates application shortcuts in a given set of paths. |
| 157 // |shortcut_paths| is a list of directories in which shortcuts should be | 157 // |shortcut_paths| is a list of directories in which shortcuts should be |
| 158 // created. If |creation_policy| is DONT_CREATE_DUPLICATE_SHORTCUTS and there is | 158 // created. If |creation_policy| is DONT_CREATE_DUPLICATE_SHORTCUTS and there is |
| 159 // an existing shortcut to this app for this profile, does nothing (succeeding). | 159 // an existing shortcut to this app for this profile, does nothing (succeeding). |
| 160 // Returns true on success, false on failure. | 160 // Returns true on success, false on failure. |
| 161 // Must be called on the FILE thread. | 161 // Must be called on the FILE thread. |
| 162 bool CreateShortcutsInPaths( | 162 bool CreateShortcutsInPaths( |
| 163 const base::FilePath& web_app_path, | 163 const base::FilePath& web_app_path, |
| 164 const ShellIntegration::ShortcutInfo& shortcut_info, | 164 const ShellIntegration::ShortcutInfo& shortcut_info, |
| 165 const std::vector<base::FilePath>& shortcut_paths, | 165 const std::vector<base::FilePath>& shortcut_paths, |
| 166 web_app::ShortcutCreationPolicy creation_policy, | 166 web_app::ShortcutCreationPolicy creation_policy, |
| 167 std::vector<base::FilePath>* out_filenames) { | 167 std::vector<base::FilePath>* out_filenames) { |
| 168 // Ensure web_app_path exists. | 168 // Ensure web_app_path exists. |
| 169 if (!file_util::PathExists(web_app_path) && | 169 if (!base::PathExists(web_app_path) && |
| 170 !file_util::CreateDirectory(web_app_path)) { | 170 !file_util::CreateDirectory(web_app_path)) { |
| 171 return false; | 171 return false; |
| 172 } | 172 } |
| 173 | 173 |
| 174 // Generates file name to use with persisted ico and shortcut file. | 174 // Generates file name to use with persisted ico and shortcut file. |
| 175 base::FilePath file_name = | 175 base::FilePath file_name = |
| 176 web_app::internals::GetSanitizedFileName(shortcut_info.title); | 176 web_app::internals::GetSanitizedFileName(shortcut_info.title); |
| 177 | 177 |
| 178 // Creates an ico file to use with shortcut. | 178 // Creates an ico file to use with shortcut. |
| 179 base::FilePath icon_file = web_app_path.Append(file_name).AddExtension( | 179 base::FilePath icon_file = web_app_path.Append(file_name).AddExtension( |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 } | 236 } |
| 237 } | 237 } |
| 238 base::win::ShortcutProperties shortcut_properties; | 238 base::win::ShortcutProperties shortcut_properties; |
| 239 shortcut_properties.set_target(chrome_exe); | 239 shortcut_properties.set_target(chrome_exe); |
| 240 shortcut_properties.set_working_dir(working_dir); | 240 shortcut_properties.set_working_dir(working_dir); |
| 241 shortcut_properties.set_arguments(wide_switches); | 241 shortcut_properties.set_arguments(wide_switches); |
| 242 shortcut_properties.set_description(description); | 242 shortcut_properties.set_description(description); |
| 243 shortcut_properties.set_icon(icon_file, 0); | 243 shortcut_properties.set_icon(icon_file, 0); |
| 244 shortcut_properties.set_app_id(app_id); | 244 shortcut_properties.set_app_id(app_id); |
| 245 shortcut_properties.set_dual_mode(false); | 245 shortcut_properties.set_dual_mode(false); |
| 246 if (!file_util::PathExists(shortcut_file.DirName()) && | 246 if (!base::PathExists(shortcut_file.DirName()) && |
| 247 !file_util::CreateDirectory(shortcut_file.DirName())) { | 247 !file_util::CreateDirectory(shortcut_file.DirName())) { |
| 248 NOTREACHED(); | 248 NOTREACHED(); |
| 249 return false; | 249 return false; |
| 250 } | 250 } |
| 251 success = base::win::CreateOrUpdateShortcutLink( | 251 success = base::win::CreateOrUpdateShortcutLink( |
| 252 shortcut_file, shortcut_properties, | 252 shortcut_file, shortcut_properties, |
| 253 base::win::SHORTCUT_CREATE_ALWAYS) && success; | 253 base::win::SHORTCUT_CREATE_ALWAYS) && success; |
| 254 if (out_filenames) | 254 if (out_filenames) |
| 255 out_filenames->push_back(shortcut_file); | 255 out_filenames->push_back(shortcut_file); |
| 256 } | 256 } |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 base::FilePath shortcut_to_pin = web_app_path.Append(file_name). | 437 base::FilePath shortcut_to_pin = web_app_path.Append(file_name). |
| 438 AddExtension(installer::kLnkExt); | 438 AddExtension(installer::kLnkExt); |
| 439 base::win::TaskbarPinShortcutLink(shortcut_to_pin.value().c_str()); | 439 base::win::TaskbarPinShortcutLink(shortcut_to_pin.value().c_str()); |
| 440 } | 440 } |
| 441 } | 441 } |
| 442 | 442 |
| 443 // If an icon file exists, and is out of date, replace it with the new icon | 443 // If an icon file exists, and is out of date, replace it with the new icon |
| 444 // and let the shell know the icon has been modified. | 444 // and let the shell know the icon has been modified. |
| 445 base::FilePath icon_file = web_app_path.Append(file_name).AddExtension( | 445 base::FilePath icon_file = web_app_path.Append(file_name).AddExtension( |
| 446 FILE_PATH_LITERAL(".ico")); | 446 FILE_PATH_LITERAL(".ico")); |
| 447 if (file_util::PathExists(icon_file)) { | 447 if (base::PathExists(icon_file)) { |
| 448 web_app::internals::CheckAndSaveIcon(icon_file, shortcut_info.favicon); | 448 web_app::internals::CheckAndSaveIcon(icon_file, shortcut_info.favicon); |
| 449 } | 449 } |
| 450 } | 450 } |
| 451 | 451 |
| 452 void DeletePlatformShortcuts( | 452 void DeletePlatformShortcuts( |
| 453 const base::FilePath& web_app_path, | 453 const base::FilePath& web_app_path, |
| 454 const ShellIntegration::ShortcutInfo& shortcut_info) { | 454 const ShellIntegration::ShortcutInfo& shortcut_info) { |
| 455 GetShortcutLocationsAndDeleteShortcuts( | 455 GetShortcutLocationsAndDeleteShortcuts( |
| 456 web_app_path, shortcut_info.profile_path, shortcut_info.title, NULL, | 456 web_app_path, shortcut_info.profile_path, shortcut_info.title, NULL, |
| 457 NULL); | 457 NULL); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 path = path.Append(locations[i].subdir); | 524 path = path.Append(locations[i].subdir); |
| 525 shortcut_paths.push_back(path); | 525 shortcut_paths.push_back(path); |
| 526 } | 526 } |
| 527 } | 527 } |
| 528 return shortcut_paths; | 528 return shortcut_paths; |
| 529 } | 529 } |
| 530 | 530 |
| 531 } // namespace internals | 531 } // namespace internals |
| 532 | 532 |
| 533 } // namespace web_app | 533 } // namespace web_app |
| OLD | NEW |