Commit 2abdeb69 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Migrate weblayer_internals.mojom.PageHandler to BrowserInterfaceBroker

This CL migrates code to the new BrowserInterfaceBroker class. This
allows retrieving the remote implementation in the browser process
without relying on the InterfaceProvider API.

Bug: 936482, 1002647
Change-Id: I559c52c82b5e1d00ae8a6a5d55cb3b56404898e2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1973438
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarOksana Zhuravlova <oksamyt@chromium.org>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728785}
parent 34721265
...@@ -131,6 +131,8 @@ jumbo_static_library("weblayer_lib") { ...@@ -131,6 +131,8 @@ jumbo_static_library("weblayer_lib") {
"browser/ssl_host_state_delegate_impl.h", "browser/ssl_host_state_delegate_impl.h",
"browser/tab_impl.cc", "browser/tab_impl.cc",
"browser/tab_impl.h", "browser/tab_impl.h",
"browser/weblayer_browser_interface_binders.cc",
"browser/weblayer_browser_interface_binders.h",
"browser/weblayer_content_browser_overlay_manifest.cc", "browser/weblayer_content_browser_overlay_manifest.cc",
"browser/weblayer_content_browser_overlay_manifest.h", "browser/weblayer_content_browser_overlay_manifest.h",
"browser/webui/web_ui_controller_factory.cc", "browser/webui/web_ui_controller_factory.cc",
......
...@@ -2,3 +2,5 @@ per-file weblayer_content_browser_overlay_manifest.cc=set noparent ...@@ -2,3 +2,5 @@ per-file weblayer_content_browser_overlay_manifest.cc=set noparent
per-file weblayer_content_browser_overlay_manifest.cc=file://ipc/SECURITY_OWNERS per-file weblayer_content_browser_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
per-file weblayer_content_browser_overlay_manifest.h=set noparent per-file weblayer_content_browser_overlay_manifest.h=set noparent
per-file weblayer_content_browser_overlay_manifest.h=file://ipc/SECURITY_OWNERS per-file weblayer_content_browser_overlay_manifest.h=file://ipc/SECURITY_OWNERS
per-file weblayer_browser_interface_binders.cc=set noparent
per-file weblayer_browser_interface_binders.cc=file://ipc/SECURITY_OWNERS
...@@ -36,8 +36,6 @@ ...@@ -36,8 +36,6 @@
#include "services/service_manager/public/cpp/binder_map.h" #include "services/service_manager/public/cpp/binder_map.h"
#include "third_party/blink/public/common/loader/url_loader_throttle.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h"
#include "third_party/blink/public/common/user_agent/user_agent_metadata.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
#include "third_party/blink/public/mojom/installedapp/installed_app_provider.mojom.h"
#include "third_party/blink/public/mojom/installedapp/related_application.mojom.h"
#include "url/gurl.h" #include "url/gurl.h"
#include "url/origin.h" #include "url/origin.h"
#include "weblayer/browser/browser_main_parts_impl.h" #include "weblayer/browser/browser_main_parts_impl.h"
...@@ -45,6 +43,7 @@ ...@@ -45,6 +43,7 @@
#include "weblayer/browser/profile_impl.h" #include "weblayer/browser/profile_impl.h"
#include "weblayer/browser/ssl_error_handler.h" #include "weblayer/browser/ssl_error_handler.h"
#include "weblayer/browser/tab_impl.h" #include "weblayer/browser/tab_impl.h"
#include "weblayer/browser/weblayer_browser_interface_binders.h"
#include "weblayer/browser/weblayer_content_browser_overlay_manifest.h" #include "weblayer/browser/weblayer_content_browser_overlay_manifest.h"
#include "weblayer/common/features.h" #include "weblayer/common/features.h"
#include "weblayer/public/fullscreen_delegate.h" #include "weblayer/public/fullscreen_delegate.h"
...@@ -108,29 +107,6 @@ class SSLCertReporterImpl : public SSLCertReporter { ...@@ -108,29 +107,6 @@ class SSLCertReporterImpl : public SSLCertReporter {
const std::string& serialized_report) override {} const std::string& serialized_report) override {}
}; };
#if defined(OS_ANDROID)
// TODO(https://crbug.com/1037884): Remove this.
class StubInstalledAppProvider : public blink::mojom::InstalledAppProvider {
public:
StubInstalledAppProvider() {}
~StubInstalledAppProvider() override = default;
// InstalledAppProvider overrides:
void FilterInstalledApps(
std::vector<blink::mojom::RelatedApplicationPtr> related_apps,
FilterInstalledAppsCallback callback) override {
std::move(callback).Run(std::vector<blink::mojom::RelatedApplicationPtr>());
}
static void Create(
content::RenderFrameHost* rfh,
mojo::PendingReceiver<blink::mojom::InstalledAppProvider> receiver) {
mojo::MakeSelfOwnedReceiver(std::make_unique<StubInstalledAppProvider>(),
std::move(receiver));
}
};
#endif
} // namespace } // namespace
namespace weblayer { namespace weblayer {
...@@ -398,11 +374,7 @@ void ContentBrowserClientImpl::ExposeInterfacesToRenderer( ...@@ -398,11 +374,7 @@ void ContentBrowserClientImpl::ExposeInterfacesToRenderer(
void ContentBrowserClientImpl::RegisterBrowserInterfaceBindersForFrame( void ContentBrowserClientImpl::RegisterBrowserInterfaceBindersForFrame(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) { service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) {
#if defined(OS_ANDROID) PopulateWebLayerFrameBinders(render_frame_host, map);
// TODO(https://crbug.com/1037884): Remove this.
map->Add<blink::mojom::InstalledAppProvider>(
base::BindRepeating(&StubInstalledAppProvider::Create));
#endif
} }
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
......
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
/* Main entry point. */ /* Main entry point. */
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
// Setup backend mojo. // Setup backend mojo.
const pageHandler = weblayerInternals.mojom.PageHandler.getRemote(); const pageHandler = weblayerInternals.mojom.PageHandler.getRemote(
/*useBrowserInterfaceBroker=*/ true);
if (cr.isAndroid) { if (cr.isAndroid) {
pageHandler.getRemoteDebuggingEnabled().then((response) => { pageHandler.getRemoteDebuggingEnabled().then((response) => {
let checkbox = $('remote-debug'); let checkbox = $('remote-debug');
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "weblayer/browser/weblayer_browser_interface_binders.h"
#include "base/bind.h"
#include "build/build_config.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_controller.h"
#include "third_party/blink/public/mojom/installedapp/installed_app_provider.mojom.h"
#include "third_party/blink/public/mojom/installedapp/related_application.mojom.h"
#include "weblayer/browser/webui/weblayer_internals.mojom.h"
#include "weblayer/browser/webui/weblayer_internals_ui.h"
#if defined(OS_ANDROID)
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#endif
namespace weblayer {
namespace {
void BindPageHandler(
content::RenderFrameHost* host,
mojo::PendingReceiver<weblayer_internals::mojom::PageHandler> receiver) {
auto* contents = content::WebContents::FromRenderFrameHost(host);
if (!contents)
return;
content::WebUI* web_ui = contents->GetWebUI();
// Performs a safe downcast to the concrete WebUIController subclass.
WebLayerInternalsUI* concrete_controller =
web_ui ? web_ui->GetController()->GetAs<WebLayerInternalsUI>() : nullptr;
// This is expected to be called only for main frames and for the right
// WebUI pages matching the same WebUI associated to the RenderFrameHost.
if (host->GetParent() || !concrete_controller)
return;
concrete_controller->BindInterface(std::move(receiver));
}
#if defined(OS_ANDROID)
// TODO(https://crbug.com/1037884): Remove this.
class StubInstalledAppProvider : public blink::mojom::InstalledAppProvider {
public:
StubInstalledAppProvider() {}
~StubInstalledAppProvider() override = default;
// InstalledAppProvider overrides:
void FilterInstalledApps(
std::vector<blink::mojom::RelatedApplicationPtr> related_apps,
FilterInstalledAppsCallback callback) override {
std::move(callback).Run(std::vector<blink::mojom::RelatedApplicationPtr>());
}
static void Create(
content::RenderFrameHost* rfh,
mojo::PendingReceiver<blink::mojom::InstalledAppProvider> receiver) {
mojo::MakeSelfOwnedReceiver(std::make_unique<StubInstalledAppProvider>(),
std::move(receiver));
}
};
#endif
} // namespace
void PopulateWebLayerFrameBinders(
content::RenderFrameHost* render_frame_host,
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) {
map->Add<weblayer_internals::mojom::PageHandler>(
base::BindRepeating(&BindPageHandler));
#if defined(OS_ANDROID)
// TODO(https://crbug.com/1037884): Remove this.
map->Add<blink::mojom::InstalledAppProvider>(
base::BindRepeating(&StubInstalledAppProvider::Create));
#endif
}
} // namespace weblayer
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WEBLAYER_BROWSER_WEBLAYER_BROWSER_INTERFACE_BINDERS_H_
#define WEBLAYER_BROWSER_WEBLAYER_BROWSER_INTERFACE_BINDERS_H_
#include "services/service_manager/public/cpp/binder_map.h"
namespace content {
class RenderFrameHost;
}
namespace weblayer {
void PopulateWebLayerFrameBinders(
content::RenderFrameHost* render_frame_host,
service_manager::BinderMapWithContext<content::RenderFrameHost*>*
binder_map);
} // namespace weblayer
#endif // WEBLAYER_BROWSER_WEBLAYER_BROWSER_INTERFACE_BINDERS_H_
...@@ -6,17 +6,12 @@ ...@@ -6,17 +6,12 @@
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "services/service_manager/public/cpp/manifest_builder.h" #include "services/service_manager/public/cpp/manifest_builder.h"
#include "weblayer/browser/webui/weblayer_internals.mojom.h"
namespace weblayer { namespace weblayer {
const service_manager::Manifest& GetWebLayerContentBrowserOverlayManifest() { const service_manager::Manifest& GetWebLayerContentBrowserOverlayManifest() {
static base::NoDestructor<service_manager::Manifest> manifest{ static base::NoDestructor<service_manager::Manifest> manifest{
service_manager::ManifestBuilder() service_manager::ManifestBuilder()
.ExposeInterfaceFilterCapability_Deprecated(
"navigation:frame", "renderer",
service_manager::Manifest::InterfaceList<
weblayer_internals::mojom::PageHandler>())
.Build()}; .Build()};
return *manifest; return *manifest;
} }
......
...@@ -23,8 +23,6 @@ WebLayerInternalsUI::WebLayerInternalsUI(content::WebUI* web_ui) ...@@ -23,8 +23,6 @@ WebLayerInternalsUI::WebLayerInternalsUI(content::WebUI* web_ui)
source->SetDefaultResource(IDR_WEBLAYER_INTERNALS_HTML); source->SetDefaultResource(IDR_WEBLAYER_INTERNALS_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(), content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source); source);
AddHandlerToRegistry(base::BindRepeating(
&WebLayerInternalsUI::BindPageHandler, base::Unretained(this)));
} }
WebLayerInternalsUI::~WebLayerInternalsUI() {} WebLayerInternalsUI::~WebLayerInternalsUI() {}
...@@ -40,7 +38,7 @@ void WebLayerInternalsUI::SetRemoteDebuggingEnabled(bool enabled) { ...@@ -40,7 +38,7 @@ void WebLayerInternalsUI::SetRemoteDebuggingEnabled(bool enabled) {
} }
#endif #endif
void WebLayerInternalsUI::BindPageHandler( void WebLayerInternalsUI::BindInterface(
mojo::PendingReceiver<weblayer_internals::mojom::PageHandler> mojo::PendingReceiver<weblayer_internals::mojom::PageHandler>
pending_receiver) { pending_receiver) {
if (receiver_.is_bound()) if (receiver_.is_bound())
...@@ -49,4 +47,6 @@ void WebLayerInternalsUI::BindPageHandler( ...@@ -49,4 +47,6 @@ void WebLayerInternalsUI::BindPageHandler(
receiver_.Bind(std::move(pending_receiver)); receiver_.Bind(std::move(pending_receiver));
} }
WEB_UI_CONTROLLER_TYPE_IMPL(WebLayerInternalsUI)
} // namespace weblayer } // namespace weblayer
...@@ -21,6 +21,12 @@ class WebLayerInternalsUI : public ui::MojoWebUIController, ...@@ -21,6 +21,12 @@ class WebLayerInternalsUI : public ui::MojoWebUIController,
~WebLayerInternalsUI() override; ~WebLayerInternalsUI() override;
// Instantiates implementor of the mojom::PageHandler mojo interface
// passing the pending receiver that will be internally bound.
void BindInterface(
mojo::PendingReceiver<weblayer_internals::mojom::PageHandler>
pending_receiver);
private: private:
// weblayer_internals::mojom::PageHandler: // weblayer_internals::mojom::PageHandler:
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
...@@ -29,12 +35,10 @@ class WebLayerInternalsUI : public ui::MojoWebUIController, ...@@ -29,12 +35,10 @@ class WebLayerInternalsUI : public ui::MojoWebUIController,
void SetRemoteDebuggingEnabled(bool enabled) override; void SetRemoteDebuggingEnabled(bool enabled) override;
#endif #endif
void BindPageHandler(
mojo::PendingReceiver<weblayer_internals::mojom::PageHandler>
pending_receiver);
mojo::Receiver<weblayer_internals::mojom::PageHandler> receiver_{this}; mojo::Receiver<weblayer_internals::mojom::PageHandler> receiver_{this};
WEB_UI_CONTROLLER_TYPE_DECL();
DISALLOW_COPY_AND_ASSIGN(WebLayerInternalsUI); DISALLOW_COPY_AND_ASSIGN(WebLayerInternalsUI);
}; };
......
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