Commit 68096136 authored by hashimoto's avatar hashimoto Committed by Commit bot

Support app.window.create on athena

*src/athena
Change ShellAppActivity to accept both AppWindow and ShellAppWindow.
Implement AppsClient to create NativeAppWindow and AppDelegate instances.

*src/extensions/shell
Add a new method DefaultShellBrowserMainDelegate::CreateAppsClient() to inject athena's AppsClient.

*src/extensions/browser
Add missing dtor to extensions::AppsClient to destroy an instance with a base class pointer in DefaultShellBrowserMainDelegate.

BUG=387288
TBR=benwells@chromium.org for the addition of the missing dtor of extensions::AppsClient.

Review URL: https://codereview.chromium.org/552133003

Cr-Commit-Position: refs/heads/master@{#294363}
parent 5e25a43e
include_rules = [ include_rules = [
"+extensions/shell/browser/shell_app_window.h", "+extensions/browser/app_window",
"+extensions/shell/browser/shell_app_window.h",
] ]
...@@ -17,7 +17,7 @@ Activity* ContentActivityFactory::CreateAppActivity( ...@@ -17,7 +17,7 @@ Activity* ContentActivityFactory::CreateAppActivity(
Activity* ContentActivityFactory::CreateAppActivity( Activity* ContentActivityFactory::CreateAppActivity(
extensions::AppWindow* app_window, extensions::AppWindow* app_window,
views::WebView* web_view) { views::WebView* web_view) {
return NULL; return new ShellAppActivity(app_window);
} }
} // namespace athena } // namespace athena
...@@ -5,17 +5,25 @@ ...@@ -5,17 +5,25 @@
#include "athena/content/shell/shell_app_activity.h" #include "athena/content/shell/shell_app_activity.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "extensions/browser/app_window/app_window.h"
#include "extensions/browser/app_window/native_app_window.h"
#include "extensions/shell/browser/shell_app_window.h" #include "extensions/shell/browser/shell_app_window.h"
#include "ui/views/controls/webview/webview.h" #include "ui/views/controls/webview/webview.h"
namespace athena { namespace athena {
ShellAppActivity::ShellAppActivity(extensions::AppWindow* app_window)
: AppActivity(app_window->extension_id()), app_window_(app_window) {
}
ShellAppActivity::ShellAppActivity(extensions::ShellAppWindow* app_window, ShellAppActivity::ShellAppActivity(extensions::ShellAppWindow* app_window,
const std::string& app_id) const std::string& app_id)
: AppActivity(app_id), shell_app_window_(app_window) { : AppActivity(app_id), app_window_(NULL), shell_app_window_(app_window) {
} }
ShellAppActivity::~ShellAppActivity() { ShellAppActivity::~ShellAppActivity() {
if (app_window_)
app_window_->GetBaseWindow()->Close(); // Deletes |app_window_|.
} }
views::Widget* ShellAppActivity::CreateWidget() { views::Widget* ShellAppActivity::CreateWidget() {
...@@ -24,6 +32,7 @@ views::Widget* ShellAppActivity::CreateWidget() { ...@@ -24,6 +32,7 @@ views::Widget* ShellAppActivity::CreateWidget() {
views::WebView* ShellAppActivity::GetWebView() { views::WebView* ShellAppActivity::GetWebView() {
content::WebContents* web_contents = content::WebContents* web_contents =
app_window_ ? app_window_->web_contents() :
shell_app_window_->GetAssociatedWebContents(); shell_app_window_->GetAssociatedWebContents();
views::WebView* web_view = views::WebView* web_view =
new views::WebView(web_contents->GetBrowserContext()); new views::WebView(web_contents->GetBrowserContext());
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
namespace extensions { namespace extensions {
class AppWindow;
class ShellAppWindow; class ShellAppWindow;
} }
...@@ -17,6 +18,8 @@ namespace athena { ...@@ -17,6 +18,8 @@ namespace athena {
class ShellAppActivity : public AppActivity { class ShellAppActivity : public AppActivity {
public: public:
explicit ShellAppActivity(extensions::AppWindow* app_window);
// TODO(hashimoto) Remove this.
ShellAppActivity(extensions::ShellAppWindow* app_window, ShellAppActivity(extensions::ShellAppWindow* app_window,
const std::string& app_id); const std::string& app_id);
virtual ~ShellAppActivity(); virtual ~ShellAppActivity();
...@@ -28,6 +31,7 @@ class ShellAppActivity : public AppActivity { ...@@ -28,6 +31,7 @@ class ShellAppActivity : public AppActivity {
// AppActivity: // AppActivity:
virtual views::WebView* GetWebView() OVERRIDE; virtual views::WebView* GetWebView() OVERRIDE;
extensions::AppWindow* app_window_;
scoped_ptr<extensions::ShellAppWindow> shell_app_window_; scoped_ptr<extensions::ShellAppWindow> shell_app_window_;
DISALLOW_COPY_AND_ASSIGN(ShellAppActivity); DISALLOW_COPY_AND_ASSIGN(ShellAppActivity);
......
...@@ -34,6 +34,7 @@ include_rules = [ ...@@ -34,6 +34,7 @@ include_rules = [
specific_include_rules = { specific_include_rules = {
"athena_main\.cc": [ "athena_main\.cc": [
"+content/public/app", "+content/public/app",
"+extensions/browser/app_window",
"+extensions/shell/app", "+extensions/shell/app",
"+extensions/shell/browser", "+extensions/shell/browser",
"+extensions/shell/common", "+extensions/shell/common",
......
...@@ -17,12 +17,16 @@ ...@@ -17,12 +17,16 @@
#include "components/pdf/renderer/ppb_pdf_impl.h" #include "components/pdf/renderer/ppb_pdf_impl.h"
#include "content/public/app/content_main.h" #include "content/public/app/content_main.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "extensions/browser/app_window/app_window.h"
#include "extensions/browser/app_window/apps_client.h"
#include "extensions/shell/app/shell_main_delegate.h" #include "extensions/shell/app/shell_main_delegate.h"
#include "extensions/shell/browser/desktop_controller.h" #include "extensions/shell/browser/desktop_controller.h"
#include "extensions/shell/browser/shell_app_delegate.h"
#include "extensions/shell/browser/shell_app_window.h" #include "extensions/shell/browser/shell_app_window.h"
#include "extensions/shell/browser/shell_browser_main_delegate.h" #include "extensions/shell/browser/shell_browser_main_delegate.h"
#include "extensions/shell/browser/shell_content_browser_client.h" #include "extensions/shell/browser/shell_content_browser_client.h"
#include "extensions/shell/browser/shell_extension_system.h" #include "extensions/shell/browser/shell_extension_system.h"
#include "extensions/shell/browser/shell_native_app_window.h"
#include "extensions/shell/common/shell_content_client.h" #include "extensions/shell/common/shell_content_client.h"
#include "extensions/shell/common/switches.h" #include "extensions/shell/common/switches.h"
#include "extensions/shell/renderer/shell_content_renderer_client.h" #include "extensions/shell/renderer/shell_content_renderer_client.h"
...@@ -84,6 +88,50 @@ class AthenaDesktopController : public extensions::DesktopController { ...@@ -84,6 +88,50 @@ class AthenaDesktopController : public extensions::DesktopController {
DISALLOW_COPY_AND_ASSIGN(AthenaDesktopController); DISALLOW_COPY_AND_ASSIGN(AthenaDesktopController);
}; };
class AthenaAppsClient : public extensions::AppsClient {
public:
AthenaAppsClient() {}
virtual ~AthenaAppsClient() {}
// extensions::AppsClient:
virtual std::vector<content::BrowserContext*>
GetLoadedBrowserContexts() OVERRIDE {
NOTIMPLEMENTED();
return std::vector<content::BrowserContext*>();
}
virtual extensions::AppWindow* CreateAppWindow(
content::BrowserContext* context,
const extensions::Extension* extension) OVERRIDE {
return new extensions::AppWindow(
context, new extensions::ShellAppDelegate, extension);
}
virtual extensions::NativeAppWindow* CreateNativeAppWindow(
extensions::AppWindow* window,
const extensions::AppWindow::CreateParams& params) OVERRIDE {
athena::ActivityManager::Get()->AddActivity(
athena::ActivityFactory::Get()->CreateAppActivity(window, NULL));
return new extensions::ShellNativeAppWindow(window, params);
}
virtual void IncrementKeepAliveCount() OVERRIDE {}
virtual void DecrementKeepAliveCount() OVERRIDE {}
virtual void OpenDevToolsWindow(content::WebContents* web_contents,
const base::Closure& callback) OVERRIDE {
NOTIMPLEMENTED();
}
virtual bool IsCurrentChannelOlderThanDev() OVERRIDE {
return false;
}
private:
DISALLOW_COPY_AND_ASSIGN(AthenaAppsClient);
};
class AthenaBrowserMainDelegate : public extensions::ShellBrowserMainDelegate { class AthenaBrowserMainDelegate : public extensions::ShellBrowserMainDelegate {
public: public:
AthenaBrowserMainDelegate() {} AthenaBrowserMainDelegate() {}
...@@ -122,6 +170,10 @@ class AthenaBrowserMainDelegate : public extensions::ShellBrowserMainDelegate { ...@@ -122,6 +170,10 @@ class AthenaBrowserMainDelegate : public extensions::ShellBrowserMainDelegate {
return new AthenaDesktopController(); return new AthenaDesktopController();
} }
virtual extensions::AppsClient* CreateAppsClient() OVERRIDE {
return new AthenaAppsClient();
}
private: private:
DISALLOW_COPY_AND_ASSIGN(AthenaBrowserMainDelegate); DISALLOW_COPY_AND_ASSIGN(AthenaBrowserMainDelegate);
}; };
......
...@@ -26,6 +26,8 @@ class NativeAppWindow; ...@@ -26,6 +26,8 @@ class NativeAppWindow;
// AppWindowClient. // AppWindowClient.
class AppsClient { class AppsClient {
public: public:
virtual ~AppsClient() {}
// Get all loaded browser contexts. // Get all loaded browser contexts.
virtual std::vector<content::BrowserContext*> GetLoadedBrowserContexts() = 0; virtual std::vector<content::BrowserContext*> GetLoadedBrowserContexts() = 0;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "extensions/shell/browser/shell_apps_client.h"
#include "extensions/shell/browser/shell_desktop_controller.h" #include "extensions/shell/browser/shell_desktop_controller.h"
#include "extensions/shell/browser/shell_extension_system.h" #include "extensions/shell/browser/shell_extension_system.h"
#include "extensions/shell/common/switches.h" #include "extensions/shell/common/switches.h"
...@@ -45,4 +46,8 @@ DesktopController* DefaultShellBrowserMainDelegate::CreateDesktopController() { ...@@ -45,4 +46,8 @@ DesktopController* DefaultShellBrowserMainDelegate::CreateDesktopController() {
return new ShellDesktopController(); return new ShellDesktopController();
} }
AppsClient* DefaultShellBrowserMainDelegate::CreateAppsClient() {
return new ShellAppsClient();
}
} // namespace extensions } // namespace extensions
...@@ -22,6 +22,7 @@ class DefaultShellBrowserMainDelegate : public ShellBrowserMainDelegate { ...@@ -22,6 +22,7 @@ class DefaultShellBrowserMainDelegate : public ShellBrowserMainDelegate {
virtual void Start(content::BrowserContext* context) OVERRIDE; virtual void Start(content::BrowserContext* context) OVERRIDE;
virtual void Shutdown() OVERRIDE; virtual void Shutdown() OVERRIDE;
virtual DesktopController* CreateDesktopController() OVERRIDE; virtual DesktopController* CreateDesktopController() OVERRIDE;
virtual AppsClient* CreateAppsClient() OVERRIDE;
private: private:
DISALLOW_COPY_AND_ASSIGN(DefaultShellBrowserMainDelegate); DISALLOW_COPY_AND_ASSIGN(DefaultShellBrowserMainDelegate);
......
...@@ -11,6 +11,7 @@ class BrowserContext; ...@@ -11,6 +11,7 @@ class BrowserContext;
namespace extensions { namespace extensions {
class AppsClient;
class DesktopController; class DesktopController;
class ShellBrowserMainDelegate { class ShellBrowserMainDelegate {
...@@ -29,6 +30,9 @@ class ShellBrowserMainDelegate { ...@@ -29,6 +30,9 @@ class ShellBrowserMainDelegate {
// and window manager. Subclass may return its subclass to customize the // and window manager. Subclass may return its subclass to customize the
// windo manager. // windo manager.
virtual DesktopController* CreateDesktopController() = 0; virtual DesktopController* CreateDesktopController() = 0;
// Creates the AppsClient instance to support app.window extension API.
virtual AppsClient* CreateAppsClient() = 0;
}; };
} // namespace extensions } // namespace extensions
......
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
#include "content/public/common/result_codes.h" #include "content/public/common/result_codes.h"
#include "content/shell/browser/shell_devtools_delegate.h" #include "content/shell/browser/shell_devtools_delegate.h"
#include "content/shell/browser/shell_net_log.h" #include "content/shell/browser/shell_net_log.h"
#include "extensions/browser/app_window/apps_client.h"
#include "extensions/browser/browser_context_keyed_service_factories.h" #include "extensions/browser/browser_context_keyed_service_factories.h"
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/shell/browser/shell_apps_client.h"
#include "extensions/shell/browser/shell_browser_context.h" #include "extensions/shell/browser/shell_browser_context.h"
#include "extensions/shell/browser/shell_browser_main_delegate.h" #include "extensions/shell/browser/shell_browser_main_delegate.h"
#include "extensions/shell/browser/shell_desktop_controller.h" #include "extensions/shell/browser/shell_desktop_controller.h"
...@@ -118,7 +118,7 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() { ...@@ -118,7 +118,7 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() {
device_client_.reset(new ShellDeviceClient); device_client_.reset(new ShellDeviceClient);
apps_client_.reset(new ShellAppsClient()); apps_client_.reset(browser_main_delegate_->CreateAppsClient());
extensions::AppsClient::Set(apps_client_.get()); extensions::AppsClient::Set(apps_client_.get());
extensions_client_.reset(new ShellExtensionsClient()); extensions_client_.reset(new ShellExtensionsClient());
......
...@@ -27,8 +27,8 @@ class NetLog; ...@@ -27,8 +27,8 @@ class NetLog;
namespace extensions { namespace extensions {
class AppsClient;
class DesktopController; class DesktopController;
class ShellAppsClient;
class ShellBrowserContext; class ShellBrowserContext;
class ShellBrowserMainDelegate; class ShellBrowserMainDelegate;
class ShellDeviceClient; class ShellDeviceClient;
...@@ -74,7 +74,7 @@ class ShellBrowserMainParts : public content::BrowserMainParts { ...@@ -74,7 +74,7 @@ class ShellBrowserMainParts : public content::BrowserMainParts {
scoped_ptr<DesktopController> desktop_controller_; scoped_ptr<DesktopController> desktop_controller_;
scoped_ptr<ShellBrowserContext> browser_context_; scoped_ptr<ShellBrowserContext> browser_context_;
scoped_ptr<ShellDeviceClient> device_client_; scoped_ptr<ShellDeviceClient> device_client_;
scoped_ptr<ShellAppsClient> apps_client_; scoped_ptr<AppsClient> apps_client_;
scoped_ptr<ShellExtensionsClient> extensions_client_; scoped_ptr<ShellExtensionsClient> extensions_client_;
scoped_ptr<ShellExtensionsBrowserClient> extensions_browser_client_; scoped_ptr<ShellExtensionsBrowserClient> extensions_browser_client_;
scoped_ptr<net::NetLog> net_log_; scoped_ptr<net::NetLog> net_log_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment