0

[Code Health] Migrate to WebUIDataSource::CreateAndAdd(), part 8

Bug: 1206140
Change-Id: Ia86c83c1b9914b10b5d630536664ef5f6be6cfb1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4121701
Commit-Queue: Rebekah Potter <rbpotter@chromium.org>
Reviewed-by: Colin Blundell <blundell@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Mark Schillaci <mschillaci@google.com>
Cr-Commit-Position: refs/heads/main@{#1089358}
This commit is contained in:
Rebekah Potter
2023-01-05 18:44:13 +00:00
committed by Chromium LUCI CQ
parent 6641420f70
commit a894942393
23 changed files with 75 additions and 106 deletions

@ -340,7 +340,9 @@ AccessibilityUI::AccessibilityUI(content::WebUI* web_ui)
: WebUIController(web_ui) {
// Set up the chrome://accessibility source.
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(chrome::kChromeUIAccessibilityHost);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(),
chrome::kChromeUIAccessibilityHost);
// Add required resources.
html_source->UseStringsJs();
@ -352,10 +354,6 @@ AccessibilityUI::AccessibilityUI(content::WebUI* web_ui)
base::BindRepeating(&HandleAccessibilityRequestCallback,
web_ui->GetWebContents()->GetBrowserContext()));
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, html_source);
web_ui->AddMessageHandler(std::make_unique<AccessibilityUIMessageHandler>());
}

@ -44,8 +44,8 @@ class TestWebUIProvider
// Loader.
auto* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource* files_swa_source =
content::WebUIDataSource::Create(
ash::file_manager::kChromeUIFileManagerHost);
content::WebUIDataSource::CreateAndAdd(
profile, ash::file_manager::kChromeUIFileManagerHost);
files_swa_source->AddResourcePaths(base::make_span(
kFileManagerSwaResources, kFileManagerSwaResourcesSize));
@ -61,8 +61,6 @@ class TestWebUIProvider
files_swa_source->AddLocalizedStrings(dict_);
files_swa_source->UseStringsJs();
content::WebUIDataSource::Add(profile, files_swa_source);
return std::make_unique<content::WebUIController>(web_ui);
}

@ -65,7 +65,7 @@ constexpr char kSwJs[] = "globalThis.addEventListener('fetch', event => {});";
void AddTestURLDataSource(const std::string& source_name,
content::BrowserContext* browser_context) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create(source_name);
content::WebUIDataSource::CreateAndAdd(browser_context, source_name);
data_source->DisableTrustedTypesCSP();
data_source->AddResourcePath("icon-256.png", IDR_PRODUCT_LOGO_256);
data_source->SetRequestFilter(
@ -91,7 +91,6 @@ void AddTestURLDataSource(const std::string& source_name,
std::move(callback).Run(ref_contents);
}));
content::WebUIDataSource::Add(browser_context, data_source);
}
} // namespace ash

@ -33,12 +33,11 @@ void SetUpWebUIDataSource(content::WebUI* web_ui,
const char* web_ui_host,
base::span<const webui::ResourcePath> resources,
int default_resource) {
auto source = base::WrapUnique(content::WebUIDataSource::Create(web_ui_host));
webui::SetupWebUIDataSource(source.get(), resources, default_resource);
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), web_ui_host);
webui::SetupWebUIDataSource(source, resources, default_resource);
// Disable CSP for tests so that EvalJS can be invoked without CSP violations.
source->DisableContentSecurityPolicy();
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source.release());
}
class TestWebUIControllerFactory : public content::WebUIControllerFactory {

@ -42,12 +42,11 @@ void SetUpWebUIDataSource(content::WebUI* web_ui,
const char* web_ui_host,
base::span<const webui::ResourcePath> resources,
int default_resource) {
auto source = base::WrapUnique(content::WebUIDataSource::Create(web_ui_host));
webui::SetupWebUIDataSource(source.get(), resources, default_resource);
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), web_ui_host);
webui::SetupWebUIDataSource(source, resources, default_resource);
// Disable CSP for tests so that EvalJS can be invoked without CSP violations.
source->DisableContentSecurityPolicy();
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source.release());
}
class TestWebUIControllerFactory : public content::WebUIControllerFactory {

@ -1008,8 +1008,7 @@ class PDFExtensionJSTest : public PDFExtensionTest {
pak_path, ui::kScaleFactorNone);
// Register the chrome://webui-test data source.
content::WebUIDataSource::Add(browser()->profile(),
webui::CreateWebUITestDataSource());
webui::CreateAndAddWebUITestDataSource(browser()->profile());
}
void RunTestsInJsModule(const std::string& filename,

@ -61,8 +61,8 @@ OSSettingsBrowserTestMixin::OSSettingsUIProvider::NewWebUI(
content::WebUI* web_ui,
const GURL& url) {
auto controller = std::make_unique<OSSettingsUI>(web_ui);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
webui::CreateWebUITestDataSource());
webui::CreateAndAddWebUITestDataSource(
web_ui->GetWebContents()->GetBrowserContext());
return controller;
}

