Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: services/shell/public/cpp/lib/connector_impl.cc

Issue 2209943002: Eliminate outgoing InterfaceProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tracing
Patch Set: . Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/shell/public/cpp/lib/connector_impl.h" 5 #include "services/shell/public/cpp/lib/connector_impl.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "services/shell/public/cpp/identity.h" 8 #include "services/shell/public/cpp/identity.h"
9 #include "services/shell/public/cpp/lib/connection_impl.h" 9 #include "services/shell/public/cpp/lib/connection_impl.h"
10 10
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 if (!BindIfNecessary()) 45 if (!BindIfNecessary())
46 return nullptr; 46 return nullptr;
47 47
48 DCHECK(thread_checker_.CalledOnValidThread()); 48 DCHECK(thread_checker_.CalledOnValidThread());
49 DCHECK(params); 49 DCHECK(params);
50 50
51 // We allow all interfaces on outgoing connections since we are presumably in 51 // We allow all interfaces on outgoing connections since we are presumably in
52 // a position to know who we're talking to. 52 // a position to know who we're talking to.
53 CapabilityRequest request; 53 CapabilityRequest request;
54 request.interfaces.insert("*"); 54 request.interfaces.insert("*");
55 mojom::InterfaceProviderPtr local_interfaces;
56 mojom::InterfaceProviderRequest local_request = GetProxy(&local_interfaces);
57 mojom::InterfaceProviderPtr remote_interfaces; 55 mojom::InterfaceProviderPtr remote_interfaces;
58 mojom::InterfaceProviderRequest remote_request = GetProxy(&remote_interfaces); 56 mojom::InterfaceProviderRequest remote_request = GetProxy(&remote_interfaces);
59 std::unique_ptr<internal::ConnectionImpl> registry( 57 std::unique_ptr<internal::ConnectionImpl> connection(
60 new internal::ConnectionImpl( 58 new internal::ConnectionImpl(
61 params->target().name(), params->target(), mojom::kInvalidInstanceID, 59 params->target().name(), params->target(), mojom::kInvalidInstanceID,
62 request, Connection::State::PENDING)); 60 request, Connection::State::PENDING));
63 if (params->exposed_interfaces()) {
64 params->exposed_interfaces()->Bind(std::move(local_request));
65 registry->set_exposed_interfaces(params->exposed_interfaces());
66 } else {
67 std::unique_ptr<InterfaceRegistry> exposed_interfaces(
68 new InterfaceRegistry(registry.get()));
69 exposed_interfaces->Bind(std::move(local_request));
70 registry->SetExposedInterfaces(std::move(exposed_interfaces));
71 }
72 if (params->remote_interfaces()) { 61 if (params->remote_interfaces()) {
73 params->remote_interfaces()->Bind(std::move(remote_interfaces)); 62 params->remote_interfaces()->Bind(std::move(remote_interfaces));
74 registry->set_remote_interfaces(params->remote_interfaces()); 63 connection->set_remote_interfaces(params->remote_interfaces());
75 } else { 64 } else {
76 std::unique_ptr<InterfaceProvider> remote_interface_provider( 65 std::unique_ptr<InterfaceProvider> remote_interface_provider(
77 new InterfaceProvider); 66 new InterfaceProvider);
78 remote_interface_provider->Bind(std::move(remote_interfaces)); 67 remote_interface_provider->Bind(std::move(remote_interfaces));
79 registry->SetRemoteInterfaces(std::move(remote_interface_provider)); 68 connection->SetRemoteInterfaces(std::move(remote_interface_provider));
80 } 69 }
81 70
82 mojom::ServicePtr service; 71 mojom::ServicePtr service;
83 mojom::PIDReceiverRequest pid_receiver_request; 72 mojom::PIDReceiverRequest pid_receiver_request;
84 params->TakeClientProcessConnection(&service, &pid_receiver_request); 73 params->TakeClientProcessConnection(&service, &pid_receiver_request);
85 mojom::ClientProcessConnectionPtr client_process_connection; 74 mojom::ClientProcessConnectionPtr client_process_connection;
86 if (service.is_bound() && pid_receiver_request.is_pending()) { 75 if (service.is_bound() && pid_receiver_request.is_pending()) {
87 client_process_connection = mojom::ClientProcessConnection::New(); 76 client_process_connection = mojom::ClientProcessConnection::New();
88 client_process_connection->service = 77 client_process_connection->service =
89 service.PassInterface().PassHandle(); 78 service.PassInterface().PassHandle();
90 client_process_connection->pid_receiver_request = 79 client_process_connection->pid_receiver_request =
91 pid_receiver_request.PassMessagePipe(); 80 pid_receiver_request.PassMessagePipe();
92 } else if (service.is_bound() || pid_receiver_request.is_pending()) { 81 } else if (service.is_bound() || pid_receiver_request.is_pending()) {
93 NOTREACHED() << "If one of service or pid_receiver_request is valid, " 82 NOTREACHED() << "If one of service or pid_receiver_request is valid, "
94 << "both must be valid."; 83 << "both must be valid.";
95 return std::move(registry); 84 return std::move(connection);
96 } 85 }
97 connector_->Connect(mojom::Identity::From(params->target()), 86 connector_->Connect(mojom::Identity::From(params->target()),
98 std::move(remote_request), std::move(local_interfaces), 87 std::move(remote_request),
99 std::move(client_process_connection), 88 std::move(client_process_connection),
100 registry->GetConnectCallback()); 89 connection->GetConnectCallback());
101 return std::move(registry); 90 return std::move(connection);
102 } 91 }
103 92
104 std::unique_ptr<Connector> ConnectorImpl::Clone() { 93 std::unique_ptr<Connector> ConnectorImpl::Clone() {
105 if (!BindIfNecessary()) 94 if (!BindIfNecessary())
106 return nullptr; 95 return nullptr;
107 96
108 mojom::ConnectorPtr connector; 97 mojom::ConnectorPtr connector;
109 mojom::ConnectorRequest request = GetProxy(&connector); 98 mojom::ConnectorRequest request = GetProxy(&connector);
110 connector_->Clone(std::move(request)); 99 connector_->Clone(std::move(request));
111 return base::MakeUnique<ConnectorImpl>(connector.PassInterface()); 100 return base::MakeUnique<ConnectorImpl>(connector.PassInterface());
(...skipping 21 matching lines...) Expand all
133 return true; 122 return true;
134 } 123 }
135 124
136 std::unique_ptr<Connector> Connector::Create(mojom::ConnectorRequest* request) { 125 std::unique_ptr<Connector> Connector::Create(mojom::ConnectorRequest* request) {
137 mojom::ConnectorPtr proxy; 126 mojom::ConnectorPtr proxy;
138 *request = mojo::GetProxy(&proxy); 127 *request = mojo::GetProxy(&proxy);
139 return base::MakeUnique<ConnectorImpl>(proxy.PassInterface()); 128 return base::MakeUnique<ConnectorImpl>(proxy.PassInterface());
140 } 129 }
141 130
142 } // namespace shell 131 } // namespace shell
OLDNEW
« no previous file with comments | « services/shell/public/cpp/lib/connection_impl.cc ('k') | services/shell/public/cpp/lib/interface_registry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698