| 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 9b2e7cc55569a4e3c7e3ffd80031a12ca952e569..937c2b115b2d6ffbf0a7b0be9d08cf139e988584 100644
|
| --- a/chrome/browser/ui/webui/mojo_web_ui_controller.h
|
| +++ b/chrome/browser/ui/webui/mojo_web_ui_controller.h
|
| @@ -6,22 +6,17 @@
|
| #define CHROME_BROWSER_UI_WEBUI_MOJO_WEB_UI_CONTROLLER_H_
|
|
|
| #include <string>
|
| +#include <utility>
|
|
|
| -#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"
|
| +#include "mojo/common/strong_binding_set.h"
|
|
|
| class MojoWebUIHandler;
|
|
|
| -namespace content {
|
| -class WebUIDataSource;
|
| -}
|
| -
|
| class MojoWebUIControllerBase : public content::WebUIController {
|
| public:
|
| explicit MojoWebUIControllerBase(content::WebUI* contents);
|
| @@ -31,42 +26,39 @@ class MojoWebUIControllerBase : public content::WebUIController {
|
| void RenderViewCreated(content::RenderViewHost* render_view_host) override;
|
|
|
| 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
|
| -// files, eg:
|
| -// AddMojoResourcePath("chrome/browser/ui/webui/omnibox/omnibox.mojom",
|
| -// IDR_OMNIBOX_MOJO_JS);
|
| -// . Override BindUIHandler() to create and bind the implementation of the
|
| -// bindings.
|
| -template <typename Interface>
|
| +// expected that |Impl| is constructible from a content::WebUI. A subclass
|
| +// should, in its constructor, invoke AddMojoResources() on its
|
| +// content::WebUIDataSource to register the bindings files.
|
| +template <typename Impl>
|
| class MojoWebUIController : public MojoWebUIControllerBase {
|
| public:
|
| explicit MojoWebUIController(content::WebUI* contents)
|
| : MojoWebUIControllerBase(contents), weak_factory_(this) {}
|
| - ~MojoWebUIController() override {}
|
| + ~MojoWebUIController() override = default;
|
| +
|
| void RenderViewCreated(content::RenderViewHost* render_view_host) override {
|
| MojoWebUIControllerBase::RenderViewCreated(render_view_host);
|
| - render_view_host->GetMainFrame()->GetServiceRegistry()->
|
| - AddService<Interface>(
|
| - base::Bind(&MojoWebUIController::BindUIHandler,
|
| - weak_factory_.GetWeakPtr()));
|
| + render_view_host->GetMainFrame()->GetServiceRegistry()->AddService(
|
| + base::Bind(&MojoWebUIController::BindUIHandler,
|
| + weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| - protected:
|
| + private:
|
| // Invoked to create the specific bindings implementation.
|
| - virtual void BindUIHandler(mojo::InterfaceRequest<Interface> request) = 0;
|
| + void BindUIHandler(
|
| + mojo::InterfaceRequest<typename mojo::StrongBindingSet<Impl>::Interface>
|
| + request) {
|
| + services_.EmplaceService(std::move(request), web_ui());
|
| + }
|
| +
|
| + mojo::StrongBindingSet<Impl> services_;
|
|
|
| - private:
|
| base::WeakPtrFactory<MojoWebUIController> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MojoWebUIController);
|
| };
|
| -
|
| #endif // CHROME_BROWSER_UI_WEBUI_MOJO_WEB_UI_CONTROLLER_H_
|
|
|