@ -68,10 +68,10 @@ TestChromeWebUIControllerFactory::CreateWebUIControllerForURL(
// Add an empty callback since managed-footnote always sends this message.
web_ui->RegisterMessageCallback("observeManagedUI", base::DoNothing());
content::WebUIDataSource* source = webui::CreateWebUITestDataSource();
content::WebUIDataSource* source =
webui::CreateAndAddWebUITestDataSource(profile);
if (provider)
provider->DataSourceOverrides(source);
content::WebUIDataSource::Add(profile, source);
return controller;
}

@ -470,8 +470,7 @@ void BaseWebUIBrowserTest::SetUpOnMainThread() {
// Register data sources for chrome://webui-test/ URLs
// e.g. `chrome://webui-test/chai_assert.js`.
content::WebUIDataSource* source = webui::CreateWebUITestDataSource();
content::WebUIDataSource::Add(browser()->profile(), source);
webui::CreateAndAddWebUITestDataSource(browser()->profile());
}
test_factory_ = std::make_unique<TestChromeWebUIControllerFactory>();

@ -8,15 +8,17 @@
#include "chrome/common/webui_url_constants.h"
#include "chrome/test/data/grit/webui_generated_test_resources.h"
#include "chrome/test/data/grit/webui_generated_test_resources_map.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/web_ui_data_source.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "ui/resources/grit/webui_resources.h"
namespace webui {
content::WebUIDataSource* CreateWebUITestDataSource() {
content::WebUIDataSource* source =
content::WebUIDataSource::Create(chrome::kChromeUIWebUITestHost);
content::WebUIDataSource* CreateAndAddWebUITestDataSource(
content::BrowserContext* browser_context) {
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
browser_context, chrome::kChromeUIWebUITestHost);
webui::EnableTrustedTypesCSP(source);
source->OverrideContentSecurityPolicy(

@ -7,10 +7,15 @@
#include "content/public/browser/web_ui_data_source.h"
namespace content {
class BrowserContext;
}
namespace webui {
// Creates a data source for for chrome://webui-test/ URLs.
content::WebUIDataSource* CreateWebUITestDataSource();
content::WebUIDataSource* CreateAndAddWebUITestDataSource(
content::BrowserContext* browser_context);
} // namespace webui

@ -56,7 +56,8 @@ class MojoFileSystemAccessUI : public ui::MojoWebUIController,
explicit MojoFileSystemAccessUI(content::WebUI* web_ui)
: ui::MojoWebUIController(web_ui), receiver_(this) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create(kTestWebUIHost);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kTestWebUIHost);
data_source->SetDefaultResource(IDR_MOJO_FILE_SYSTEM_ACCESS_TEST_HTML);
data_source->DisableContentSecurityPolicy();
data_source->AddResourcePath(
@ -64,8 +65,6 @@ class MojoFileSystemAccessUI : public ui::MojoWebUIController,
IDR_MOJO_FILE_SYSTEM_ACCESS_TEST_MOJOM_WEBUI_JS);
data_source->AddResourcePath("mojo_file_system_access_test.js",
IDR_MOJO_FILE_SYSTEM_ACCESS_TEST_JS);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
}
MojoFileSystemAccessUI(const MojoFileSystemAccessUI&) = delete;
@ -123,11 +122,10 @@ class OrdinaryMojoWebUI : public ui::MojoWebUIController {
explicit OrdinaryMojoWebUI(content::WebUI* web_ui)
: ui::MojoWebUIController(web_ui) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create(kOrdinaryWebUIHost);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kOrdinaryWebUIHost);
data_source->DisableContentSecurityPolicy();
data_source->SetDefaultResource(IDR_MOJO_JS_INTERFACE_BROKER_TEST_BUZ_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
}
};

