OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef MOJO_PUBLIC_APPLICATION_SERVICE_PROVIDER_IMPL_H_ | 5 #ifndef MOJO_PUBLIC_APPLICATION_SERVICE_PROVIDER_IMPL_H_ |
6 #define MOJO_PUBLIC_APPLICATION_SERVICE_PROVIDER_IMPL_H_ | 6 #define MOJO_PUBLIC_APPLICATION_SERVICE_PROVIDER_IMPL_H_ |
7 | 7 |
8 #include <functional> | 8 #include <functional> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 template <typename Interface> | 30 template <typename Interface> |
31 using InterfaceRequestHandler = | 31 using InterfaceRequestHandler = |
32 std::function<void(const ConnectionContext& connection_context, | 32 std::function<void(const ConnectionContext& connection_context, |
33 InterfaceRequest<Interface> interface_request)>; | 33 InterfaceRequest<Interface> interface_request)>; |
34 | 34 |
35 // Constructs this service provider implementation in an unbound state. | 35 // Constructs this service provider implementation in an unbound state. |
36 ServiceProviderImpl(); | 36 ServiceProviderImpl(); |
37 | 37 |
38 // Constructs this service provider implementation, binding it to the given | 38 // Constructs this service provider implementation, binding it to the given |
39 // interface request. | 39 // interface request. |
40 // TODO(vtl): This should take a |ConnectionContext|, to provide | |
41 // |InterfaceRequestHandler<I>|s. | |
42 explicit ServiceProviderImpl( | 40 explicit ServiceProviderImpl( |
| 41 const ConnectionContext& connection_context, |
43 InterfaceRequest<ServiceProvider> service_provider_request); | 42 InterfaceRequest<ServiceProvider> service_provider_request); |
44 | 43 |
45 ~ServiceProviderImpl() override; | 44 ~ServiceProviderImpl() override; |
46 | 45 |
47 // Binds this service provider implementation to the given interface request. | 46 // Binds this service provider implementation to the given interface request. |
48 // This may only be called if this object is unbound. | 47 // This may only be called if this object is unbound. |
49 // TODO(vtl): This should take a |ConnectionContext|, to provide | 48 void Bind(const ConnectionContext& connection_context, |
50 // |InterfaceRequestHandler<I>|s. | 49 InterfaceRequest<ServiceProvider> service_provider_request); |
51 void Bind(InterfaceRequest<ServiceProvider> service_provider_request); | |
52 | 50 |
53 // Disconnect this service provider implementation and put it in a state where | 51 // Disconnect this service provider implementation and put it in a state where |
54 // it can be rebound to a new request (i.e., restores this object to an | 52 // it can be rebound to a new request (i.e., restores this object to an |
55 // unbound state). This may be called even if this object is already unbound. | 53 // unbound state). This may be called even if this object is already unbound. |
56 void Close(); | 54 void Close(); |
57 | 55 |
58 // TODO(vtl): Remove this. | 56 // TODO(vtl): Remove this. |
59 template <typename Interface> | 57 template <typename Interface> |
60 void AddService(InterfaceFactory<Interface>* factory, | 58 void AddService(InterfaceFactory<Interface>* factory, |
61 const std::string& interface_name = Interface::Name_) { | 59 const std::string& interface_name = Interface::Name_) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 // request (i.e., |ServiceConnector::ConnectToService()|) to the type-safe | 101 // request (i.e., |ServiceConnector::ConnectToService()|) to the type-safe |
104 // |InterfaceRequestHandler<Interface>|. | 102 // |InterfaceRequestHandler<Interface>|. |
105 template <typename Interface> | 103 template <typename Interface> |
106 class ServiceConnectorImpl : public ServiceConnector { | 104 class ServiceConnectorImpl : public ServiceConnector { |
107 public: | 105 public: |
108 explicit ServiceConnectorImpl( | 106 explicit ServiceConnectorImpl( |
109 InterfaceRequestHandler<Interface> interface_request_handler) | 107 InterfaceRequestHandler<Interface> interface_request_handler) |
110 : interface_request_handler_(std::move(interface_request_handler)) {} | 108 : interface_request_handler_(std::move(interface_request_handler)) {} |
111 ~ServiceConnectorImpl() override {} | 109 ~ServiceConnectorImpl() override {} |
112 | 110 |
113 void ConnectToService(ApplicationConnection* application_connection, | 111 void ConnectToService(const mojo::ConnectionContext& connection_context, |
114 const std::string& interface_name, | 112 const std::string& interface_name, |
115 ScopedMessagePipeHandle client_handle) override { | 113 ScopedMessagePipeHandle client_handle) override { |
116 // TODO(vtl): This should be given a |const ConnectionContext&|, instead | |
117 // of an |ApplicationConnection*| -- which may be null! | |
118 interface_request_handler_( | 114 interface_request_handler_( |
119 application_connection | 115 connection_context, |
120 ? application_connection->GetConnectionContext() | |
121 : ConnectionContext(), | |
122 InterfaceRequest<Interface>(client_handle.Pass())); | 116 InterfaceRequest<Interface>(client_handle.Pass())); |
123 } | 117 } |
124 | 118 |
125 private: | 119 private: |
126 const InterfaceRequestHandler<Interface> interface_request_handler_; | 120 const InterfaceRequestHandler<Interface> interface_request_handler_; |
127 | 121 |
128 MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceConnectorImpl); | 122 MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceConnectorImpl); |
129 }; | 123 }; |
130 | 124 |
131 // Overridden from |ServiceProvider|: | 125 // Overridden from |ServiceProvider|: |
132 void ConnectToService(const String& service_name, | 126 void ConnectToService(const String& service_name, |
133 ScopedMessagePipeHandle client_handle) override; | 127 ScopedMessagePipeHandle client_handle) override; |
134 | 128 |
| 129 ConnectionContext connection_context_; |
135 Binding<ServiceProvider> binding_; | 130 Binding<ServiceProvider> binding_; |
136 | 131 |
137 internal::ServiceConnectorRegistry service_connector_registry_; | 132 internal::ServiceConnectorRegistry service_connector_registry_; |
138 ServiceProvider* fallback_service_provider_; | 133 ServiceProvider* fallback_service_provider_; |
139 | 134 |
140 MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceProviderImpl); | 135 MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceProviderImpl); |
141 }; | 136 }; |
142 | 137 |
143 } // namespace mojo | 138 } // namespace mojo |
144 | 139 |
145 #endif // MOJO_PUBLIC_APPLICATION_SERVICE_PROVIDER_IMPL_H_ | 140 #endif // MOJO_PUBLIC_APPLICATION_SERVICE_PROVIDER_IMPL_H_ |
OLD | NEW |