summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/browser.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-15 05:33:11 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-15 05:33:11 +0000
commitb6cb770231a0ab13c1a5d8b227c874d3a473eb5f (patch)
tree32c27a17d1a334aaa87dc93d86bfe849e48d9b10 /chrome/browser/ui/browser.cc
parent54d1287371c5dbd65fcbe58a1277dbfb2f89ca25 (diff)
downloadchromium_src-b6cb770231a0ab13c1a5d8b227c874d3a473eb5f.zip
chromium_src-b6cb770231a0ab13c1a5d8b227c874d3a473eb5f.tar.gz
chromium_src-b6cb770231a0ab13c1a5d8b227c874d3a473eb5f.tar.bz2
Append parameters to webstore URL to indicate launch source.
BUG=82857 TEST=manual Review URL: http://codereview.chromium.org/8526017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110050 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/browser.cc')
-rw-r--r--chrome/browser/ui/browser.cc68
1 files changed, 41 insertions, 27 deletions
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 35f6c63..49d66f9 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;
}