@ -49,7 +49,8 @@ class FooUI : public content::WebUIController, public ::test::mojom::Foo {
explicit FooUI(content::WebUI* web_ui)
: content::WebUIController(web_ui), foo_receiver_(this) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create("foo");
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), "foo");
data_source->SetDefaultResource(IDR_MOJO_JS_INTERFACE_BROKER_TEST_FOO_HTML);
data_source->AddResourcePath("foobar.mojom-webui.js",
IDR_FOOBAR_MOJOM_WEBUI_JS);
@ -63,8 +64,6 @@ class FooUI : public content::WebUIController, public ::test::mojom::Foo {
data_source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::ScriptSrc,
"script-src 'self' chrome://resources/ 'nonce-test';");
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
// Allow requesting chrome-untrusted://bar in iframe.
web_ui->AddRequestableScheme(content::kChromeUIUntrustedScheme);
@ -94,7 +93,8 @@ class BarUI : public ui::UntrustedWebUIController, public ::test::mojom::Bar {
explicit BarUI(content::WebUI* web_ui)
: ui::UntrustedWebUIController(web_ui), bar_receiver_(this) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create(kBarURL);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kBarURL);
data_source->SetDefaultResource(IDR_MOJO_JS_INTERFACE_BROKER_TEST_BAR_HTML);
// Allow Foo to embed this UI.
@ -112,8 +112,6 @@ class BarUI : public ui::UntrustedWebUIController, public ::test::mojom::Bar {
content::WebUIDataSource::GotDataCallback callback) {
std::move(callback).Run(nullptr);
}));
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
}
void BindInterface(mojo::PendingReceiver<::test::mojom::Bar> receiver) {
@ -140,10 +138,9 @@ class BuzUI : public ui::UntrustedWebUIController {
explicit BuzUI(content::WebUI* web_ui)
: ui::UntrustedWebUIController(web_ui) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create(kBuzURL);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kBuzURL);
data_source->SetDefaultResource(IDR_MOJO_JS_INTERFACE_BROKER_TEST_BUZ_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
}
};

@ -41,14 +41,13 @@ class FooUI : public ui::MojoWebUIController, public ::test::mojom::Foo {
explicit FooUI(content::WebUI* web_ui)
: ui::MojoWebUIController(web_ui), foo_receiver_(this) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create("foo");
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), "foo");
data_source->SetDefaultResource(IDR_MOJO_WEB_UI_CONTROLLER_TEST_HTML);
data_source->DisableContentSecurityPolicy();
data_source->AddResourcePath("foobar.mojom-webui.js",
IDR_FOOBAR_MOJOM_WEBUI_JS);
data_source->AddResourcePath("main.js", IDR_MOJO_MAIN_JS);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
}
FooUI(const FooUI&) = delete;
@ -81,14 +80,13 @@ class FooBarUI : public ui::MojoWebUIController,
foo_receiver_(this),
bar_receiver_(this) {
content::WebUIDataSource* data_source =
content::WebUIDataSource::Create("foobar");
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), "foobar");
data_source->SetDefaultResource(IDR_MOJO_WEB_UI_CONTROLLER_TEST_HTML);
data_source->DisableContentSecurityPolicy();
data_source->AddResourcePath("foobar.mojom-webui.js",
IDR_FOOBAR_MOJOM_WEBUI_JS);
data_source->AddResourcePath("main.js", IDR_MOJO_MAIN_JS);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
data_source);
}
FooBarUI(const FooBarUI&) = delete;

