| Index: mojo/public/cpp/application/lib/application.cc
|
| diff --git a/mojo/public/cpp/application/lib/application.cc b/mojo/public/cpp/application/lib/application.cc
|
| index 9c8f2e172db937e282e57d8e74ba4cb2fd5323e4..d825d8508646e1442c51e196b76c3e82e88c0510 100644
|
| --- a/mojo/public/cpp/application/lib/application.cc
|
| +++ b/mojo/public/cpp/application/lib/application.cc
|
| @@ -18,31 +18,30 @@ Application::Application(MojoHandle service_provider_handle)
|
| MessagePipeHandle(service_provider_handle)).Pass()) {}
|
|
|
| Application::~Application() {
|
| - for (ServiceConnectorList::iterator it = service_connectors_.begin();
|
| - it != service_connectors_.end(); ++it) {
|
| - delete *it;
|
| + 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 Application::Initialize() {}
|
|
|
| void Application::AddServiceConnector(
|
| internal::ServiceConnectorBase* service_connector) {
|
| - service_connectors_.push_back(service_connector);
|
| + name_to_service_connector_[service_connector->name()] = service_connector;
|
| set_service_connector_owner(service_connector, this);
|
| }
|
|
|
| void Application::RemoveServiceConnector(
|
| internal::ServiceConnectorBase* service_connector) {
|
| - for (ServiceConnectorList::iterator it = service_connectors_.begin();
|
| - it != service_connectors_.end(); ++it) {
|
| - if (*it == service_connector) {
|
| - service_connectors_.erase(it);
|
| - delete service_connector;
|
| - break;
|
| - }
|
| - }
|
| - if (service_connectors_.empty())
|
| + NameToServiceConnectorMap::iterator it =
|
| + name_to_service_connector_.find(service_connector->name());
|
| + assert(it != name_to_service_connector_.end());
|
| + delete it->second;
|
| + name_to_service_connector_.erase(it);
|
| + if (name_to_service_connector_.empty())
|
| service_provider_.reset();
|
| }
|
|
|
| @@ -53,13 +52,12 @@ void Application::BindServiceProvider(
|
| }
|
|
|
| void Application::ConnectToService(const mojo::String& url,
|
| + const mojo::String& name,
|
| ScopedMessagePipeHandle client_handle) {
|
| - // TODO(davemoore): This method must be overridden by an Application subclass
|
| - // to dispatch to the right ServiceConnector. We need to figure out an
|
| - // approach to registration to make this better.
|
| - assert(1 == service_connectors_.size());
|
| - return service_connectors_.front()->ConnectToService(url,
|
| - client_handle.Pass());
|
| + internal::ServiceConnectorBase* service_connector =
|
| + name_to_service_connector_[name];
|
| + return service_connector->ConnectToService(
|
| + url, name, client_handle.Pass());
|
| }
|
|
|
| } // namespace mojo
|
|
|