| Index: chrome/browser/extensions/extension_service.cc
|
| diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
|
| index c23f7eac3a713594df552d050e4aa8fc3fccd151..3f416de79ddffa6bed6e4a548ae9d187861d65ba 100644
|
| --- a/chrome/browser/extensions/extension_service.cc
|
| +++ b/chrome/browser/extensions/extension_service.cc
|
| @@ -61,9 +61,12 @@
|
| #include "chrome/browser/extensions/external_provider_impl.h"
|
| #include "chrome/browser/extensions/external_provider_interface.h"
|
| #include "chrome/browser/extensions/installed_loader.h"
|
| +#include "chrome/browser/extensions/lazy_background_task_queue.h"
|
| #include "chrome/browser/extensions/pending_extension_manager.h"
|
| #include "chrome/browser/extensions/permissions_updater.h"
|
| +#include "chrome/browser/extensions/platform_app_launcher.h"
|
| #include "chrome/browser/extensions/settings/settings_frontend.h"
|
| +#include "chrome/browser/extensions/shell_window_registry.h"
|
| #include "chrome/browser/extensions/unpacked_installer.h"
|
| #include "chrome/browser/extensions/updater/extension_updater.h"
|
| #include "chrome/browser/extensions/window_event_router.h"
|
| @@ -108,7 +111,6 @@
|
| #include "sync/api/sync_error_factory.h"
|
| #include "webkit/database/database_tracker.h"
|
| #include "webkit/database/database_util.h"
|
| -
|
| #if defined(OS_CHROMEOS)
|
| #include "chrome/browser/chromeos/cros/cros_library.h"
|
| #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h"
|
| @@ -664,6 +666,12 @@ void ExtensionService::ReloadExtension(const std::string& extension_id) {
|
| orphaned_dev_tools_[extension_id] = devtools_cookie;
|
| }
|
|
|
| + if (current_extension->is_platform_app() &&
|
| + !extensions::ShellWindowRegistry::Get(profile_)->
|
| + GetShellWindowsForApp(extension_id).empty()) {
|
| + relaunch_app_ids_.insert(extension_id);
|
| + }
|
| +
|
| path = current_extension->path();
|
| DisableExtension(extension_id, Extension::DISABLE_RELOAD);
|
| disabled_extension_paths_[extension_id] = path;
|
| @@ -1954,6 +1962,7 @@ void ExtensionService::AddExtension(const Extension* extension) {
|
| extensions_.Insert(scoped_extension);
|
| SyncExtensionChangeIfNeeded(*extension);
|
| NotifyExtensionLoaded(extension);
|
| + QueueRestoreAppWindow(extension);
|
| }
|
|
|
| void ExtensionService::InitializePermissions(const Extension* extension) {
|
| @@ -2565,3 +2574,31 @@ ExtensionService::NaClModuleInfoList::iterator
|
| }
|
| return nacl_module_list_.end();
|
| }
|
| +
|
| +void ExtensionService::QueueRestoreAppWindow(const Extension* extension) {
|
| + std::set<std::string>::iterator relaunch_iter =
|
| + relaunch_app_ids_.find(extension->id());
|
| + if (relaunch_iter != relaunch_app_ids_.end()) {
|
| + extensions::LazyBackgroundTaskQueue* queue =
|
| + system_->lazy_background_task_queue();
|
| + if (queue->ShouldEnqueueTask(profile(), extension)) {
|
| + queue->AddPendingTask(profile(), extension->id(),
|
| + base::Bind(&ExtensionService::LaunchApplication));
|
| + }
|
| +
|
| + relaunch_app_ids_.erase(relaunch_iter);
|
| + }
|
| +}
|
| +
|
| +// static
|
| +void ExtensionService::LaunchApplication(
|
| + extensions::ExtensionHost* extension_host) {
|
| + if (!extension_host)
|
| + return;
|
| +
|
| +#if !defined(OS_ANDROID)
|
| + extensions::LaunchPlatformApp(extension_host->profile(),
|
| + extension_host->extension(),
|
| + NULL, FilePath());
|
| +#endif
|
| +}
|
|
|