@ -2323,13 +2323,12 @@ base::Value::Dict SerializeDeepScanDebugData(const std::string& token,
SafeBrowsingUI::SafeBrowsingUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
// Set up the chrome://safe-browsing source.
content::WebUIDataSource* html_source = content::WebUIDataSource::Create(
safe_browsing::kChromeUISafeBrowsingHost);
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
// Set up the chrome://safe-browsing source.
content::WebUIDataSource* html_source =
content::WebUIDataSource::CreateAndAdd(
browser_context, safe_browsing::kChromeUISafeBrowsingHost);
// Register callback handler.
// Handles messages from JavaScript to C++ via chrome.send().
@ -2345,8 +2344,6 @@ SafeBrowsingUI::SafeBrowsingUI(content::WebUI* web_ui)
html_source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::TrustedTypes,
"trusted-types static-types;");
content::WebUIDataSource::Add(browser_context, html_source);
}
SafeBrowsingUI::~SafeBrowsingUI() {}

@ -20,7 +20,9 @@ namespace security_interstitials {
ConnectionHelpUI::ConnectionHelpUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(kChromeUIConnectionHelpHost);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(),
kChromeUIConnectionHelpHost);
// JS code needs these constants to decide which section to expand.
html_source->AddInteger("certCommonNameInvalid",
@ -87,10 +89,6 @@ ConnectionHelpUI::ConnectionHelpUI(content::WebUI* web_ui)
IDR_SECURITY_INTERSTITIAL_CONNECTION_HELP_JS);
html_source->SetDefaultResource(
IDR_SECURITY_INTERSTITIAL_CONNECTION_HELP_HTML);
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, html_source);
}
ConnectionHelpUI::~ConnectionHelpUI() {}

@ -20,8 +20,10 @@ namespace security_interstitials {
KnownInterceptionDisclosureUI::KnownInterceptionDisclosureUI(
content::WebUI* web_ui)
: content::WebUIController(web_ui) {
content::WebUIDataSource* html_source = content::WebUIDataSource::Create(
kChromeUIConnectionMonitoringDetectedHost);
content::WebUIDataSource* html_source =
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(),
kChromeUIConnectionMonitoringDetectedHost);
html_source->AddLocalizedString("title", IDS_KNOWN_INTERCEPTION_TITLE);
html_source->AddLocalizedString("pageHeader", IDS_KNOWN_INTERCEPTION_HEADER);
@ -39,10 +41,6 @@ KnownInterceptionDisclosureUI::KnownInterceptionDisclosureUI(
html_source->AddResourcePath("images/2x/triangle_red.png",
IDR_KNOWN_INTERCEPTION_ICON_2X_PNG);
html_source->SetDefaultResource(IDR_KNOWN_INTERCEPTION_HTML);
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, html_source);
}
KnownInterceptionDisclosureUI::~KnownInterceptionDisclosureUI() = default;

@ -114,12 +114,9 @@ class UntrustedExampleUI : public ui::UntrustedWebUIController {
// Create a URLDataSource and add resources.
auto* untrusted_source =
content::WebUIDataSource::Create(kUntrustedExampleURL);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kUntrustedExampleURL);
untrusted_source->AddResourcePath(...);
// Register the URLDataSource
auto* browser_context = web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, untrusted_source);
}
UntrustedExampleUI(const UntrustedExampleUI&) = delete;

