0

Break out EnableMojoWebUI from MojoWebUIController as a mix-in class.

Some WebUIController subclasses don't currently support Mojo and reworking the hierarchy may not be possible. Breaking the enable Mojo operations into a separate mix-in class would allow other WebUIControllers to selectively enable Mojo. One such class that doesn't immediately support Mojo is ConstrainedWebDialogUI.

There is currently some confusion about using ShowConstrainedWebDialog with a web ui which needs Mojo.

Change-Id: If421d1360cc27934b32bf7c35bbe88896bb2eca5
Bug: 365593101
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5954285
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Demetrios Papadopoulos <dpapad@chromium.org>
Commit-Queue: Allen Bauer <kylixrd@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1372851}
This commit is contained in:
Allen Bauer
2024-10-23 18:26:35 +00:00
committed by Chromium LUCI CQ
parent 2589ab5d02
commit 9bdbd594b8
2 changed files with 25 additions and 4 deletions

@ -8,9 +8,8 @@
namespace ui {
MojoWebUIController::MojoWebUIController(content::WebUI* contents,
bool enable_chrome_send)
: content::WebUIController(contents) {
EnableMojoWebUI::EnableMojoWebUI(content::WebUI* contents,
bool enable_chrome_send) {
content::BindingsPolicySet bindings(
{content::BindingsPolicyValue::kMojoWebUi});
if (enable_chrome_send) {
@ -18,6 +17,14 @@ MojoWebUIController::MojoWebUIController(content::WebUI* contents,
}
contents->SetBindings(bindings);
}
EnableMojoWebUI::~EnableMojoWebUI() = default;
MojoWebUIController::MojoWebUIController(content::WebUI* contents,
bool enable_chrome_send)
: content::WebUIController(contents),
EnableMojoWebUI(contents, enable_chrome_send) {}
MojoWebUIController::~MojoWebUIController() = default;
} // namespace ui

@ -10,6 +10,19 @@
namespace ui {
// EnableMojoWebUI is intended for WebUI pages that use Mojo. Inherit from this
// class in addition to WebUIController (or other WebUIController subclass) to
// enable Mojo for a given WebUI page. See below for expectations.
class EnableMojoWebUI {
public:
explicit EnableMojoWebUI(content::WebUI* contents, bool enable_chrome_send);
EnableMojoWebUI(const EnableMojoWebUI&) = delete;
EnableMojoWebUI& operator=(const EnableMojoWebUI&) = delete;
virtual ~EnableMojoWebUI();
};
// MojoWebUIController is intended for WebUI pages that use Mojo. It is
// expected that subclasses will:
// . Add all Mojo Bindings Resources via AddResourcePath(), eg:
@ -23,7 +36,8 @@ namespace ui {
// BinderMap:
// - chrome/browser/chrome_browser_interface_binders.cc for chrome/ WebUIs;
// - content/browser/browser_interface_binders.cc for content/ WebUIs.
class MojoWebUIController : public content::WebUIController {
class MojoWebUIController : public content::WebUIController,
public EnableMojoWebUI {
public:
// By default MojoWebUIControllers do not have normal WebUI bindings. Pass
// |enable_chrome_send| as true if these are needed.