Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2614)

Unified Diff: chrome/browser/ui/webui/mojo_web_ui_controller.h

Issue 1430313003: Change MojoWebUIController to use mojo::StrongBindingSet. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-geolocation-untangle
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_
« no previous file with comments | « chrome/browser/ui/webui/engagement/site_engagement_ui_handler.cc ('k') | chrome/browser/ui/webui/mojo_web_ui_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698