Index: chrome/browser/ui/extensions/application_launch.cc |
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc |
index 629032384a430f491c60ef3ccab2413b7bcf7641..65854411e520f4e0804a42ef21283cefac9f52d3 100644 |
--- a/chrome/browser/ui/extensions/application_launch.cc |
+++ b/chrome/browser/ui/extensions/application_launch.cc |
@@ -118,6 +118,20 @@ class EnableViaAppListFlow : public ExtensionEnableFlowDelegate { |
DISALLOW_COPY_AND_ASSIGN(EnableViaAppListFlow); |
}; |
+const Extension* GetExtension(const AppLaunchParams& params) { |
+ if (params.extension_id.empty()) |
+ return NULL; |
+ ExtensionService* service = |
+ extensions::ExtensionSystem::Get(params.profile)->extension_service(); |
+ const Extension* extension = service->GetExtensionById( |
+ params.extension_id, |
+ ExtensionService::INCLUDE_ENABLED | ExtensionService::INCLUDE_DISABLED | |
+ ExtensionService::INCLUDE_TERMINATED); |
+ if (!extension) |
+ extension = service->GetTerminatedExtension(params.extension_id); |
+ return extension; |
+} |
+ |
// Get the launch URL for a given extension, with optional override/fallback. |
// |override_url|, if non-empty, will be preferred over the extension's |
// launch url. |
@@ -173,7 +187,7 @@ ui::WindowShowState DetermineWindowShowState( |
WebContents* OpenApplicationWindow(const AppLaunchParams& params) { |
Profile* const profile = params.profile; |
- const extensions::Extension* const extension = params.extension; |
+ const Extension* const extension = GetExtension(params); |
const GURL url_input = params.override_url; |
DCHECK(!url_input.is_empty() || extension); |
@@ -224,8 +238,9 @@ WebContents* OpenApplicationWindow(const AppLaunchParams& params) { |
} |
WebContents* OpenApplicationTab(const AppLaunchParams& launch_params) { |
+ const Extension* extension = GetExtension(launch_params); |
+ CHECK(extension); |
Profile* const profile = launch_params.profile; |
- const extensions::Extension* extension = launch_params.extension; |
WindowOpenDisposition disposition = launch_params.disposition; |
Browser* browser = chrome::FindTabbedBrowser(profile, |
@@ -317,8 +332,10 @@ WebContents* OpenApplicationTab(const AppLaunchParams& launch_params) { |
} |
WebContents* OpenEnabledApplication(const AppLaunchParams& params) { |
+ const Extension* extension = GetExtension(params); |
+ if (!extension) |
+ return NULL; |
Profile* profile = params.profile; |
- const extensions::Extension* extension = params.extension; |
WebContents* tab = NULL; |
ExtensionPrefs* prefs = extensions::ExtensionSystem::Get(profile)-> |
@@ -387,25 +404,25 @@ AppLaunchParams::AppLaunchParams(Profile* profile, |
extensions::LaunchContainer container, |
WindowOpenDisposition disposition) |
: profile(profile), |
- extension(extension), |
+ extension_id(extension ? extension->id() : std::string()), |
container(container), |
disposition(disposition), |
desktop_type(chrome::GetActiveDesktop()), |
override_url(), |
override_bounds(), |
- command_line(NULL) {} |
+ command_line(CommandLine::NO_PROGRAM) {} |
AppLaunchParams::AppLaunchParams(Profile* profile, |
const extensions::Extension* extension, |
WindowOpenDisposition disposition) |
: profile(profile), |
- extension(extension), |
+ extension_id(extension ? extension->id() : std::string()), |
container(extensions::LAUNCH_CONTAINER_NONE), |
disposition(disposition), |
desktop_type(chrome::GetActiveDesktop()), |
override_url(), |
override_bounds(), |
- command_line(NULL) { |
+ command_line(CommandLine::NO_PROGRAM) { |
ExtensionService* service = |
extensions::ExtensionSystem::Get(profile)->extension_service(); |
DCHECK(service); |
@@ -421,13 +438,13 @@ AppLaunchParams::AppLaunchParams(Profile* profile, |
int event_flags, |
chrome::HostDesktopType desktop_type) |
: profile(profile), |
- extension(extension), |
+ extension_id(extension ? extension->id() : std::string()), |
container(extensions::LAUNCH_CONTAINER_NONE), |
disposition(ui::DispositionFromEventFlags(event_flags)), |
desktop_type(desktop_type), |
override_url(), |
override_bounds(), |
- command_line(NULL) { |
+ command_line(CommandLine::NO_PROGRAM) { |
if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { |
container = extensions::LAUNCH_CONTAINER_TAB; |
} else if (disposition == NEW_WINDOW) { |
@@ -445,13 +462,18 @@ AppLaunchParams::AppLaunchParams(Profile* profile, |
} |
} |
+AppLaunchParams::~AppLaunchParams() { |
+} |
+ |
WebContents* OpenApplication(const AppLaunchParams& params) { |
return OpenEnabledApplication(params); |
} |
void OpenApplicationWithReenablePrompt(const AppLaunchParams& params) { |
+ const Extension* extension = GetExtension(params); |
+ if (!extension) |
+ return; |
Profile* profile = params.profile; |
- const extensions::Extension* extension = params.extension; |
ExtensionService* service = |
extensions::ExtensionSystem::Get(profile)->extension_service(); |