| Index: chrome/browser/ui/browser.cc
|
| diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
|
| index 35f6c63f40cf6c8962c549bfddf81c2e3faaff9f..49d66f9b63b79933dd8ffa200f17624c557776cf 100644
|
| --- a/chrome/browser/ui/browser.cc
|
| +++ b/chrome/browser/ui/browser.cc
|
| @@ -250,6 +250,33 @@ bool HasInternalURL(const NavigationEntry* entry) {
|
| return false;
|
| }
|
|
|
| +// 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.
|
| +GURL UrlForExtension(const Extension* extension, const GURL& override_url) {
|
| + if (!extension)
|
| + return override_url;
|
| +
|
| + GURL url;
|
| + if (!override_url.is_empty()) {
|
| + DCHECK(extension->web_extent().MatchesURL(override_url));
|
| + url = override_url;
|
| + } else {
|
| + url = extension->GetFullLaunchURL();
|
| + }
|
| +
|
| + // For extensions lacking launch urls, determine a reasonable fallback.
|
| + if (!url.is_valid()) {
|
| + url = extension->options_url();
|
| + if (!url.is_valid()) {
|
| + url = GURL(std::string(chrome::kChromeUISettingsURL) +
|
| + chrome::kExtensionsSubPage);
|
| + }
|
| + }
|
| +
|
| + return url;
|
| +}
|
| +
|
| } // namespace
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -581,6 +608,7 @@ TabContents* Browser::OpenApplication(
|
| Profile* profile,
|
| const Extension* extension,
|
| extension_misc::LaunchContainer container,
|
| + const GURL& override_url,
|
| WindowOpenDisposition disposition) {
|
| #if defined(USE_AURA)
|
| // On aura we're experimenting with making all apps open in windows.
|
| @@ -596,10 +624,11 @@ TabContents* Browser::OpenApplication(
|
| case extension_misc::LAUNCH_WINDOW:
|
| case extension_misc::LAUNCH_PANEL:
|
| tab = Browser::OpenApplicationWindow(profile, extension, container,
|
| - GURL(), NULL);
|
| + override_url, NULL);
|
| break;
|
| case extension_misc::LAUNCH_TAB: {
|
| - tab = Browser::OpenApplicationTab(profile, extension, disposition);
|
| + tab = Browser::OpenApplicationTab(profile, extension, override_url,
|
| + disposition);
|
| break;
|
| }
|
| default:
|
| @@ -616,22 +645,13 @@ TabContents* Browser::OpenApplicationWindow(
|
| extension_misc::LaunchContainer container,
|
| const GURL& url_input,
|
| Browser** app_browser) {
|
| - GURL url;
|
| - if (!url_input.is_empty()) {
|
| - if (extension)
|
| - DCHECK(extension->web_extent().MatchesURL(url_input));
|
| - url = url_input;
|
| - } else {
|
| - DCHECK(extension); // Empty url and no extension. Nothing to open.
|
| - url = extension->GetFullLaunchURL();
|
| - }
|
| + DCHECK(!url_input.is_empty() || extension);
|
| + GURL url = UrlForExtension(extension, url_input);
|
|
|
| std::string app_name;
|
| - if (extension)
|
| - app_name =
|
| - web_app::GenerateApplicationNameFromExtensionId(extension->id());
|
| - else
|
| - app_name = web_app::GenerateApplicationNameFromURL(url);
|
| + app_name = extension ?
|
| + web_app::GenerateApplicationNameFromExtensionId(extension->id()) :
|
| + web_app::GenerateApplicationNameFromURL(url);
|
|
|
| Type type = extension && (container == extension_misc::LAUNCH_PANEL) ?
|
| TYPE_PANEL : TYPE_POPUP;
|
| @@ -690,6 +710,7 @@ TabContents* Browser::OpenAppShortcutWindow(Profile* profile,
|
| // static
|
| TabContents* Browser::OpenApplicationTab(Profile* profile,
|
| const Extension* extension,
|
| + const GURL& override_url,
|
| WindowOpenDisposition disposition) {
|
| Browser* browser = BrowserList::FindTabbedBrowser(profile, false);
|
| TabContents* contents = NULL;
|
| @@ -723,15 +744,7 @@ TabContents* Browser::OpenApplicationTab(Profile* profile,
|
| if (launch_type == ExtensionPrefs::LAUNCH_PINNED)
|
| add_type |= TabStripModel::ADD_PINNED;
|
|
|
| - // For extensions lacking launch urls, determine a reasonable fallback.
|
| - GURL extension_url = extension->GetFullLaunchURL();
|
| - if (!extension_url.is_valid()) {
|
| - extension_url = extension->options_url();
|
| - if (!extension_url.is_valid())
|
| - extension_url = GURL(std::string(chrome::kChromeUISettingsURL) +
|
| - chrome::kExtensionsSubPage);
|
| - }
|
| -
|
| + GURL extension_url = UrlForExtension(extension, override_url);
|
| // TODO(erikkay): START_PAGE doesn't seem like the right transition in all
|
| // cases.
|
| browser::NavigateParams params(browser, extension_url,
|
| @@ -744,7 +757,7 @@ TabContents* Browser::OpenApplicationTab(Profile* profile,
|
| TabStripModel* model = browser->tabstrip_model();
|
| int tab_index = model->GetWrapperIndex(existing_tab);
|
|
|
| - existing_tab->OpenURL(extension->GetFullLaunchURL(), existing_tab->GetURL(),
|
| + existing_tab->OpenURL(extension_url, existing_tab->GetURL(),
|
| disposition, content::PAGE_TRANSITION_LINK);
|
| if (params.tabstrip_add_types & TabStripModel::ADD_PINNED) {
|
| model->SetTabPinned(tab_index, true);
|
| @@ -764,8 +777,9 @@ TabContents* Browser::OpenApplicationTab(Profile* profile,
|
| // Today we open the tab, but stay in full screen mode. Should we leave
|
| // full screen mode in this case?
|
| if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN &&
|
| - !browser->window()->IsFullscreen())
|
| + !browser->window()->IsFullscreen()) {
|
| browser->ToggleFullscreenMode(false);
|
| + }
|
|
|
| return contents;
|
| }
|
|
|