| Index: services/service_manager/public/cpp/lib/service_context.cc
|
| diff --git a/services/service_manager/public/cpp/lib/service_context.cc b/services/service_manager/public/cpp/lib/service_context.cc
|
| index 95db8eb535d1b09654ce2cd4481c49d667459312..d95d60629ee2e696867663b376e565222be35edf 100644
|
| --- a/services/service_manager/public/cpp/lib/service_context.cc
|
| +++ b/services/service_manager/public/cpp/lib/service_context.cc
|
| @@ -51,7 +51,8 @@ void ServiceContext::SetConnectionLostClosure(const base::Closure& closure) {
|
| }
|
|
|
| void ServiceContext::RequestQuit() {
|
| - // TODO(rockot): Implement this.
|
| + DCHECK(service_control_.is_bound());
|
| + service_control_->RequestQuit();
|
| }
|
|
|
| void ServiceContext::DisconnectFromServiceManager() {
|
| @@ -78,13 +79,15 @@ void ServiceContext::DestroyService() {
|
| void ServiceContext::OnStart(const ServiceInfo& info,
|
| const OnStartCallback& callback) {
|
| local_info_ = info;
|
| - callback.Run(std::move(pending_connector_request_));
|
| + callback.Run(std::move(pending_connector_request_),
|
| + mojo::GetProxy(&service_control_, binding_.associated_group()));
|
| service_->OnStart(this);
|
| }
|
|
|
| void ServiceContext::OnConnect(
|
| const ServiceInfo& source_info,
|
| - mojom::InterfaceProviderRequest interfaces) {
|
| + mojom::InterfaceProviderRequest interfaces,
|
| + const OnConnectCallback& callback) {
|
| InterfaceProviderSpec source_spec, target_spec;
|
| GetInterfaceProviderSpec(mojom::kServiceManager_ConnectorSpec,
|
| local_info_.interface_provider_specs, &target_spec);
|
| @@ -95,6 +98,9 @@ void ServiceContext::OnConnect(
|
| registry->Bind(std::move(interfaces), local_info_.identity, target_spec,
|
| source_info.identity, source_spec);
|
|
|
| + // Acknowledge the request regardless of whether it's accepted.
|
| + callback.Run();
|
| +
|
| if (!service_->OnConnect(source_info, registry.get()))
|
| return;
|
|
|
|
|