summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser.cc
diff options
context:
space:
mode:
authorerikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-12 17:28:56 +0000
committererikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-12 17:28:56 +0000
commitc28071ad39fdf60db886e6d6844da7c3331825a6 (patch)
tree89edfcbf7bd70f18191496fbefafe843316e6139 /chrome/browser/browser.cc
parenta883f8fc702c2cb37130361b7ddc6fc86a8f2edf (diff)
downloadchromium_src-c28071ad39fdf60db886e6d6844da7c3331825a6.zip
chromium_src-c28071ad39fdf60db886e6d6844da7c3331825a6.tar.gz
chromium_src-c28071ad39fdf60db886e6d6844da7c3331825a6.tar.bz2
Support app tabs as a launch point for apps. Also, move the logic for launching into Browser for easier access by the launcher.
BUG=none TEST=none Review URL: http://codereview.chromium.org/668245 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41441 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r--chrome/browser/browser.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index 00cccfa..f4e1b3c7 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -365,6 +365,41 @@ void Browser::OpenURLOffTheRecord(Profile* profile, const GURL& url) {
}
// static
+// TODO(erikkay): There are multiple reasons why this could fail. Should
+// this function return an error reason as well so that callers can show
+// reasonable errors?
+bool Browser::OpenApplication(Profile* profile, const std::string& app_id) {
+ ExtensionsService* extensions_service = profile->GetExtensionsService();
+ if (!extensions_service->is_ready())
+ return false;
+
+ // If the extension with |app_id| could't be found, most likely because it
+ // was uninstalled.
+ Extension* extension_app =
+ extensions_service->GetExtensionById(app_id, false);
+ if (!extension_app)
+ return false;
+
+ // TODO(erikkay): Support refocus.
+ Extension::AppLaunchType launch_type =
+ extension_app->app_launch_type();
+ switch (launch_type) {
+ case Extension::LAUNCH_WINDOW:
+ case Extension::LAUNCH_PANEL:
+ Browser::OpenApplicationWindow(profile, extension_app);
+ break;
+ case Extension::LAUNCH_TAB: {
+ return Browser::OpenApplicationTab(profile, extension_app);
+ break;
+ }
+ default:
+ NOTREACHED();
+ return false;
+ }
+ return true;
+}
+
+// static
void Browser::OpenApplicationWindow(Profile* profile, const GURL& url,
bool as_panel) {
std::wstring app_name = web_app::GenerateApplicationNameFromURL(url);
@@ -393,6 +428,32 @@ void Browser::OpenApplicationWindow(Profile* profile, const GURL& url,
}
// static
+void Browser::OpenApplicationWindow(Profile* profile, Extension* extension) {
+ OpenApplicationWindow(profile,
+ extension->app_launch_url(),
+ (extension->app_launch_type() == Extension::LAUNCH_PANEL));
+}
+
+// static
+bool Browser::OpenApplicationTab(Profile* profile, Extension* extension) {
+ DCHECK_EQ(extension->app_launch_type(), Extension::LAUNCH_TAB);
+
+ Browser* browser = BrowserList::GetLastActiveWithProfile(profile);
+ if (!browser || browser->type() != Browser::TYPE_NORMAL)
+ return false;
+
+ // TODO(erikkay): This doesn't seem like the right transition in all cases.
+ PageTransition::Type transition = PageTransition::START_PAGE;
+ GURL url = extension->app_launch_url();
+ TabContents* tab_contents =
+ browser->CreateTabContentsForURL(url, GURL(), profile,
+ transition, false, NULL);
+ tab_contents->SetAppExtension(extension);
+ browser->AddTab(tab_contents, transition);
+ return true;
+}
+
+// static
void Browser::OpenBookmarkManagerWindow(Profile* profile) {
Browser* browser = Browser::Create(profile);
browser->ShowBookmarkManagerTab();