diff options
author | jamescook <jamescook@chromium.org> | 2014-11-19 16:49:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-20 00:50:03 +0000 |
commit | 4d8d72ef85260841830d4215f0fcfaf9d49fd5b6 (patch) | |
tree | 5bdcfa58415a399e82368b1a27565725f12bd90c | |
parent | 91b70a2fb6f89efc9bf3f6ec191bfa8846796285 (diff) | |
download | chromium_src-4d8d72ef85260841830d4215f0fcfaf9d49fd5b6.zip chromium_src-4d8d72ef85260841830d4215f0fcfaf9d49fd5b6.tar.gz chromium_src-4d8d72ef85260841830d4215f0fcfaf9d49fd5b6.tar.bz2 |
Allow app_shell embedders to override extensions client interfaces
This includes ExtensionsClient and ExtensionsBrowserClient.
BUG=none
TEST=app_shell_unittests
Review URL: https://codereview.chromium.org/717233003
Cr-Commit-Position: refs/heads/master@{#304946}
4 files changed, 35 insertions, 9 deletions
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc index 5651795..7af36498 100644 --- a/extensions/shell/browser/shell_browser_main_parts.cc +++ b/extensions/shell/browser/shell_browser_main_parts.cc @@ -143,11 +143,11 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() { device_client_.reset(new ShellDeviceClient); - extensions_client_.reset(new ShellExtensionsClient()); + extensions_client_.reset(CreateExtensionsClient()); ExtensionsClient::Set(extensions_client_.get()); extensions_browser_client_.reset( - new ShellExtensionsBrowserClient(browser_context_.get())); + CreateExtensionsBrowserClient(browser_context_.get())); ExtensionsBrowserClient::Set(extensions_browser_client_.get()); omaha_query_params_delegate_.reset(new ShellOmahaQueryParamsDelegate); @@ -252,6 +252,15 @@ void ShellBrowserMainParts::PostDestroyThreads() { #endif } +ExtensionsClient* ShellBrowserMainParts::CreateExtensionsClient() { + return new ShellExtensionsClient(); +} + +ExtensionsBrowserClient* ShellBrowserMainParts::CreateExtensionsBrowserClient( + content::BrowserContext* context) { + return new ShellExtensionsBrowserClient(context); +} + void ShellBrowserMainParts::CreateExtensionSystem() { DCHECK(browser_context_); extension_system_ = static_cast<ShellExtensionSystem*>( diff --git a/extensions/shell/browser/shell_browser_main_parts.h b/extensions/shell/browser/shell_browser_main_parts.h index 9bce5f0..29032b1 100644 --- a/extensions/shell/browser/shell_browser_main_parts.h +++ b/extensions/shell/browser/shell_browser_main_parts.h @@ -14,6 +14,7 @@ #include "ui/aura/window_tree_host_observer.h" namespace content { +class BrowserContext; class DevToolsHttpHandler; struct MainFunctionParams; } @@ -30,11 +31,11 @@ namespace extensions { class AppWindowClient; class DesktopController; +class ExtensionsBrowserClient; +class ExtensionsClient; class ShellBrowserContext; class ShellBrowserMainDelegate; class ShellDeviceClient; -class ShellExtensionsBrowserClient; -class ShellExtensionsClient; class ShellExtensionSystem; class ShellOAuth2TokenService; class ShellOmahaQueryParamsDelegate; @@ -65,6 +66,13 @@ class ShellBrowserMainParts : public content::BrowserMainParts { void PostMainMessageLoopRun() override; void PostDestroyThreads() override; + protected: + // app_shell embedders may need custom extensions client interfaces. + // This class takes ownership of the returned objects. + virtual ExtensionsClient* CreateExtensionsClient(); + virtual ExtensionsBrowserClient* CreateExtensionsBrowserClient( + content::BrowserContext* context); + private: // Creates and initializes the ExtensionSystem. void CreateExtensionSystem(); @@ -77,8 +85,8 @@ class ShellBrowserMainParts : public content::BrowserMainParts { scoped_ptr<ShellBrowserContext> browser_context_; scoped_ptr<ShellDeviceClient> device_client_; scoped_ptr<AppWindowClient> app_window_client_; - scoped_ptr<ShellExtensionsClient> extensions_client_; - scoped_ptr<ShellExtensionsBrowserClient> extensions_browser_client_; + scoped_ptr<ExtensionsClient> extensions_client_; + scoped_ptr<ExtensionsBrowserClient> extensions_browser_client_; scoped_ptr<net::NetLog> net_log_; scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler_; scoped_ptr<ShellOmahaQueryParamsDelegate> omaha_query_params_delegate_; diff --git a/extensions/shell/renderer/shell_content_renderer_client.cc b/extensions/shell/renderer/shell_content_renderer_client.cc index 216eac6..a56c009 100644 --- a/extensions/shell/renderer/shell_content_renderer_client.cc +++ b/extensions/shell/renderer/shell_content_renderer_client.cc @@ -79,7 +79,7 @@ ShellContentRendererClient::~ShellContentRendererClient() { void ShellContentRendererClient::RenderThreadStarted() { RenderThread* thread = RenderThread::Get(); - extensions_client_.reset(new ShellExtensionsClient); + extensions_client_.reset(CreateExtensionsClient()); ExtensionsClient::Set(extensions_client_.get()); extensions_renderer_client_.reset(new ShellExtensionsRendererClient); @@ -189,4 +189,8 @@ ShellContentRendererClient::CreateBrowserPluginDelegate( } } +ExtensionsClient* ShellContentRendererClient::CreateExtensionsClient() { + return new ShellExtensionsClient; +} + } // namespace extensions diff --git a/extensions/shell/renderer/shell_content_renderer_client.h b/extensions/shell/renderer/shell_content_renderer_client.h index 6f62398..b86fa0e 100644 --- a/extensions/shell/renderer/shell_content_renderer_client.h +++ b/extensions/shell/renderer/shell_content_renderer_client.h @@ -14,7 +14,7 @@ namespace extensions { class Dispatcher; class DispatcherDelegate; -class ShellExtensionsClient; +class ExtensionsClient; class ShellExtensionsRendererClient; class ShellRendererMainDelegate; @@ -52,8 +52,13 @@ class ShellContentRendererClient : public content::ContentRendererClient { const std::string& mime_type, const GURL& original_url) override; + protected: + // app_shell embedders may need custom extensions client interfaces. + // This class takes ownership of the returned object. + virtual ExtensionsClient* CreateExtensionsClient(); + private: - scoped_ptr<ShellExtensionsClient> extensions_client_; + scoped_ptr<ExtensionsClient> extensions_client_; scoped_ptr<ShellExtensionsRendererClient> extensions_renderer_client_; scoped_ptr<DispatcherDelegate> extension_dispatcher_delegate_; scoped_ptr<Dispatcher> extension_dispatcher_; |