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