Index: mojo/public/cpp/application/lib/service_provider_impl.cc |
diff --git a/mojo/public/cpp/application/lib/service_provider_impl.cc b/mojo/public/cpp/application/lib/service_provider_impl.cc |
index a3245b410cd8b97826f4876e6ed0fd16e81f6341..b65b77aa1ef128ffd0c18138a99a7b7329253a8b 100644 |
--- a/mojo/public/cpp/application/lib/service_provider_impl.cc |
+++ b/mojo/public/cpp/application/lib/service_provider_impl.cc |
@@ -4,8 +4,7 @@ |
#include "mojo/public/cpp/application/service_provider_impl.h" |
-#include "mojo/public/cpp/application/service_connector.h" |
-#include "mojo/public/cpp/environment/logging.h" |
+#include <utility> |
namespace mojo { |
@@ -37,12 +36,26 @@ void ServiceProviderImpl::Close() { |
} |
} |
+void ServiceProviderImpl::AddServiceForName( |
+ std::unique_ptr<ServiceConnector> service_connector, |
+ const std::string& service_name) { |
+ name_to_service_connector_[service_name] = std::move(service_connector); |
+} |
+ |
+void ServiceProviderImpl::RemoveServiceForName( |
+ const std::string& service_name) { |
+ auto it = name_to_service_connector_.find(service_name); |
+ if (it != name_to_service_connector_.end()) |
+ name_to_service_connector_.erase(it); |
+} |
+ |
void ServiceProviderImpl::ConnectToService( |
const String& service_name, |
ScopedMessagePipeHandle client_handle) { |
- bool service_found = service_connector_registry_.ConnectToService( |
- connection_context_, service_name, &client_handle); |
- if (!service_found && fallback_service_provider_) { |
+ auto it = name_to_service_connector_.find(service_name); |
+ if (it != name_to_service_connector_.end()) { |
+ it->second->ConnectToService(connection_context_, client_handle.Pass()); |
+ } else if (fallback_service_provider_) { |
fallback_service_provider_->ConnectToService(service_name, |
client_handle.Pass()); |
} |