diff options
author | oshima <oshima@chromium.org> | 2014-09-05 08:42:05 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-05 15:44:19 +0000 |
commit | d74622266bc6eba7cecd1b036c166a6b252dc07f (patch) | |
tree | 123d67352435613e3c7f69b6711e5e9b8dad190f | |
parent | ae6c6a39a2bc6eb17c4bac6628db57e16f2bc743 (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | athena/activity/public/activity_factory.h | 4 | ||||
-rw-r--r-- | athena/content/content_activity_factory.cc | 3 | ||||
-rw-r--r-- | athena/content/content_activity_factory.h | 1 | ||||
-rw-r--r-- | athena/content/content_app_model_builder.cc | 3 | ||||
-rw-r--r-- | athena/content/web_activity.cc | 9 | ||||
-rw-r--r-- | athena/content/web_activity.h | 6 | ||||
-rw-r--r-- | athena/extensions/chrome/DEPS | 9 | ||||
-rw-r--r-- | athena/extensions/chrome/extensions_delegate_impl.cc | 23 | ||||
-rw-r--r-- | athena/home/home_card_unittest.cc | 2 | ||||
-rw-r--r-- | athena/main/placeholder.cc | 4 | ||||
-rw-r--r-- | athena/main/url_search_provider.cc | 4 | ||||
-rw-r--r-- | athena/test/sample_activity_factory.cc | 1 | ||||
-rw-r--r-- | athena/test/sample_activity_factory.h | 1 | ||||
-rw-r--r-- | chrome/browser/ui/extensions/application_launch.cc | 50 | ||||
-rw-r--r-- | chrome/browser/ui/extensions/application_launch.h | 6 |
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_ |