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_ |