Index: mojo/public/cpp/application/service_provider_impl.h |
diff --git a/mojo/public/cpp/application/service_provider_impl.h b/mojo/public/cpp/application/service_provider_impl.h |
index dd244723ef246e3f50d9ecc7ba0b69d42a36daad..54adac77bf41cfbb9bb78102f517a1eb0cbefaa9 100644 |
--- a/mojo/public/cpp/application/service_provider_impl.h |
+++ b/mojo/public/cpp/application/service_provider_impl.h |
@@ -7,10 +7,9 @@ |
#include <functional> |
#include <string> |
+#include <utility> |
-#include "mojo/public/cpp/application/application_connection.h" |
#include "mojo/public/cpp/application/connection_context.h" |
-#include "mojo/public/cpp/application/lib/interface_factory_connector.h" |
#include "mojo/public/cpp/application/lib/service_connector_registry.h" |
#include "mojo/public/cpp/application/service_connector.h" |
#include "mojo/public/cpp/bindings/binding.h" |
@@ -53,14 +52,12 @@ class ServiceProviderImpl : public ServiceProvider { |
// unbound state). This may be called even if this object is already unbound. |
void Close(); |
- // TODO(vtl): Remove this. |
- template <typename Interface> |
- void AddService(InterfaceFactory<Interface>* factory, |
- const std::string& interface_name = Interface::Name_) { |
+ // Adds a supported service with the given |name|, using the given |
+ // |service_connector|. |
+ void AddServiceForName(std::unique_ptr<ServiceConnector> service_connector, |
+ const std::string& interface_name) { |
service_connector_registry_.SetServiceConnectorForName( |
- std::unique_ptr<ServiceConnector>( |
- new internal::InterfaceFactoryConnector<Interface>(factory)), |
- interface_name); |
+ std::move(service_connector), interface_name); |
} |
// Adds a supported service with the given |name|, using the given |
@@ -70,23 +67,34 @@ class ServiceProviderImpl : public ServiceProvider { |
// |
// A typical usage may be: |
// |
- // service_provider_impl_->AddServiceNew<Foobar>( |
+ // service_provider_impl_->AddService<Foobar>( |
// [](const ConnectionContext& connection_context, |
// InterfaceRequest<FooBar> foobar_request) { |
// // |FoobarImpl| owns itself. |
// new FoobarImpl(std::move(foobar_request)); |
// }); |
- // TODO(vtl): Remove the AddService() above and rename this to AddService(). |
template <typename Interface> |
- void AddServiceNew( |
- InterfaceRequestHandler<Interface> interface_request_handler, |
- const std::string& name = Interface::Name_) { |
- service_connector_registry_.SetServiceConnectorForName( |
+ void AddService(InterfaceRequestHandler<Interface> interface_request_handler, |
+ const std::string& name = Interface::Name_) { |
+ AddServiceForName( |
std::unique_ptr<ServiceConnector>(new ServiceConnectorImpl<Interface>( |
std::move(interface_request_handler))), |
name); |
} |
+ // Removes support for the service with the given |name|. |
+ void RemoveServiceForName(const std::string& name) { |
+ service_connector_registry_.RemoveServiceConnectorForName(name); |
+ } |
+ |
+ // Like |RemoveServiceForName()| (above), but designed so that it can be used |
+ // like |RemoveService<Interface>()| or even |RemoveService<Interface>(name)| |
+ // (to parallel |AddService<Interface>()|). |
+ template <typename Interface> |
+ void RemoveService(const std::string& name = Interface::Name_) { |
+ RemoveServiceForName(name); |
+ } |
+ |
// This uses the provided |fallback_service_provider| for connection requests |
// for services that are not known (haven't been added). (Set it to null to |
// not have any fallback.) A fallback must outlive this object (or until it is |
@@ -96,6 +104,12 @@ class ServiceProviderImpl : public ServiceProvider { |
fallback_service_provider_ = fallback_service_provider; |
} |
+ // Gets the context for the connection that this object is bound to (if not |
+ // bound, the context is just a default-initialized |ConnectionContext|). |
+ const ConnectionContext& connection_context() const { |
+ return connection_context_; |
+ } |
+ |
private: |
// Objects of this class are used to adapt a generic (untyped) connection |
// request (i.e., |ServiceConnector::ConnectToService()|) to the type-safe |