Index: chrome/browser/extensions/app_shortcut_manager.cc |
diff --git a/chrome/browser/extensions/app_shortcut_manager.cc b/chrome/browser/extensions/app_shortcut_manager.cc |
index 7d1f275403cd833be7008724a10510d3192e9fde..0358bbc9584a519990224161068381e570489187 100644 |
--- a/chrome/browser/extensions/app_shortcut_manager.cc |
+++ b/chrome/browser/extensions/app_shortcut_manager.cc |
@@ -4,7 +4,10 @@ |
#include "chrome/browser/extensions/app_shortcut_manager.h" |
+#include "base/bind.h" |
#include "base/command_line.h" |
+#include "base/compiler_specific.h" |
+#include "base/logging.h" |
#include "base/utf_string_conversions.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/web_applications/web_app.h" |
@@ -17,6 +20,10 @@ |
#include "skia/ext/image_operations.h" |
#include "ui/base/resource/resource_bundle.h" |
+#if defined(OS_WIN) |
+#include "chrome/browser/extensions/app_host_installer_win.h" |
+#endif |
+ |
namespace extensions { |
namespace { |
@@ -46,13 +53,16 @@ ShellIntegration::ShortcutInfo ShortcutInfoForExtensionAndProfile( |
AppShortcutManager::AppShortcutManager(Profile* profile) |
: profile_(profile), |
- tracker_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
+ tracker_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, |
content::Source<Profile>(profile_)); |
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, |
content::Source<Profile>(profile_)); |
} |
+AppShortcutManager::~AppShortcutManager() {} |
+ |
void AppShortcutManager::OnImageLoaded(const gfx::Image& image, |
const std::string& extension_id, |
int index) { |
@@ -81,8 +91,15 @@ void AppShortcutManager::Observe(int type, |
case chrome::NOTIFICATION_EXTENSION_INSTALLED: { |
const Extension* extension = content::Details<const Extension>( |
details).ptr(); |
- if (extension->is_platform_app()) |
+ if (extension->is_platform_app()) { |
+#if defined(OS_WIN) |
+ extensions::AppHostInstaller::EnsureAppHostInstalled( |
+ base::Bind(&AppShortcutManager::OnAppHostInstallationComplete, |
+ weak_factory_.GetWeakPtr(), extension)); |
+#else |
UpdateApplicationShortcuts(extension); |
+#endif |
+ } |
break; |
} |
case chrome::NOTIFICATION_EXTENSION_UNINSTALLED: { |
@@ -97,6 +114,18 @@ void AppShortcutManager::Observe(int type, |
#endif |
} |
+#if defined(OS_WIN) |
+void AppShortcutManager::OnAppHostInstallationComplete( |
+ const Extension* extension, bool app_host_install_success) { |
+ if (!app_host_install_success) { |
+ // Do not create shortcuts if App Host fails to install. |
+ LOG(ERROR) << "Application Runtime installation failed."; |
+ return; |
+ } |
+ UpdateApplicationShortcuts(extension); |
+} |
+#endif |
+ |
void AppShortcutManager::UpdateApplicationShortcuts( |
const Extension* extension) { |
shortcut_info_ = ShortcutInfoForExtensionAndProfile(extension, profile_); |