| 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
|
|
|