@ -129,10 +129,11 @@ class DonutsUI : public content::WebUIController {
public:
DonutsUI(content::WebUI* web_ui) : content::WebUIController(web_ui) {
content::WebUIDataSource* source =
content::WebUIDataSource::Create("donuts"); // "donuts" == hostname
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(),
"donuts"); // "donuts" == hostname
source->AddString("mmmDonuts", "Mmm, donuts!"); // Translations.
source->AddResourcePath("", IDR_DONUTS_HTML); // Home page.
content::WebUIDataSource::Add(source);
// Handles messages from JavaScript to C++ via chrome.send().
web_ui->AddMessageHandler(std::make_unique<OvenHandler>());
@ -220,7 +221,8 @@ Below is an example of a simple data source (in this case, Chrome's history
page):
```c++
content::WebUIDataSource* source = content::WebUIDataSource::Create("history");
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
Profile::FromWebUI(web_ui), "history");
source->AddResourcePath("sign_in_promo.svg", IDR_HISTORY_SIGN_IN_PROMO_SVG);
source->AddResourcePath("synced_tabs.html", IDR_HISTORY_SYNCED_TABS_HTML);
@ -234,8 +236,6 @@ source->AddBoolean("showDateRanges",
webui::SetupWebUIDataSource(
source, base::make_span(kHistoryResources, kHistoryResourcesSize),
kGeneratedPath, IDR_HISTORY_HISTORY_HTML);
content::WebUIDataSource::Add(source);
```
For more about each of the methods called on `WebUIDataSource` and the utility
@ -279,18 +279,13 @@ $('bakeDonutsButton').onclick = function() {
## Data Sources
### WebUIDataSource::Create()
### WebUIDataSource::CreateAndAdd()
This is a factory method required to create a WebUIDataSource instance. The
argument to `Create()` is typically the host name of the page. Caller owns the
result.
This is a factory method required to create and add a WebUIDataSource. The first
argument to `Create()` is the browser context. The second argument is typically
the host name of the page. The caller does not own the result.
### WebUIDataSource::Add()
Once you've created and added some things to a data source, it'll need to be
"added". This means transferring ownership. In practice, the data source is
created in the browser process on the UI thread and transferred to the IO
thread. Additionally, calling `Add()` will overwrite any existing data source
Additionally, calling `CreateAndAdd()` will overwrite any existing data source
with the same name.
<div class="note">

@ -167,7 +167,9 @@ HelloWorldUI::HelloWorldUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
// Set up the chrome://hello-world source.
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(chrome::kChromeUIHelloWorldHost);
content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(),
chrome::kChromeUIHelloWorldHost);
// Localized strings.
static constexpr webui::LocalizedString kStrings[] = {
@ -188,10 +190,6 @@ HelloWorldUI::HelloWorldUI(content::WebUI* web_ui)
};
source->AddResourcePaths(kResources);
html_source->SetDefaultResource(IDR_HELLO_WORLD_HTML);
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, html_source);
}
HelloWorldUI::~HelloWorldUI() {

@ -51,13 +51,12 @@ void SetupWebUIDataSource(content::WebUIDataSource* source,
} // namespace
WebUI::WebUI(content::WebUI* web_ui) : content::WebUIController(web_ui) {
content::WebUIDataSource* source = content::WebUIDataSource::Create(kHost);
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kHost);
SetupWebUIDataSource(
source,
base::make_span(kWebuiGalleryResources, kWebuiGalleryResourcesSize),
IDR_WEBUI_GALLERY_WEBUI_GALLERY_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source);
}
WebUI::~WebUI() = default;

@ -159,14 +159,12 @@ const char kChromeUINetExportHost[] = "net-export";
NetExportUI::NetExportUI(content::WebUI* web_ui) : WebUIController(web_ui) {
web_ui->AddMessageHandler(std::make_unique<NetExportMessageHandler>());
content::WebUIDataSource* source =
content::WebUIDataSource::Create(kChromeUINetExportHost);
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kChromeUINetExportHost);
source->UseStringsJs();
source->AddResourcePath(net_log::kNetExportUICSS, IDR_NET_LOG_NET_EXPORT_CSS);
source->AddResourcePath(net_log::kNetExportUIJS, IDR_NET_LOG_NET_EXPORT_JS);
source->SetDefaultResource(IDR_NET_LOG_NET_EXPORT_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source);
}
NetExportUI::~NetExportUI() = default;

@ -16,14 +16,12 @@ const char kChromeUIWebLayerHost[] = "weblayer";
WebLayerInternalsUI::WebLayerInternalsUI(content::WebUI* web_ui)
: ui::MojoWebUIController(web_ui) {
content::WebUIDataSource* source =
content::WebUIDataSource::Create(kChromeUIWebLayerHost);
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
web_ui->GetWebContents()->GetBrowserContext(), kChromeUIWebLayerHost);
source->AddResourcePath("weblayer_internals.js", IDR_WEBLAYER_INTERNALS_JS);
source->AddResourcePath("weblayer_internals.mojom-webui.js",
IDR_WEBLAYER_INTERNALS_MOJO_JS);
source->SetDefaultResource(IDR_WEBLAYER_INTERNALS_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source);
}
WebLayerInternalsUI::~WebLayerInternalsUI() = default;