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") {
"browser/ssl_host_state_delegate_impl.h",
"browser/tab_impl.cc",
"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.h",
"browser/webui/web_ui_controller_factory.cc",
......
......@@ -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.h=set noparent
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 @@
#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/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/origin.h"
#include "weblayer/browser/browser_main_parts_impl.h"
......@@ -45,6 +43,7 @@
#include "weblayer/browser/profile_impl.h"
#include "weblayer/browser/ssl_error_handler.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/common/features.h"
#include "weblayer/public/fullscreen_delegate.h"
......@@ -108,29 +107,6 @@ class SSLCertReporterImpl : public SSLCertReporter {
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 weblayer {
......@@ -398,11 +374,7 @@ void ContentBrowserClientImpl::ExposeInterfacesToRenderer(
void ContentBrowserClientImpl::RegisterBrowserInterfaceBindersForFrame(
content::RenderFrameHost* render_frame_host,
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) {
#if defined(OS_ANDROID)
// TODO(https://crbug.com/1037884): Remove this.
map->Add<blink::mojom::InstalledAppProvider>(
base::BindRepeating(&StubInstalledAppProvider::Create));
#endif
PopulateWebLayerFrameBinders(render_frame_host, map);
}
#if defined(OS_ANDROID)
......
......@@ -10,7 +10,8 @@
/* Main entry point. */
document.addEventListener('DOMContentLoaded', function() {
// Setup backend mojo.
const pageHandler = weblayerInternals.mojom.PageHandler.getRemote();
const pageHandler = weblayerInternals.mojom.PageHandler.getRemote(
/*useBrowserInterfaceBroker=*/ true);
if (cr.isAndroid) {
pageHandler.getRemoteDebuggingEnabled().then((response) => {
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 @@
#include "base/no_destructor.h"
#include "services/service_manager/public/cpp/manifest_builder.h"
#include "weblayer/browser/webui/weblayer_internals.mojom.h"
namespace weblayer {
const service_manager::Manifest& GetWebLayerContentBrowserOverlayManifest() {
static base::NoDestructor<service_manager::Manifest> manifest{
service_manager::ManifestBuilder()
.ExposeInterfaceFilterCapability_Deprecated(
"navigation:frame", "renderer",
service_manager::Manifest::InterfaceList<
weblayer_internals::mojom::PageHandler>())
.Build()};
return *manifest;
}
......
......@@ -23,8 +23,6 @@ WebLayerInternalsUI::WebLayerInternalsUI(content::WebUI* web_ui)
source->SetDefaultResource(IDR_WEBLAYER_INTERNALS_HTML);
content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
source);
AddHandlerToRegistry(base::BindRepeating(
&WebLayerInternalsUI::BindPageHandler, base::Unretained(this)));
}
WebLayerInternalsUI::~WebLayerInternalsUI() {}
......@@ -40,7 +38,7 @@ void WebLayerInternalsUI::SetRemoteDebuggingEnabled(bool enabled) {
}
#endif
void WebLayerInternalsUI::BindPageHandler(
void WebLayerInternalsUI::BindInterface(
mojo::PendingReceiver<weblayer_internals::mojom::PageHandler>
pending_receiver) {
if (receiver_.is_bound())
......@@ -49,4 +47,6 @@ void WebLayerInternalsUI::BindPageHandler(
receiver_.Bind(std::move(pending_receiver));
}
WEB_UI_CONTROLLER_TYPE_IMPL(WebLayerInternalsUI)
} // namespace weblayer
......@@ -21,6 +21,12 @@ class WebLayerInternalsUI : public ui::MojoWebUIController,
~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:
// weblayer_internals::mojom::PageHandler:
#if defined(OS_ANDROID)
......@@ -29,12 +35,10 @@ class WebLayerInternalsUI : public ui::MojoWebUIController,
void SetRemoteDebuggingEnabled(bool enabled) override;
#endif
void BindPageHandler(
mojo::PendingReceiver<weblayer_internals::mojom::PageHandler>
pending_receiver);
mojo::Receiver<weblayer_internals::mojom::PageHandler> receiver_{this};
WEB_UI_CONTROLLER_TYPE_DECL();
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