| 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();
|
|
|