summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroshima <oshima@chromium.org>2014-09-05 08:42:05 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-05 15:44:19 +0000
commitd74622266bc6eba7cecd1b036c166a6b252dc07f (patch)
tree123d67352435613e3c7f69b6711e5e9b8dad190f
parentae6c6a39a2bc6eb17c4bac6628db57e16f2bc743 (diff)
downloadchromium_src-d74622266bc6eba7cecd1b036c166a6b252dc07f.zip
chromium_src-d74622266bc6eba7cecd1b036c166a6b252dc07f.tar.gz
chromium_src-d74622266bc6eba7cecd1b036c166a6b252dc07f.tar.bz2
Support V1 app
BUG=410446 TEST=manual. launch webstore app from home card. Review URL: https://codereview.chromium.org/544813002 Cr-Commit-Position: refs/heads/master@{#293527}
-rw-r--r--athena/activity/activity_manager_unittest.cc6
-rw-r--r--athena/activity/public/activity_factory.h4
-rw-r--r--athena/content/content_activity_factory.cc3
-rw-r--r--athena/content/content_activity_factory.h1
-rw-r--r--athena/content/content_app_model_builder.cc3
-rw-r--r--athena/content/web_activity.cc9
-rw-r--r--athena/content/web_activity.h6
-rw-r--r--athena/extensions/chrome/DEPS9
-rw-r--r--athena/extensions/chrome/extensions_delegate_impl.cc23
-rw-r--r--athena/home/home_card_unittest.cc2
-rw-r--r--athena/main/placeholder.cc4
-rw-r--r--athena/main/url_search_provider.cc4
-rw-r--r--athena/test/sample_activity_factory.cc1
-rw-r--r--athena/test/sample_activity_factory.h1
-rw-r--r--chrome/browser/ui/extensions/application_launch.cc50
-rw-r--r--chrome/browser/ui/extensions/application_launch.h6
16 files changed, 82 insertions, 50 deletions
diff --git a/athena/activity/activity_manager_unittest.cc b/athena/activity/activity_manager_unittest.cc
index 5c45c0b..8ba1787 100644
--- a/athena/activity/activity_manager_unittest.cc
+++ b/athena/activity/activity_manager_unittest.cc
@@ -17,12 +17,12 @@ TEST_F(ActivityManagerTest, Basic) {
ActivityManagerImpl* activity_manager =
static_cast<ActivityManagerImpl*>(ActivityManager::Get());
Activity* activity1 = athena::ActivityFactory::Get()->CreateWebActivity(
- NULL, GURL());
+ NULL, base::string16(), GURL());
activity_manager->AddActivity(activity1);
EXPECT_EQ(1, activity_manager->num_activities());
- Activity* activity2 =
- athena::ActivityFactory::Get()->CreateWebActivity(NULL, GURL());
+ Activity* activity2 = athena::ActivityFactory::Get()->CreateWebActivity(
+ NULL, base::string16(), GURL());
activity_manager->AddActivity(activity2);
EXPECT_EQ(2, activity_manager->num_activities());
diff --git a/athena/activity/public/activity_factory.h b/athena/activity/public/activity_factory.h
index 91f1ec7..a8ca4af 100644
--- a/athena/activity/public/activity_factory.h
+++ b/athena/activity/public/activity_factory.h
@@ -33,8 +33,10 @@ class ATHENA_EXPORT ActivityFactory {
virtual ~ActivityFactory() {}
- // Create an activity of a web page.
+ // Create an activity of a web page. If |title| is empty, the title will be
+ // obtained from the web contents.
virtual Activity* CreateWebActivity(content::BrowserContext* browser_context,
+ const base::string16& title,
const GURL& url) = 0;
// Create an activity of an app with |app_window| for app shell environemnt.
diff --git a/athena/content/content_activity_factory.cc b/athena/content/content_activity_factory.cc
index 0503c60..aaa4e20 100644
--- a/athena/content/content_activity_factory.cc
+++ b/athena/content/content_activity_factory.cc
@@ -16,8 +16,9 @@ ContentActivityFactory::~ContentActivityFactory() {}
Activity* ContentActivityFactory::CreateWebActivity(
content::BrowserContext* browser_context,
+ const base::string16& title,
const GURL& url) {
- return new WebActivity(browser_context, url);
+ return new WebActivity(browser_context, title, url);
}
ActivityFactory* CreateContentActivityFactory() {
diff --git a/athena/content/content_activity_factory.h b/athena/content/content_activity_factory.h
index d118c81..a00d6db 100644
--- a/athena/content/content_activity_factory.h
+++ b/athena/content/content_activity_factory.h
@@ -17,6 +17,7 @@ class ContentActivityFactory : public ActivityFactory {
// Overridden from ActivityFactory:
virtual Activity* CreateWebActivity(content::BrowserContext* browser_context,
+ const base::string16& title,
const GURL& url) OVERRIDE;
virtual Activity* CreateAppActivity(extensions::ShellAppWindow* app_window,
const std::string& app_id) OVERRIDE;
diff --git a/athena/content/content_app_model_builder.cc b/athena/content/content_app_model_builder.cc
index bdec047..14ece4f 100644
--- a/athena/content/content_app_model_builder.cc
+++ b/athena/content/content_app_model_builder.cc
@@ -45,7 +45,8 @@ class DummyItem : public app_list::AppListItem {
// Overridden from app_list::AppListItem:
virtual void Activate(int event_flags) OVERRIDE {
ActivityManager::Get()->AddActivity(
- ActivityFactory::Get()->CreateWebActivity(browser_context_, url_));
+ ActivityFactory::Get()->CreateWebActivity(
+ browser_context_, base::string16(), url_));
}
GURL url_;
diff --git a/athena/content/web_activity.cc b/athena/content/web_activity.cc
index 5223944..4dca1c3 100644
--- a/athena/content/web_activity.cc
+++ b/athena/content/web_activity.cc
@@ -222,8 +222,8 @@ class AthenaWebView : public views::WebView {
case NEW_POPUP:
case NEW_WINDOW: {
ActivityManager::Get()->AddActivity(
- ActivityFactory::Get()->CreateWebActivity(browser_context(),
- params.url));
+ ActivityFactory::Get()->CreateWebActivity(
+ browser_context(), base::string16(), params.url));
break;
}
default:
@@ -325,8 +325,10 @@ class AthenaWebView : public views::WebView {
};
WebActivity::WebActivity(content::BrowserContext* browser_context,
+ const base::string16& title,
const GURL& url)
: browser_context_(browser_context),
+ title_(title),
url_(url),
web_view_(NULL),
title_color_(kDefaultTitleColor),
@@ -424,6 +426,9 @@ SkColor WebActivity::GetRepresentativeColor() const {
}
base::string16 WebActivity::GetTitle() const {
+ if (!title_.empty())
+ return title_;
+ // TODO(oshima): Use title set by the web contents.
return web_view_ ? base::UTF8ToUTF16(
web_view_->GetWebContents()->GetVisibleURL().host())
: base::string16();
diff --git a/athena/content/web_activity.h b/athena/content/web_activity.h
index a918bcd..7aa8a6d 100644
--- a/athena/content/web_activity.h
+++ b/athena/content/web_activity.h
@@ -7,6 +7,7 @@
#include "athena/activity/public/activity.h"
#include "athena/activity/public/activity_view_model.h"
+#include "base/strings/string16.h"
#include "content/public/browser/web_contents_observer.h"
#include "ui/gfx/image/image_skia.h"
@@ -28,7 +29,9 @@ class WebActivity : public Activity,
public ActivityViewModel,
public content::WebContentsObserver {
public:
- WebActivity(content::BrowserContext* context, const GURL& gurl);
+ WebActivity(content::BrowserContext* context,
+ const base::string16& title,
+ const GURL& gurl);
WebActivity(AthenaWebView* web_view);
protected:
@@ -71,6 +74,7 @@ class WebActivity : public Activity,
void ReloadAndObserve();
content::BrowserContext* browser_context_;
+ const base::string16 title_;
const GURL url_;
AthenaWebView* web_view_;
SkColor title_color_;
diff --git a/athena/extensions/chrome/DEPS b/athena/extensions/chrome/DEPS
index c716635..0ddcae3 100644
--- a/athena/extensions/chrome/DEPS
+++ b/athena/extensions/chrome/DEPS
@@ -1,14 +1,7 @@
include_rules = [
+ "+athena/activity/public",
"+chrome/browser",
"+chrome/common/extensions",
"+extensions/browser",
"+net/base",
]
-
-specific_include_rules = {
- "athena_apps_client\.cc": [
- # TODO(oshima): Remove this dependency.
- "+athena/activity/public"
- ],
-}
-
diff --git a/athena/extensions/chrome/extensions_delegate_impl.cc b/athena/extensions/chrome/extensions_delegate_impl.cc
index de97c30..89a1a47 100644
--- a/athena/extensions/chrome/extensions_delegate_impl.cc
+++ b/athena/extensions/chrome/extensions_delegate_impl.cc
@@ -4,8 +4,11 @@
#include "athena/extensions/public/extensions_delegate.h"
+#include "athena/activity/public/activity_factory.h"
+#include "athena/activity/public/activity_manager.h"
#include "athena/extensions/chrome/athena_apps_client.h"
#include "base/macros.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -71,14 +74,32 @@ class ChromeExtensionsDelegate : public ExtensionsDelegate {
}
params.container = extensions::LAUNCH_CONTAINER_WINDOW;
- OpenApplication(params);
+ // V2 apps
+ if (CanLaunchViaEvent(extension)) {
+ OpenApplication(params);
+ return true;
+ }
+ LaunchV1App(params, extension);
return true;
}
+
virtual bool UnloadApp(const std::string& app_id) OVERRIDE {
// TODO(skuhne): Implement using extension service.
return false;
}
+ void LaunchV1App(const AppLaunchParams& params,
+ const extensions::Extension* extension) {
+ // TODO(oshima): Just activate if the app is already running.
+ const GURL url_input = params.override_url;
+
+ DCHECK(!url_input.is_empty() || extension);
+ GURL url = UrlForExtension(extension, url_input);
+ athena::ActivityManager::Get()->AddActivity(
+ athena::ActivityFactory::Get()->CreateWebActivity(
+ GetBrowserContext(), base::UTF8ToUTF16(extension->name()), url));
+ }
+
// ExtensionService for the browser context this is created for.
ExtensionService* extension_service_;
diff --git a/athena/home/home_card_unittest.cc b/athena/home/home_card_unittest.cc
index 3b231dc..b7e9780 100644
--- a/athena/home/home_card_unittest.cc
+++ b/athena/home/home_card_unittest.cc
@@ -97,7 +97,7 @@ TEST_F(HomeCardTest, AppSelection) {
athena::ActivityManager::Get()->AddActivity(
athena::ActivityFactory::Get()->CreateWebActivity(
- NULL, GURL("http://www.google.com/")));
+ NULL, base::string16(), GURL("http://www.google.com/")));
EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
}
diff --git a/athena/main/placeholder.cc b/athena/main/placeholder.cc
index 7bdc086..d29f1ab 100644
--- a/athena/main/placeholder.cc
+++ b/athena/main/placeholder.cc
@@ -18,8 +18,8 @@ void CreateTestPages(content::BrowserContext* browser_context) {
};
for (size_t i = 0; i < arraysize(kTestURLs); ++i) {
athena::ActivityManager::Get()->AddActivity(
- athena::ActivityFactory::Get()->CreateWebActivity(browser_context,
- GURL(kTestURLs[i])));
+ athena::ActivityFactory::Get()->CreateWebActivity(
+ browser_context, base::string16(), GURL(kTestURLs[i])));
}
}
diff --git a/athena/main/url_search_provider.cc b/athena/main/url_search_provider.cc
index e2766c6..8c51952 100644
--- a/athena/main/url_search_provider.cc
+++ b/athena/main/url_search_provider.cc
@@ -183,8 +183,8 @@ class UrlSearchResult : public app_list::SearchResult {
// Overriddenn from app_list::SearchResult:
virtual void Open(int event_flags) OVERRIDE {
ActivityManager::Get()->AddActivity(
- ActivityFactory::Get()->CreateWebActivity(browser_context_,
- match_.destination_url));
+ ActivityFactory::Get()->CreateWebActivity(
+ browser_context_, base::string16(), match_.destination_url));
}
void UpdateIcon() {
diff --git a/athena/test/sample_activity_factory.cc b/athena/test/sample_activity_factory.cc
index 55bddeb..92fa71a5 100644
--- a/athena/test/sample_activity_factory.cc
+++ b/athena/test/sample_activity_factory.cc
@@ -29,6 +29,7 @@ SampleActivityFactory::~SampleActivityFactory() {}
Activity* SampleActivityFactory::CreateWebActivity(
content::BrowserContext* browser_context,
+ const base::string16& title,
const GURL& url) {
return new SampleActivity(
kDefaultColor, kDefaultContentColor, base::UTF8ToUTF16(url.spec()));
diff --git a/athena/test/sample_activity_factory.h b/athena/test/sample_activity_factory.h
index 0002daa..7c1764b6 100644
--- a/athena/test/sample_activity_factory.h
+++ b/athena/test/sample_activity_factory.h
@@ -18,6 +18,7 @@ class SampleActivityFactory : public ActivityFactory {
// Overridden from ActivityFactory:
virtual Activity* CreateWebActivity(content::BrowserContext* browser_context,
+ const base::string16& title,
const GURL& url) OVERRIDE;
virtual Activity* CreateAppActivity(extensions::ShellAppWindow* app_window,
const std::string& app_id) OVERRIDE;
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc
index d25a019..86b6eb7 100644
--- a/chrome/browser/ui/extensions/application_launch.cc
+++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -123,33 +123,6 @@ const Extension* GetExtension(const AppLaunchParams& params) {
ExtensionRegistry::TERMINATED);
}
-// 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) ||
- override_url.GetOrigin() == extension->url());
- url = override_url;
- } else {
- url = extensions::AppLaunchInfo::GetFullLaunchURL(extension);
- }
-
- // For extensions lacking launch urls, determine a reasonable fallback.
- if (!url.is_valid()) {
- url = extensions::ManifestURL::GetOptionsPage(extension);
- if (!url.is_valid())
- url = GURL(chrome::kChromeUIExtensionsURL);
- }
-
- return url;
-}
-
ui::WindowShowState DetermineWindowShowState(
Profile* profile,
extensions::LaunchContainer container,
@@ -467,3 +440,26 @@ bool CanLaunchViaEvent(const extensions::Extension* extension) {
extensions::Feature* feature = feature_provider->GetFeature("app.runtime");
return feature->IsAvailableToExtension(extension).is_available();
}
+
+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) ||
+ override_url.GetOrigin() == extension->url());
+ url = override_url;
+ } else {
+ url = extensions::AppLaunchInfo::GetFullLaunchURL(extension);
+ }
+
+ // For extensions lacking launch urls, determine a reasonable fallback.
+ if (!url.is_valid()) {
+ url = extensions::ManifestURL::GetOptionsPage(extension);
+ if (!url.is_valid())
+ url = GURL(chrome::kChromeUIExtensionsURL);
+ }
+
+ return url;
+}
diff --git a/chrome/browser/ui/extensions/application_launch.h b/chrome/browser/ui/extensions/application_launch.h
index a5c0b44..5f07ae0 100644
--- a/chrome/browser/ui/extensions/application_launch.h
+++ b/chrome/browser/ui/extensions/application_launch.h
@@ -100,4 +100,10 @@ content::WebContents* OpenAppShortcutWindow(Profile* profile,
// chrome.app.runtime.onLaunched event.
bool CanLaunchViaEvent(const extensions::Extension* 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.
+GURL UrlForExtension(const extensions::Extension* extension,
+ const GURL& override_url);
+
#endif // CHROME_BROWSER_UI_EXTENSIONS_APPLICATION_LAUNCH_H_