Index: third_party/mojo/src/mojo/public/cpp/application/lib/service_connector_registry.cc |
diff --git a/third_party/mojo/src/mojo/public/cpp/application/lib/service_connector_registry.cc b/third_party/mojo/src/mojo/public/cpp/application/lib/service_connector_registry.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7c216cde350d3ad2079db36de356927867eac994 |
--- /dev/null |
+++ b/third_party/mojo/src/mojo/public/cpp/application/lib/service_connector_registry.cc |
@@ -0,0 +1,59 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "mojo/public/cpp/application/lib/service_connector_registry.h" |
+ |
+#include "mojo/public/cpp/application/service_connector.h" |
+ |
+namespace mojo { |
+namespace internal { |
+ |
+ServiceConnectorRegistry::ServiceConnectorRegistry() |
+ : service_connector_(nullptr) { |
+} |
+ |
+ServiceConnectorRegistry::~ServiceConnectorRegistry() { |
+ for (NameToServiceConnectorMap::iterator i = |
+ name_to_service_connector_.begin(); |
+ i != name_to_service_connector_.end(); ++i) { |
+ delete i->second; |
+ } |
+ name_to_service_connector_.clear(); |
+} |
+ |
+void ServiceConnectorRegistry::SetServiceConnectorForName( |
+ ServiceConnector* service_connector, |
+ const std::string& interface_name) { |
+ RemoveServiceConnectorForName(interface_name); |
+ name_to_service_connector_[interface_name] = service_connector; |
+} |
+ |
+void ServiceConnectorRegistry::RemoveServiceConnectorForName( |
+ const std::string& interface_name) { |
+ NameToServiceConnectorMap::iterator it = |
+ name_to_service_connector_.find(interface_name); |
+ if (it == name_to_service_connector_.end()) |
+ return; |
+ delete it->second; |
+ name_to_service_connector_.erase(it); |
+} |
+ |
+void ServiceConnectorRegistry::ConnectToService( |
+ ApplicationConnection* application_connection, |
+ const std::string& interface_name, |
+ ScopedMessagePipeHandle client_handle) { |
+ auto iter = name_to_service_connector_.find(interface_name); |
+ if (iter != name_to_service_connector_.end()) { |
+ iter->second->ConnectToService(application_connection, interface_name, |
+ client_handle.Pass()); |
+ return; |
+ } |
+ if (service_connector_) { |
+ service_connector_->ConnectToService(application_connection, interface_name, |
+ client_handle.Pass()); |
+ } |
+} |
+ |
+} // namespace internal |
+} // namespace mojo |