Commit f82310da authored by Christopher Lam's avatar Christopher Lam Committed by Commit Bot

Allow multiple Mojo handlers on a single WebUI.

This CL changes MojoWebUIController to use a templated
AddHandlerToRegistry function which allows subclasses to add multiple
interfaces to the binder registry.

TBR=khorimoto@chromium.org

Change-Id: I943e3d583c9a3c8bb08873001cc533c2d23a0bcf
Reviewed-on: https://chromium-review.googlesource.com/991497
Commit-Queue: calamity <calamity@chromium.org>
Reviewed-by: default avatarcalamity <calamity@chromium.org>
Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@chromium.org>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#551256}
parent c4fbef24
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_data_source.h"
BluetoothInternalsUI::BluetoothInternalsUI(content::WebUI* web_ui) BluetoothInternalsUI::BluetoothInternalsUI(content::WebUI* web_ui)
: ui::MojoWebUIController<mojom::BluetoothInternalsHandler>(web_ui) { : ui::MojoWebUIController(web_ui) {
// Set up the chrome://bluetooth-internals source. // Set up the chrome://bluetooth-internals source.
content::WebUIDataSource* html_source = content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(chrome::kChromeUIBluetoothInternalsHost); content::WebUIDataSource::Create(chrome::kChromeUIBluetoothInternalsHost);
...@@ -63,11 +63,14 @@ BluetoothInternalsUI::BluetoothInternalsUI(content::WebUI* web_ui) ...@@ -63,11 +63,14 @@ BluetoothInternalsUI::BluetoothInternalsUI(content::WebUI* web_ui)
Profile* profile = Profile::FromWebUI(web_ui); Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, html_source); content::WebUIDataSource::Add(profile, html_source);
AddHandlerToRegistry(
base::BindRepeating(&BluetoothInternalsUI::BindBluetoothInternalsHandler,
base::Unretained(this)));
} }
BluetoothInternalsUI::~BluetoothInternalsUI() {} BluetoothInternalsUI::~BluetoothInternalsUI() {}
void BluetoothInternalsUI::BindUIHandler( void BluetoothInternalsUI::BindBluetoothInternalsHandler(
mojom::BluetoothInternalsHandlerRequest request) { mojom::BluetoothInternalsHandlerRequest request) {
page_handler_.reset(new BluetoothInternalsHandler(std::move(request))); page_handler_.reset(new BluetoothInternalsHandler(std::move(request)));
} }
...@@ -12,18 +12,14 @@ ...@@ -12,18 +12,14 @@
class BluetoothInternalsHandler; class BluetoothInternalsHandler;
// The WebUI for chrome://bluetooth-internals // The WebUI for chrome://bluetooth-internals
class BluetoothInternalsUI class BluetoothInternalsUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<mojom::BluetoothInternalsHandler> {
public: public:
explicit BluetoothInternalsUI(content::WebUI* web_ui); explicit BluetoothInternalsUI(content::WebUI* web_ui);
~BluetoothInternalsUI() override; ~BluetoothInternalsUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindBluetoothInternalsHandler(
void BindUIHandler( mojom::BluetoothInternalsHandlerRequest request);
// mojo::InterfaceRequest<mojom::BluetoothInternalsHandler> request)
// override;
mojom::BluetoothInternalsHandlerRequest request) override;
std::unique_ptr<BluetoothInternalsHandler> page_handler_; std::unique_ptr<BluetoothInternalsHandler> page_handler_;
......
...@@ -150,7 +150,7 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider { ...@@ -150,7 +150,7 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider {
} // namespace } // namespace
DiscardsUI::DiscardsUI(content::WebUI* web_ui) DiscardsUI::DiscardsUI(content::WebUI* web_ui)
: ui::MojoWebUIController<mojom::DiscardsDetailsProvider>(web_ui) { : ui::MojoWebUIController(web_ui) {
std::unique_ptr<content::WebUIDataSource> source( std::unique_ptr<content::WebUIDataSource> source(
content::WebUIDataSource::Create(chrome::kChromeUIDiscardsHost)); content::WebUIDataSource::Create(chrome::kChromeUIDiscardsHost));
...@@ -163,11 +163,14 @@ DiscardsUI::DiscardsUI(content::WebUI* web_ui) ...@@ -163,11 +163,14 @@ DiscardsUI::DiscardsUI(content::WebUI* web_ui)
Profile* profile = Profile::FromWebUI(web_ui); Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, source.release()); content::WebUIDataSource::Add(profile, source.release());
AddHandlerToRegistry(base::BindRepeating(
&DiscardsUI::BindDiscardsDetailsProvider, base::Unretained(this)));
} }
DiscardsUI::~DiscardsUI() {} DiscardsUI::~DiscardsUI() {}
void DiscardsUI::BindUIHandler(mojom::DiscardsDetailsProviderRequest request) { void DiscardsUI::BindDiscardsDetailsProvider(
mojom::DiscardsDetailsProviderRequest request) {
ui_handler_ = ui_handler_ =
std::make_unique<DiscardsDetailsProviderImpl>(std::move(request)); std::make_unique<DiscardsDetailsProviderImpl>(std::move(request));
} }
...@@ -13,15 +13,14 @@ ...@@ -13,15 +13,14 @@
// Controller for chrome://discards. Corresponding resources are in // Controller for chrome://discards. Corresponding resources are in
// file://chrome/browser/resources/discards. // file://chrome/browser/resources/discards.
class DiscardsUI class DiscardsUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<mojom::DiscardsDetailsProvider> {
public: public:
explicit DiscardsUI(content::WebUI* web_ui); explicit DiscardsUI(content::WebUI* web_ui);
~DiscardsUI() override; ~DiscardsUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindDiscardsDetailsProvider(
void BindUIHandler(mojom::DiscardsDetailsProviderRequest request) override; mojom::DiscardsDetailsProviderRequest request);
std::unique_ptr<mojom::DiscardsDetailsProvider> ui_handler_; std::unique_ptr<mojom::DiscardsDetailsProvider> ui_handler_;
......
...@@ -77,7 +77,7 @@ class SiteEngagementDetailsProviderImpl ...@@ -77,7 +77,7 @@ class SiteEngagementDetailsProviderImpl
} // namespace } // namespace
SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui) SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui)
: ui::MojoWebUIController<mojom::SiteEngagementDetailsProvider>(web_ui) { : ui::MojoWebUIController(web_ui) {
// Set up the chrome://site-engagement/ source. // Set up the chrome://site-engagement/ source.
std::unique_ptr<content::WebUIDataSource> source( std::unique_ptr<content::WebUIDataSource> source(
content::WebUIDataSource::Create(chrome::kChromeUISiteEngagementHost)); content::WebUIDataSource::Create(chrome::kChromeUISiteEngagementHost));
...@@ -89,11 +89,15 @@ SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui) ...@@ -89,11 +89,15 @@ SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui)
source->SetDefaultResource(IDR_SITE_ENGAGEMENT_HTML); source->SetDefaultResource(IDR_SITE_ENGAGEMENT_HTML);
source->UseGzip(); source->UseGzip();
content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source.release()); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source.release());
AddHandlerToRegistry(
base::BindRepeating(&SiteEngagementUI::BindSiteEngagementDetailsProvider,
base::Unretained(this)));
} }
SiteEngagementUI::~SiteEngagementUI() {} SiteEngagementUI::~SiteEngagementUI() {}
void SiteEngagementUI::BindUIHandler( void SiteEngagementUI::BindSiteEngagementDetailsProvider(
mojom::SiteEngagementDetailsProviderRequest request) { mojom::SiteEngagementDetailsProviderRequest request) {
ui_handler_.reset(new SiteEngagementDetailsProviderImpl( ui_handler_.reset(new SiteEngagementDetailsProviderImpl(
Profile::FromWebUI(web_ui()), std::move(request))); Profile::FromWebUI(web_ui()), std::move(request)));
......
...@@ -10,16 +10,14 @@ ...@@ -10,16 +10,14 @@
#include "ui/webui/mojo_web_ui_controller.h" #include "ui/webui/mojo_web_ui_controller.h"
// The UI for chrome://site-engagement/. // The UI for chrome://site-engagement/.
class SiteEngagementUI class SiteEngagementUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<mojom::SiteEngagementDetailsProvider> {
public: public:
explicit SiteEngagementUI(content::WebUI* web_ui); explicit SiteEngagementUI(content::WebUI* web_ui);
~SiteEngagementUI() override; ~SiteEngagementUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindSiteEngagementDetailsProvider(
void BindUIHandler( mojom::SiteEngagementDetailsProviderRequest request);
mojom::SiteEngagementDetailsProviderRequest request) override;
std::unique_ptr<mojom::SiteEngagementDetailsProvider> ui_handler_; std::unique_ptr<mojom::SiteEngagementDetailsProvider> ui_handler_;
......
...@@ -45,8 +45,7 @@ content::WebUIDataSource* GetUnsupportedSource() { ...@@ -45,8 +45,7 @@ content::WebUIDataSource* GetUnsupportedSource() {
} // namespace } // namespace
InterventionsInternalsUI::InterventionsInternalsUI(content::WebUI* web_ui) InterventionsInternalsUI::InterventionsInternalsUI(content::WebUI* web_ui)
: ui::MojoWebUIController<mojom::InterventionsInternalsPageHandler>(web_ui), : ui::MojoWebUIController(web_ui), previews_ui_service_(nullptr) {
previews_ui_service_(nullptr) {
// Set up the chrome://interventions-internals/ source. // Set up the chrome://interventions-internals/ source.
Profile* profile = Profile::FromWebUI(web_ui); Profile* profile = Profile::FromWebUI(web_ui);
...@@ -61,11 +60,14 @@ InterventionsInternalsUI::InterventionsInternalsUI(content::WebUI* web_ui) ...@@ -61,11 +60,14 @@ InterventionsInternalsUI::InterventionsInternalsUI(content::WebUI* web_ui)
previews_ui_service_ = previews_service->previews_ui_service(); previews_ui_service_ = previews_service->previews_ui_service();
ui_nqe_service_ = ui_nqe_service_ =
UINetworkQualityEstimatorServiceFactory::GetForProfile(profile); UINetworkQualityEstimatorServiceFactory::GetForProfile(profile);
AddHandlerToRegistry(base::BindRepeating(
&InterventionsInternalsUI::BindInterventionsInternalsPageHandler,
base::Unretained(this)));
} }
InterventionsInternalsUI::~InterventionsInternalsUI() {} InterventionsInternalsUI::~InterventionsInternalsUI() {}
void InterventionsInternalsUI::BindUIHandler( void InterventionsInternalsUI::BindInterventionsInternalsPageHandler(
mojom::InterventionsInternalsPageHandlerRequest request) { mojom::InterventionsInternalsPageHandlerRequest request) {
DCHECK(previews_ui_service_); DCHECK(previews_ui_service_);
DCHECK(ui_nqe_service_); DCHECK(ui_nqe_service_);
......
...@@ -17,16 +17,14 @@ class PreviewsUIService; ...@@ -17,16 +17,14 @@ class PreviewsUIService;
class UINetworkQualityEstimatorService; class UINetworkQualityEstimatorService;
// The WebUI for chrome://interventions-internals. // The WebUI for chrome://interventions-internals.
class InterventionsInternalsUI class InterventionsInternalsUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<mojom::InterventionsInternalsPageHandler> {
public: public:
explicit InterventionsInternalsUI(content::WebUI* web_ui); explicit InterventionsInternalsUI(content::WebUI* web_ui);
~InterventionsInternalsUI() override; ~InterventionsInternalsUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindInterventionsInternalsPageHandler(
void BindUIHandler( mojom::InterventionsInternalsPageHandlerRequest request);
mojom::InterventionsInternalsPageHandlerRequest request) override;
// The PreviewsUIService associated with this UI. // The PreviewsUIService associated with this UI.
previews::PreviewsUIService* previews_ui_service_; previews::PreviewsUIService* previews_ui_service_;
......
...@@ -64,8 +64,7 @@ class MediaEngagementScoreDetailsProviderImpl ...@@ -64,8 +64,7 @@ class MediaEngagementScoreDetailsProviderImpl
} // namespace } // namespace
MediaEngagementUI::MediaEngagementUI(content::WebUI* web_ui) MediaEngagementUI::MediaEngagementUI(content::WebUI* web_ui)
: ui::MojoWebUIController< : ui::MojoWebUIController(web_ui) {
media::mojom::MediaEngagementScoreDetailsProvider>(web_ui) {
// Setup the data source behind chrome://media-engagement. // Setup the data source behind chrome://media-engagement.
std::unique_ptr<content::WebUIDataSource> source( std::unique_ptr<content::WebUIDataSource> source(
content::WebUIDataSource::Create(chrome::kChromeUIMediaEngagementHost)); content::WebUIDataSource::Create(chrome::kChromeUIMediaEngagementHost));
...@@ -77,11 +76,14 @@ MediaEngagementUI::MediaEngagementUI(content::WebUI* web_ui) ...@@ -77,11 +76,14 @@ MediaEngagementUI::MediaEngagementUI(content::WebUI* web_ui)
source->SetDefaultResource(IDR_MEDIA_ENGAGEMENT_HTML); source->SetDefaultResource(IDR_MEDIA_ENGAGEMENT_HTML);
source->UseGzip(); source->UseGzip();
content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source.release()); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source.release());
AddHandlerToRegistry(base::BindRepeating(
&MediaEngagementUI::BindMediaEngagementScoreDetailsProvider,
base::Unretained(this)));
} }
MediaEngagementUI::~MediaEngagementUI() = default; MediaEngagementUI::~MediaEngagementUI() = default;
void MediaEngagementUI::BindUIHandler( void MediaEngagementUI::BindMediaEngagementScoreDetailsProvider(
media::mojom::MediaEngagementScoreDetailsProviderRequest request) { media::mojom::MediaEngagementScoreDetailsProviderRequest request) {
ui_handler_ = std::make_unique<MediaEngagementScoreDetailsProviderImpl>( ui_handler_ = std::make_unique<MediaEngagementScoreDetailsProviderImpl>(
Profile::FromWebUI(web_ui()), std::move(request)); Profile::FromWebUI(web_ui()), std::move(request));
......
...@@ -10,17 +10,14 @@ ...@@ -10,17 +10,14 @@
#include "ui/webui/mojo_web_ui_controller.h" #include "ui/webui/mojo_web_ui_controller.h"
// The UI for chrome://media-engagement/. // The UI for chrome://media-engagement/.
class MediaEngagementUI class MediaEngagementUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<
media::mojom::MediaEngagementScoreDetailsProvider> {
public: public:
explicit MediaEngagementUI(content::WebUI* web_ui); explicit MediaEngagementUI(content::WebUI* web_ui);
~MediaEngagementUI() override; ~MediaEngagementUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindMediaEngagementScoreDetailsProvider(
void BindUIHandler(media::mojom::MediaEngagementScoreDetailsProviderRequest media::mojom::MediaEngagementScoreDetailsProviderRequest request);
request) override;
std::unique_ptr<media::mojom::MediaEngagementScoreDetailsProvider> std::unique_ptr<media::mojom::MediaEngagementScoreDetailsProvider>
ui_handler_; ui_handler_;
......
...@@ -14,8 +14,7 @@ ...@@ -14,8 +14,7 @@
#include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_controller.h"
#include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_data_source.h"
OmniboxUI::OmniboxUI(content::WebUI* web_ui) OmniboxUI::OmniboxUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui) {
: ui::MojoWebUIController<mojom::OmniboxPageHandler>(web_ui) {
// Set up the chrome://omnibox/ source. // Set up the chrome://omnibox/ source.
content::WebUIDataSource* source = content::WebUIDataSource* source =
content::WebUIDataSource::Create(chrome::kChromeUIOmniboxHost); content::WebUIDataSource::Create(chrome::kChromeUIOmniboxHost);
...@@ -27,11 +26,13 @@ OmniboxUI::OmniboxUI(content::WebUI* web_ui) ...@@ -27,11 +26,13 @@ OmniboxUI::OmniboxUI(content::WebUI* web_ui)
source->UseGzip(); source->UseGzip();
content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source);
AddHandlerToRegistry(base::BindRepeating(&OmniboxUI::BindOmniboxPageHandler,
base::Unretained(this)));
} }
OmniboxUI::~OmniboxUI() {} OmniboxUI::~OmniboxUI() {}
void OmniboxUI::BindUIHandler( void OmniboxUI::BindOmniboxPageHandler(
mojom::OmniboxPageHandlerRequest request) { mojom::OmniboxPageHandlerRequest request) {
omnibox_handler_.reset( omnibox_handler_.reset(
new OmniboxPageHandler(Profile::FromWebUI(web_ui()), std::move(request))); new OmniboxPageHandler(Profile::FromWebUI(web_ui()), std::move(request)));
......
...@@ -12,14 +12,13 @@ ...@@ -12,14 +12,13 @@
class OmniboxPageHandler; class OmniboxPageHandler;
// The UI for chrome://omnibox/ // The UI for chrome://omnibox/
class OmniboxUI : public ui::MojoWebUIController<mojom::OmniboxPageHandler> { class OmniboxUI : public ui::MojoWebUIController {
public: public:
explicit OmniboxUI(content::WebUI* contents); explicit OmniboxUI(content::WebUI* contents);
~OmniboxUI() override; ~OmniboxUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindOmniboxPageHandler(mojom::OmniboxPageHandlerRequest request);
void BindUIHandler(mojom::OmniboxPageHandlerRequest request) override;
std::unique_ptr<OmniboxPageHandler> omnibox_handler_; std::unique_ptr<OmniboxPageHandler> omnibox_handler_;
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_data_source.h"
UsbInternalsUI::UsbInternalsUI(content::WebUI* web_ui) UsbInternalsUI::UsbInternalsUI(content::WebUI* web_ui)
: ui::MojoWebUIController<mojom::UsbInternalsPageHandler>(web_ui) { : ui::MojoWebUIController(web_ui) {
// Set up the chrome://usb-internals source. // Set up the chrome://usb-internals source.
content::WebUIDataSource* source = content::WebUIDataSource* source =
content::WebUIDataSource::Create(chrome::kChromeUIUsbInternalsHost); content::WebUIDataSource::Create(chrome::kChromeUIUsbInternalsHost);
...@@ -26,11 +26,13 @@ UsbInternalsUI::UsbInternalsUI(content::WebUI* web_ui) ...@@ -26,11 +26,13 @@ UsbInternalsUI::UsbInternalsUI(content::WebUI* web_ui)
source->UseGzip(); source->UseGzip();
content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source);
AddHandlerToRegistry(base::BindRepeating(
&UsbInternalsUI::BindUsbInternalsPageHandler, base::Unretained(this)));
} }
UsbInternalsUI::~UsbInternalsUI() {} UsbInternalsUI::~UsbInternalsUI() {}
void UsbInternalsUI::BindUIHandler( void UsbInternalsUI::BindUsbInternalsPageHandler(
mojom::UsbInternalsPageHandlerRequest request) { mojom::UsbInternalsPageHandlerRequest request) {
page_handler_.reset(new UsbInternalsPageHandler(std::move(request))); page_handler_.reset(new UsbInternalsPageHandler(std::move(request)));
} }
...@@ -12,15 +12,14 @@ ...@@ -12,15 +12,14 @@
class UsbInternalsPageHandler; class UsbInternalsPageHandler;
// The WebUI for chrome://usb-internals. // The WebUI for chrome://usb-internals.
class UsbInternalsUI class UsbInternalsUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<mojom::UsbInternalsPageHandler> {
public: public:
explicit UsbInternalsUI(content::WebUI* web_ui); explicit UsbInternalsUI(content::WebUI* web_ui);
~UsbInternalsUI() override; ~UsbInternalsUI() override;
private: private:
// ui::MojoWebUIController overrides: void BindUsbInternalsPageHandler(
void BindUIHandler(mojom::UsbInternalsPageHandlerRequest request) override; mojom::UsbInternalsPageHandlerRequest request);
std::unique_ptr<UsbInternalsPageHandler> page_handler_; std::unique_ptr<UsbInternalsPageHandler> page_handler_;
......
...@@ -21,8 +21,7 @@ namespace proximity_auth { ...@@ -21,8 +21,7 @@ namespace proximity_auth {
ProximityAuthUI::ProximityAuthUI(content::WebUI* web_ui, ProximityAuthUI::ProximityAuthUI(content::WebUI* web_ui,
ProximityAuthClient* delegate) ProximityAuthClient* delegate)
: ui::MojoWebUIController< : ui::MojoWebUIController(web_ui) {
chromeos::multidevice_setup::mojom::MultiDeviceSetup>(web_ui) {
content::WebUIDataSource* source = content::WebUIDataSource* source =
content::WebUIDataSource::Create(kChromeUIProximityAuthHost); content::WebUIDataSource::Create(kChromeUIProximityAuthHost);
source->SetDefaultResource(IDR_PROXIMITY_AUTH_INDEX_HTML); source->SetDefaultResource(IDR_PROXIMITY_AUTH_INDEX_HTML);
...@@ -52,11 +51,13 @@ ProximityAuthUI::ProximityAuthUI(content::WebUI* web_ui, ...@@ -52,11 +51,13 @@ ProximityAuthUI::ProximityAuthUI(content::WebUI* web_ui,
content::WebUIDataSource::Add(browser_context, source); content::WebUIDataSource::Add(browser_context, source);
web_ui->AddMessageHandler( web_ui->AddMessageHandler(
std::make_unique<ProximityAuthWebUIHandler>(delegate)); std::make_unique<ProximityAuthWebUIHandler>(delegate));
AddHandlerToRegistry(base::BindRepeating(
&ProximityAuthUI::BindMultiDeviceSetup, base::Unretained(this)));
} }
ProximityAuthUI::~ProximityAuthUI() = default; ProximityAuthUI::~ProximityAuthUI() = default;
void ProximityAuthUI::BindUIHandler( void ProximityAuthUI::BindMultiDeviceSetup(
chromeos::multidevice_setup::mojom::MultiDeviceSetupRequest request) { chromeos::multidevice_setup::mojom::MultiDeviceSetupRequest request) {
service_manager::Connector* connector = service_manager::Connector* connector =
content::BrowserContext::GetConnectorFor( content::BrowserContext::GetConnectorFor(
......
...@@ -17,9 +17,7 @@ namespace proximity_auth { ...@@ -17,9 +17,7 @@ namespace proximity_auth {
class ProximityAuthClient; class ProximityAuthClient;
// The WebUI controller for chrome://proximity-auth. // The WebUI controller for chrome://proximity-auth.
class ProximityAuthUI class ProximityAuthUI : public ui::MojoWebUIController {
: public ui::MojoWebUIController<
chromeos::multidevice_setup::mojom::MultiDeviceSetup> {
public: public:
// Note: |web_ui| and |delegate| are not owned by this instance and must // Note: |web_ui| and |delegate| are not owned by this instance and must
// outlive this instance. // outlive this instance.
...@@ -27,9 +25,8 @@ class ProximityAuthUI ...@@ -27,9 +25,8 @@ class ProximityAuthUI
~ProximityAuthUI() override; ~ProximityAuthUI() override;
protected: protected:
// ui::MojoWebUIController overrides: void BindMultiDeviceSetup(
void BindUIHandler(chromeos::multidevice_setup::mojom::MultiDeviceSetupRequest chromeos::multidevice_setup::mojom::MultiDeviceSetupRequest request);
request) override;
private: private:
DISALLOW_COPY_AND_ASSIGN(ProximityAuthUI); DISALLOW_COPY_AND_ASSIGN(ProximityAuthUI);
......
...@@ -84,14 +84,13 @@ class WEB_DIALOGS_EXPORT WebDialogUI : public WebDialogUIBase, ...@@ -84,14 +84,13 @@ class WEB_DIALOGS_EXPORT WebDialogUI : public WebDialogUIBase,
// Displays file URL contents inside a modal web dialog while also enabling // Displays file URL contents inside a modal web dialog while also enabling
// Mojo calls to be made from within the dialog. // Mojo calls to be made from within the dialog.
template <typename Interface> template <typename Interface>
class WEB_DIALOGS_EXPORT MojoWebDialogUI class WEB_DIALOGS_EXPORT MojoWebDialogUI : public WebDialogUIBase,
: public WebDialogUIBase, public MojoWebUIController {
public MojoWebUIController<Interface> {
public: public:
// When created, the delegate should already be set as user data on the // When created, the delegate should already be set as user data on the
// WebContents. // WebContents.
explicit MojoWebDialogUI(content::WebUI* web_ui) explicit MojoWebDialogUI(content::WebUI* web_ui)
: WebDialogUIBase(web_ui), MojoWebUIController<Interface>(web_ui) {} : WebDialogUIBase(web_ui), MojoWebUIController(web_ui) {}
~MojoWebDialogUI() override {} ~MojoWebDialogUI() override {}
private: private:
......
include_rules = [ include_rules = [
"+content/public", "+content/public",
"+mojo/public/cpp/system/core.h", "+mojo/public",
"+net", "+net",
"+services/service_manager/public/cpp/binder_registry.h", "+services/service_manager/public/cpp/binder_registry.h",
"+ui/base", "+ui/base",
......
...@@ -4,18 +4,37 @@ ...@@ -4,18 +4,37 @@
#include "ui/webui/mojo_web_ui_controller.h" #include "ui/webui/mojo_web_ui_controller.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/common/bindings_policy.h" #include "content/public/common/bindings_policy.h"
namespace ui { namespace ui {
MojoWebUIControllerBase::MojoWebUIControllerBase(content::WebUI* contents) MojoWebUIControllerBase::MojoWebUIControllerBase(content::WebUI* contents)
: content::WebUIController(contents) {} : content::WebUIController(contents) {
contents->SetBindings(content::BINDINGS_POLICY_WEB_UI);
}
MojoWebUIControllerBase::~MojoWebUIControllerBase() = default; MojoWebUIControllerBase::~MojoWebUIControllerBase() = default;
void MojoWebUIControllerBase::RenderFrameCreated( MojoWebUIController::MojoWebUIController(content::WebUI* contents)
content::RenderFrameHost* render_frame_host) { : MojoWebUIControllerBase(contents),
render_frame_host->AllowBindings(content::BINDINGS_POLICY_WEB_UI); content::WebContentsObserver(contents->GetWebContents()) {}
MojoWebUIController::~MojoWebUIController() = default;
void MojoWebUIController::OnInterfaceRequestFromFrame(
content::RenderFrameHost* render_frame_host,
const std::string& interface_name,
mojo::ScopedMessagePipeHandle* interface_pipe) {
// Right now, this is expected to be called only for main frames.
if (render_frame_host->GetParent()) {
LOG(ERROR) << "Terminating renderer for requesting " << interface_name
<< " interface from subframe";
render_frame_host->GetProcess()->ShutdownForBadMessage(
content::RenderProcessHost::CrashReportMode::GENERATE_CRASH_DUMP);
return;
}
registry_.TryBindInterface(interface_name, interface_pipe);
} }
} // namespace ui } // namespace ui
...@@ -23,9 +23,6 @@ class MojoWebUIControllerBase : public content::WebUIController { ...@@ -23,9 +23,6 @@ class MojoWebUIControllerBase : public content::WebUIController {
explicit MojoWebUIControllerBase(content::WebUI* contents); explicit MojoWebUIControllerBase(content::WebUI* contents);
~MojoWebUIControllerBase() override; ~MojoWebUIControllerBase() override;
// content::WebUIController overrides:
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
private: private:
DISALLOW_COPY_AND_ASSIGN(MojoWebUIControllerBase); DISALLOW_COPY_AND_ASSIGN(MojoWebUIControllerBase);
}; };
...@@ -36,40 +33,27 @@ class MojoWebUIControllerBase : public content::WebUIController { ...@@ -36,40 +33,27 @@ class MojoWebUIControllerBase : public content::WebUIController {
// files, eg: // files, eg:
// AddMojoResourcePath("chrome/browser/ui/webui/omnibox/omnibox.mojom", // AddMojoResourcePath("chrome/browser/ui/webui/omnibox/omnibox.mojom",
// IDR_OMNIBOX_MOJO_JS); // IDR_OMNIBOX_MOJO_JS);
// . Override BindUIHandler() to create and bind the implementation of the // . Call AddHandlerToRegistry for all Mojo Interfaces it wishes to handle.
// bindings.
template <typename Interface>
class MojoWebUIController : public MojoWebUIControllerBase, class MojoWebUIController : public MojoWebUIControllerBase,
public content::WebContentsObserver { public content::WebContentsObserver {
public: public:
explicit MojoWebUIController(content::WebUI* contents) explicit MojoWebUIController(content::WebUI* contents);
: MojoWebUIControllerBase(contents), ~MojoWebUIController() override;
content::WebContentsObserver(contents->GetWebContents()),
weak_factory_(this) {
registry_.AddInterface<Interface>(base::Bind(
&MojoWebUIController::BindUIHandler, base::Unretained(this)));
}
~MojoWebUIController() override {}
// content::WebContentsObserver implementation. // content::WebContentsObserver implementation.
void OnInterfaceRequestFromFrame( void OnInterfaceRequestFromFrame(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
const std::string& interface_name, const std::string& interface_name,
mojo::ScopedMessagePipeHandle* interface_pipe) override { mojo::ScopedMessagePipeHandle* interface_pipe) override;
// Right now, this is expected to be called only for main frames.
DCHECK(!render_frame_host->GetParent());
registry_.TryBindInterface(interface_name, interface_pipe);
}
protected: template <typename Binder>
// Invoked to create the specific bindings implementation. void AddHandlerToRegistry(Binder binder) {
virtual void BindUIHandler(mojo::InterfaceRequest<Interface> request) = 0; registry_.AddInterface(std::move(binder));
}
private: private:
service_manager::BinderRegistry registry_; service_manager::BinderRegistry registry_;
base::WeakPtrFactory<MojoWebUIController> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(MojoWebUIController); DISALLOW_COPY_AND_ASSIGN(MojoWebUIController);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment