| Index: chrome/browser/web_applications/web_app_mac.mm
|
| diff --git a/chrome/browser/web_applications/web_app_mac.mm b/chrome/browser/web_applications/web_app_mac.mm
|
| index 2c6154800a6a4b4f57b95639328c727be7316053..dc6b9300179c7ee3c408193301a8dd78da2d44dd 100644
|
| --- a/chrome/browser/web_applications/web_app_mac.mm
|
| +++ b/chrome/browser/web_applications/web_app_mac.mm
|
| @@ -80,11 +80,24 @@ bool AddBitmapImageRepToIconFamily(IconFamily* icon_family,
|
| }
|
| }
|
|
|
| +base::FilePath GetWritableApplicationsDirectory() {
|
| + base::FilePath path;
|
| + if (base::mac::GetLocalDirectory(NSApplicationDirectory, &path) &&
|
| + file_util::PathIsWritable(path)) {
|
| + return path;
|
| + }
|
| + if (base::mac::GetUserDirectory(NSApplicationDirectory, &path))
|
| + return path;
|
| + return base::FilePath();
|
| +}
|
| +
|
| } // namespace
|
|
|
|
|
| namespace web_app {
|
|
|
| +const char kChromeAppDirName[] = "Chrome Apps.localized";
|
| +
|
| WebAppShortcutCreator::WebAppShortcutCreator(
|
| const base::FilePath& user_data_dir,
|
| const ShellIntegration::ShortcutInfo& shortcut_info,
|
| @@ -119,7 +132,15 @@ bool WebAppShortcutCreator::CreateShortcut() {
|
| if (!UpdateIcon(staging_path))
|
| return false;
|
|
|
| - base::FilePath dst_path = GetDestinationPath(app_file_name);
|
| + base::FilePath dst_path = GetDestinationPath();
|
| + if (dst_path.empty() || !file_util::DirectoryExists(dst_path.DirName())) {
|
| + LOG(ERROR) << "Couldn't find an Applications directory to copy app to.";
|
| + return false;
|
| + }
|
| + if (!file_util::CreateDirectory(dst_path)) {
|
| + LOG(ERROR) << "Creating directory " << dst_path.value() << " failed.";
|
| + return false;
|
| + }
|
| if (!file_util::CopyDirectory(staging_path, dst_path, true)) {
|
| LOG(ERROR) << "Copying app to dst path: " << dst_path.value() << " failed";
|
| return false;
|
| @@ -137,18 +158,11 @@ base::FilePath WebAppShortcutCreator::GetAppLoaderPath() const {
|
| base::mac::NSToCFCast(@"app_mode_loader.app"));
|
| }
|
|
|
| -base::FilePath WebAppShortcutCreator::GetDestinationPath(
|
| - const base::FilePath& app_file_name) const {
|
| - base::FilePath path;
|
| - if (base::mac::GetLocalDirectory(NSApplicationDirectory, &path) &&
|
| - file_util::PathIsWritable(path)) {
|
| - return path;
|
| - }
|
| -
|
| - if (base::mac::GetUserDirectory(NSApplicationDirectory, &path))
|
| +base::FilePath WebAppShortcutCreator::GetDestinationPath() const {
|
| + base::FilePath path = GetWritableApplicationsDirectory();
|
| + if (path.empty())
|
| return path;
|
| -
|
| - return base::FilePath();
|
| + return path.Append(kChromeAppDirName);
|
| }
|
|
|
| bool WebAppShortcutCreator::UpdatePlist(const base::FilePath& app_path) const {
|
|
|