Commit ab468693 authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

Convert InterfaceRequest to PendingReceiver in Connector::BindInterface

This CL converts the argument type from mojo::InterfaceRequest<Interface>
to mojo::PendingReceiver<Interface>. And, all callers start to call
it with a pending receiver.

Additionally. this CL renames ForwardRequest to ForwardReceiver.

Bug: 955171
Change-Id: I88f3d748cfaddf55f42cb7548d537270e4275931
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1933844Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Reviewed-by: default avatarDavid Tseng <dtseng@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Commit-Queue: Gyuyoung Kim <gyuyoung@igalia.com>
Cr-Commit-Position: refs/heads/master@{#721861}
parent f99422f0
......@@ -33,6 +33,7 @@
#include "extensions/browser/extension_host.h"
#include "extensions/browser/notification_types.h"
#include "extensions/browser/process_manager.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/service_manager/public/cpp/connector.h"
#include "ui/accessibility/accessibility_switches.h"
#include "ui/events/test/event_generator.h"
......
......@@ -269,9 +269,10 @@ DownloadMediaParser::GetMediaInterfaceFactory() {
mojo::PendingRemote<service_manager::mojom::InterfaceProvider> interfaces;
media_interface_provider_ = std::make_unique<media::MediaInterfaceProvider>(
interfaces.InitWithNewPipeAndPassReceiver());
media::mojom::MediaServicePtr media_service;
mojo::Remote<media::mojom::MediaService> media_service;
content::GetSystemConnector()->BindInterface(
media::mojom::kMediaServiceName, &media_service);
media::mojom::kMediaServiceName,
media_service.BindNewPipeAndPassReceiver());
media_service->CreateInterfaceFactory(
media_interface_factory_.BindNewPipeAndPassReceiver(),
std::move(interfaces));
......
......@@ -31,12 +31,13 @@ media::mojom::InterfaceFactory* MediaInterfaceFactoryHolder::Get() {
}
void MediaInterfaceFactoryHolder::ConnectToMediaService() {
media::mojom::MediaServicePtr media_service;
mojo::Remote<media::mojom::MediaService> media_service;
// TODO(slan): Use the BrowserContext Connector instead. See crbug.com/638950.
service_manager::Connector* connector =
ServiceManagerConnection::GetForProcess()->GetConnector();
connector->BindInterface(service_name_, &media_service);
connector->BindInterface(service_name_,
media_service.BindNewPipeAndPassReceiver());
media_service->CreateInterfaceFactory(
interface_factory_remote_.BindNewPipeAndPassReceiver(),
......
......@@ -96,11 +96,12 @@ void VideoDecoderProxy::ConnectToMediaService() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(!interface_factory_remote_);
media::mojom::MediaServicePtr media_service;
mojo::Remote<media::mojom::MediaService> media_service;
// TODO(slan): Use the BrowserContext Connector instead.
// See https://crbug.com/638950.
GetSystemConnector()->BindInterface(media::mojom::kMediaServiceName,
&media_service);
GetSystemConnector()->BindInterface(
media::mojom::kMediaServiceName,
media_service.BindNewPipeAndPassReceiver());
mojo::PendingRemote<service_manager::mojom::InterfaceProvider> interfaces;
ignore_result(interfaces.InitWithNewPipeAndPassReceiver());
......
......@@ -689,10 +689,10 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver {
// Forwards service requests to Service Manager since the renderer cannot launch
// out-of-process services on is own.
template <typename Interface>
void ForwardRequest(const char* service_name,
mojo::InterfaceRequest<Interface> request) {
void ForwardReceiver(const char* service_name,
mojo::PendingReceiver<Interface> receiver) {
// TODO(beng): This should really be using the per-profile connector.
GetSystemConnector()->BindInterface(service_name, std::move(request));
GetSystemConnector()->BindInterface(service_name, std::move(receiver));
}
class RenderProcessHostIsReadyObserver : public RenderProcessHostObserver {
......@@ -2067,28 +2067,28 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
AddUIThreadInterface(
registry.get(),
base::BindRepeating(&ForwardRequest<device::mojom::BatteryMonitor>,
base::BindRepeating(&ForwardReceiver<device::mojom::BatteryMonitor>,
device::mojom::kServiceName));
AddUIThreadInterface(
registry.get(),
base::BindRepeating(&ForwardRequest<device::mojom::TimeZoneMonitor>,
base::BindRepeating(&ForwardReceiver<device::mojom::TimeZoneMonitor>,
device::mojom::kServiceName));
AddUIThreadInterface(
registry.get(),
base::BindRepeating(&ForwardRequest<device::mojom::PowerMonitor>,
base::BindRepeating(&ForwardReceiver<device::mojom::PowerMonitor>,
device::mojom::kServiceName));
AddUIThreadInterface(
registry.get(),
base::BindRepeating(&ForwardRequest<ukm::mojom::UkmRecorderInterface>,
base::BindRepeating(&ForwardReceiver<ukm::mojom::UkmRecorderInterface>,
metrics::mojom::kMetricsServiceName));
AddUIThreadInterface(
registry.get(),
base::BindRepeating(
&ForwardRequest<device::mojom::ScreenOrientationListener>,
&ForwardReceiver<device::mojom::ScreenOrientationListener>,
device::mojom::kServiceName));
AddUIThreadInterface(
......
......@@ -46,8 +46,8 @@ void MediaService::OnDisconnected() {
Terminate();
}
void MediaService::Create(mojom::MediaServiceRequest request) {
bindings_.AddBinding(this, std::move(request));
void MediaService::Create(mojo::PendingReceiver<mojom::MediaService> receiver) {
receivers_.Add(this, std::move(receiver));
}
void MediaService::CreateInterfaceFactory(
......
......@@ -12,9 +12,9 @@
#include "media/mojo/mojom/interface_factory.mojom.h"
#include "media/mojo/mojom/media_service.mojom.h"
#include "media/mojo/services/media_mojo_export.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/unique_receiver_set.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/service.h"
......@@ -41,7 +41,7 @@ class MEDIA_MOJO_EXPORT MediaService : public service_manager::Service,
mojo::ScopedMessagePipeHandle interface_pipe) override;
void OnDisconnected() final;
void Create(mojom::MediaServiceRequest request);
void Create(mojo::PendingReceiver<mojom::MediaService> receiver);
void CreateInterfaceFactory(
mojo::PendingReceiver<mojom::InterfaceFactory> receiver,
......@@ -62,7 +62,7 @@ class MEDIA_MOJO_EXPORT MediaService : public service_manager::Service,
mojo::UniqueReceiverSet<mojom::InterfaceFactory> interface_factory_receivers_;
service_manager::BinderRegistry registry_;
mojo::BindingSet<mojom::MediaService> bindings_;
mojo::ReceiverSet<mojom::MediaService> receivers_;
DISALLOW_COPY_AND_ASSIGN(MediaService);
};
......
......@@ -131,9 +131,7 @@ class SERVICE_MANAGER_PUBLIC_CPP_EXPORT Connector {
mojo::PendingReceiver<Interface> receiver,
mojom::BindInterfacePriority priority =
mojom::BindInterfacePriority::kImportant) {
BindInterface(filter,
mojo::InterfaceRequest<Interface>(std::move(receiver)),
priority);
BindInterface(filter, std::move(receiver), priority);
}
// A variant of the above which constructs a simple ServiceFilter by service
......@@ -159,9 +157,7 @@ class SERVICE_MANAGER_PUBLIC_CPP_EXPORT Connector {
void Connect(const ServiceFilter& filter,
mojo::PendingReceiver<Interface> receiver,
BindInterfaceCallback callback) {
BindInterface(filter,
mojo::InterfaceRequest<Interface>(std::move(receiver)),
std::move(callback));
BindInterface(filter, std::move(receiver), std::move(callback));
}
// DEPRECATED: Prefer |Connect()| above. |BindInterface()| uses deprecated
// InterfaceRequest and InterfacePtr types.
......@@ -188,9 +184,9 @@ class SERVICE_MANAGER_PUBLIC_CPP_EXPORT Connector {
// of |BindInterface()| here are sufficient for all use cases.
template <typename Interface>
void BindInterface(const ServiceFilter& filter,
mojo::InterfaceRequest<Interface> request,
mojo::PendingReceiver<Interface> receiver,
BindInterfaceCallback callback = {}) {
BindInterface(filter, Interface::Name_, request.PassMessagePipe(),
BindInterface(filter, Interface::Name_, receiver.PassPipe(),
mojom::BindInterfacePriority::kImportant,
std::move(callback));
}
......@@ -210,16 +206,16 @@ class SERVICE_MANAGER_PUBLIC_CPP_EXPORT Connector {
template <typename Interface>
void BindInterface(const std::string& service_name,
mojo::InterfaceRequest<Interface> request) {
mojo::PendingReceiver<Interface> receiver) {
return BindInterface(ServiceFilter::ByName(service_name),
std::move(request));
std::move(receiver));
}
template <typename Interface>
void BindInterface(const ServiceFilter& filter,
mojo::InterfaceRequest<Interface> request,
mojo::PendingReceiver<Interface> receiver,
mojom::BindInterfacePriority priority) {
return BindInterface(filter, Interface::Name_, request.PassMessagePipe(),
return BindInterface(filter, Interface::Name_, receiver.PassPipe(),
priority, {});
}
......
......@@ -228,9 +228,10 @@ class LifecycleTest : public testing::Test {
return !base::CommandLine::ForCurrentProcess()->HasSwitch("single-process");
}
test::mojom::LifecycleControlPtr ConnectTo(const std::string& name) {
test::mojom::LifecycleControlPtr lifecycle;
connector()->BindInterface(name, &lifecycle);
mojo::Remote<test::mojom::LifecycleControl> ConnectTo(
const std::string& name) {
mojo::Remote<test::mojom::LifecycleControl> lifecycle;
connector()->BindInterface(name, lifecycle.BindNewPipeAndPassReceiver());
PingPong(lifecycle.get());
return lifecycle;
}
......@@ -267,13 +268,14 @@ class LifecycleTest : public testing::Test {
};
TEST_F(LifecycleTest, Standalone_GracefulQuit) {
test::mojom::LifecycleControlPtr lifecycle = ConnectTo(kTestAppName);
mojo::Remote<test::mojom::LifecycleControl> lifecycle =
ConnectTo(kTestAppName);
EXPECT_TRUE(instances()->HasInstanceForName(kTestAppName));
EXPECT_EQ(1u, instances()->GetNewInstanceCount());
base::RunLoop loop;
lifecycle.set_connection_error_handler(loop.QuitClosure());
lifecycle.set_disconnect_handler(loop.QuitClosure());
lifecycle->GracefulQuit();
loop.Run();
......@@ -288,13 +290,14 @@ TEST_F(LifecycleTest, Standalone_Crash) {
return;
}
test::mojom::LifecycleControlPtr lifecycle = ConnectTo(kTestAppName);
mojo::Remote<test::mojom::LifecycleControl> lifecycle =
ConnectTo(kTestAppName);
EXPECT_TRUE(instances()->HasInstanceForName(kTestAppName));
EXPECT_EQ(1u, instances()->GetNewInstanceCount());
base::RunLoop loop;
lifecycle.set_connection_error_handler(loop.QuitClosure());
lifecycle.set_disconnect_handler(loop.QuitClosure());
lifecycle->Crash();
loop.Run();
......@@ -304,13 +307,14 @@ TEST_F(LifecycleTest, Standalone_Crash) {
}
TEST_F(LifecycleTest, Standalone_CloseServiceManagerConnection) {
test::mojom::LifecycleControlPtr lifecycle = ConnectTo(kTestAppName);
mojo::Remote<test::mojom::LifecycleControl> lifecycle =
ConnectTo(kTestAppName);
EXPECT_TRUE(instances()->HasInstanceForName(kTestAppName));
EXPECT_EQ(1u, instances()->GetNewInstanceCount());
base::RunLoop loop;
lifecycle.set_connection_error_handler(loop.QuitClosure());
lifecycle.set_disconnect_handler(loop.QuitClosure());
lifecycle->CloseServiceManagerConnection();
instances()->WaitForInstanceDestruction();
......@@ -320,7 +324,8 @@ TEST_F(LifecycleTest, Standalone_CloseServiceManagerConnection) {
}
TEST_F(LifecycleTest, PackagedApp_GracefulQuit) {
test::mojom::LifecycleControlPtr lifecycle = ConnectTo(kTestPackageAppNameA);
mojo::Remote<test::mojom::LifecycleControl> lifecycle =
ConnectTo(kTestPackageAppNameA);
// There should be two new instances - one for the app and one for the package
// that vended it.
......@@ -329,7 +334,7 @@ TEST_F(LifecycleTest, PackagedApp_GracefulQuit) {
EXPECT_EQ(2u, instances()->GetNewInstanceCount());
base::RunLoop loop;
lifecycle.set_connection_error_handler(loop.QuitClosure());
lifecycle.set_disconnect_handler(loop.QuitClosure());
lifecycle->GracefulQuit();
loop.Run();
......@@ -345,7 +350,8 @@ TEST_F(LifecycleTest, PackagedApp_Crash) {
return;
}
test::mojom::LifecycleControlPtr lifecycle = ConnectTo(kTestPackageAppNameA);
mojo::Remote<test::mojom::LifecycleControl> lifecycle =
ConnectTo(kTestPackageAppNameA);
// There should be two new instances - one for the app and one for the package
// that vended it.
......@@ -354,7 +360,7 @@ TEST_F(LifecycleTest, PackagedApp_Crash) {
EXPECT_EQ(2u, instances()->GetNewInstanceCount());
base::RunLoop loop;
lifecycle.set_connection_error_handler(loop.QuitClosure());
lifecycle.set_disconnect_handler(loop.QuitClosure());
lifecycle->Crash();
loop.Run();
......@@ -372,11 +378,11 @@ TEST_F(LifecycleTest, PackagedApp_CrashCrashesOtherProvidedApp) {
return;
}
test::mojom::LifecycleControlPtr lifecycle_a =
mojo::Remote<test::mojom::LifecycleControl> lifecycle_a =
ConnectTo(kTestPackageAppNameA);
test::mojom::LifecycleControlPtr lifecycle_b =
mojo::Remote<test::mojom::LifecycleControl> lifecycle_b =
ConnectTo(kTestPackageAppNameB);
test::mojom::LifecycleControlPtr lifecycle_package =
mojo::Remote<test::mojom::LifecycleControl> lifecycle_package =
ConnectTo(kTestPackageName);
// There should be three instances, one for each packaged app and the package
......@@ -390,9 +396,9 @@ TEST_F(LifecycleTest, PackagedApp_CrashCrashesOtherProvidedApp) {
base::RunLoop loop;
base::RepeatingClosure quit_on_last = base::BarrierClosure(
static_cast<int>(instance_count), loop.QuitClosure());
lifecycle_a.set_connection_error_handler(quit_on_last);
lifecycle_b.set_connection_error_handler(quit_on_last);
lifecycle_package.set_connection_error_handler(quit_on_last);
lifecycle_a.set_disconnect_handler(quit_on_last);
lifecycle_b.set_disconnect_handler(quit_on_last);
lifecycle_package.set_disconnect_handler(quit_on_last);
// Now crash one of the packaged apps.
lifecycle_a->Crash();
......@@ -408,11 +414,11 @@ TEST_F(LifecycleTest, PackagedApp_CrashCrashesOtherProvidedApp) {
// When a single package provides multiple apps out of one process, crashing one
// app crashes all.
TEST_F(LifecycleTest, PackagedApp_GracefulQuitPackageQuitsAll) {
test::mojom::LifecycleControlPtr lifecycle_a =
mojo::Remote<test::mojom::LifecycleControl> lifecycle_a =
ConnectTo(kTestPackageAppNameA);
test::mojom::LifecycleControlPtr lifecycle_b =
mojo::Remote<test::mojom::LifecycleControl> lifecycle_b =
ConnectTo(kTestPackageAppNameB);
test::mojom::LifecycleControlPtr lifecycle_package =
mojo::Remote<test::mojom::LifecycleControl> lifecycle_package =
ConnectTo(kTestPackageName);
// There should be three instances, one for each packaged app and the package
......@@ -426,9 +432,9 @@ TEST_F(LifecycleTest, PackagedApp_GracefulQuitPackageQuitsAll) {
base::RunLoop loop;
base::RepeatingClosure quit_on_last = base::BarrierClosure(
static_cast<int>(instance_count), loop.QuitClosure());
lifecycle_a.set_connection_error_handler(quit_on_last);
lifecycle_b.set_connection_error_handler(quit_on_last);
lifecycle_package.set_connection_error_handler(quit_on_last);
lifecycle_a.set_disconnect_handler(quit_on_last);
lifecycle_b.set_disconnect_handler(quit_on_last);
lifecycle_package.set_disconnect_handler(quit_on_last);
// Now quit the package. All the packaged apps should close.
lifecycle_package->GracefulQuit();
......
......@@ -8,6 +8,7 @@
#include "base/run_loop.h"
#include "base/task/single_thread_task_executor.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/service.h"
......@@ -43,9 +44,9 @@ class Parent : public service_manager::Service,
// service_manager::test::mojom::Parent:
void ConnectToChild(ConnectToChildCallback callback) override {
service_manager::test::mojom::LifecycleControlPtr lifecycle;
service_binding_.GetConnector()->BindInterface("lifecycle_unittest_app",
&lifecycle);
mojo::Remote<service_manager::test::mojom::LifecycleControl> lifecycle;
service_binding_.GetConnector()->BindInterface(
"lifecycle_unittest_app", lifecycle.BindNewPipeAndPassReceiver());
base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
lifecycle->Ping(loop.QuitClosure());
......
......@@ -4,6 +4,7 @@
#include "base/macros.h"
#include "base/task/single_thread_task_executor.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_binding.h"
......@@ -23,9 +24,10 @@ class Target : public service_manager::Service {
private:
// service_manager::Service:
void OnStart() override {
service_manager::test::mojom::CreateInstanceTestPtr service;
mojo::Remote<service_manager::test::mojom::CreateInstanceTest> service;
service_binding_.GetConnector()->BindInterface(
service_manager::kTestServiceName, &service);
service_manager::kTestServiceName,
service.BindNewPipeAndPassReceiver());
service->SetTargetIdentity(service_binding_.identity());
}
......
......@@ -9,6 +9,7 @@
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/service.h"
......@@ -45,9 +46,9 @@ class ShutdownClientApp : public Service,
// mojom::ShutdownTestClientController:
void ConnectAndWait(ConnectAndWaitCallback callback) override {
mojom::ShutdownTestServicePtr service;
service_binding_.GetConnector()->BindInterface("shutdown_service",
&service);
mojo::Remote<mojom::ShutdownTestService> service;
service_binding_.GetConnector()->BindInterface(
"shutdown_service", service.BindNewPipeAndPassReceiver());
mojo::Receiver<mojom::ShutdownTestClient> client_receiver(this);
......
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