Chromium Code Reviews| Index: chrome/browser/ui/webui/mojo_web_ui_controller.h |
| diff --git a/chrome/browser/ui/webui/mojo_web_ui_controller.h b/chrome/browser/ui/webui/mojo_web_ui_controller.h |
| index 35ba56d82f841502a186445f2feac4132354fd46..74ddccf5e086269c617f92552279fb618370dc1b 100644 |
| --- a/chrome/browser/ui/webui/mojo_web_ui_controller.h |
| +++ b/chrome/browser/ui/webui/mojo_web_ui_controller.h |
| @@ -9,7 +9,11 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| +#include "chrome/browser/ui/webui/mojo_web_ui_handler.h" |
| +#include "content/public/browser/render_frame_host.h" |
| +#include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_ui_controller.h" |
| +#include "content/public/common/service_registry.h" |
| #include "mojo/public/cpp/system/core.h" |
| class MojoWebUIHandler; |
| @@ -18,6 +22,26 @@ namespace content { |
| class WebUIDataSource; |
| } |
| +class MojoWebUIControllerBase : public content::WebUIController { |
| + public: |
| + explicit MojoWebUIControllerBase(content::WebUI* contents); |
| + virtual ~MojoWebUIControllerBase(); |
| + |
| + // WebUIController overrides: |
| + virtual void RenderViewCreated( |
| + content::RenderViewHost* render_view_host) OVERRIDE; |
| + |
| + protected: |
| + // Invoke to register mapping between binding file and resource id (IDR_...). |
| + void AddMojoResourcePath(const std::string& path, int resource_id); |
| + |
| + private: |
| + // Bindings files are registered here. |
| + content::WebUIDataSource* mojo_data_source_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MojoWebUIControllerBase); |
| +}; |
| + |
| // MojoWebUIController is intended for web ui pages that use mojo. It is |
| // expected that subclasses will do two things: |
| // . In the constructor invoke AddMojoResourcePath() to register the bindings |
| @@ -25,29 +49,31 @@ class WebUIDataSource; |
| // AddMojoResourcePath("chrome/browser/ui/webui/omnibox/omnibox.mojom", |
| // IDR_OMNIBOX_MOJO_JS); |
| // . Override CreateUIHandler() to create the implementation of the bindings. |
| -class MojoWebUIController : public content::WebUIController { |
| +template <typename Interface> |
| +class MojoWebUIController : public MojoWebUIControllerBase { |
| public: |
| - explicit MojoWebUIController(content::WebUI* contents); |
| - virtual ~MojoWebUIController(); |
| - |
| - // WebUIController overrides: |
| + explicit MojoWebUIController(content::WebUI* contents) |
| + : MojoWebUIControllerBase(contents), weak_factory_(this) {} |
| + virtual ~MojoWebUIController() {} |
| virtual void RenderViewCreated( |
| - content::RenderViewHost* render_view_host) OVERRIDE; |
| + content::RenderViewHost* render_view_host) OVERRIDE { |
| + MojoWebUIControllerBase::RenderViewCreated(render_view_host); |
| + render_view_host->GetMainFrame() |
| + ->GetServiceRegistry() |
|
darin (slow to review)
2014/06/21 04:44:15
nit: line break after operators
Sam McNally
2014/06/24 08:45:01
Done.
|
| + ->AddService<Interface>( |
| + base::Bind(&MojoWebUIController::CreateAndStoreUIHandler, |
| + weak_factory_.GetWeakPtr())); |
| + } |
| protected: |
| - // Invoke to register mapping between binding file and resource id (IDR_...). |
| - void AddMojoResourcePath(const std::string& path, int resource_id); |
| - |
| // Invoked to create the specific bindings implementation. |
| virtual scoped_ptr<MojoWebUIHandler> CreateUIHandler( |
| - mojo::ScopedMessagePipeHandle handle_to_page) = 0; |
| + mojo::InterfaceRequest<Interface> request) = 0; |
| private: |
| - // Invoked in response to a connection from the renderer. |
| - void CreateAndStoreUIHandler(mojo::ScopedMessagePipeHandle handle); |
| - |
| - // Bindings files are registered here. |
| - content::WebUIDataSource* mojo_data_source_; |
| + void CreateAndStoreUIHandler(mojo::InterfaceRequest<Interface> request) { |
| + ui_handler_ = CreateUIHandler(request.Pass()); |
| + } |
| scoped_ptr<MojoWebUIHandler> ui_handler_; |