1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_REGISTRY_H_ 6#define MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_REGISTRY_H_ 7 8#include "mojo/public/cpp/application/application_connection.h" 9#include "mojo/public/interfaces/application/service_provider.mojom.h" 10 11namespace mojo { 12 13class Application; 14class ApplicationImpl; 15 16namespace internal { 17 18class ServiceConnectorBase; 19 20// A ServiceRegistry represents each half of a connection between two 21// applications, allowing customization of which services are published to the 22// other. 23class ServiceRegistry : public ServiceProvider, public ApplicationConnection { 24 public: 25 ServiceRegistry(); 26 ServiceRegistry(ApplicationImpl* application_impl, 27 const std::string& url, 28 ServiceProviderPtr service_provider); 29 virtual ~ServiceRegistry(); 30 31 // ApplicationConnection overrides. 32 virtual void AddServiceConnector(ServiceConnectorBase* service_connector) 33 MOJO_OVERRIDE; 34 virtual const std::string& GetRemoteApplicationURL() MOJO_OVERRIDE; 35 virtual ApplicationConnection* ConnectToApplication( 36 const std::string& url) MOJO_OVERRIDE; 37 virtual ServiceProvider* GetServiceProvider() MOJO_OVERRIDE; 38 39 virtual void RemoveServiceConnector(ServiceConnectorBase* service_connector); 40 41 private: 42 // ServiceProvider method. 43 virtual void ConnectToService(const mojo::String& service_name, 44 ScopedMessagePipeHandle client_handle) 45 MOJO_OVERRIDE; 46 47 ApplicationImpl* application_impl_; 48 const std::string url_; 49 50 private: 51 bool RemoveServiceConnectorInternal( 52 ServiceConnectorBase* service_connector); 53 54 Application* application_; 55 typedef std::map<std::string, ServiceConnectorBase*> 56 NameToServiceConnectorMap; 57 NameToServiceConnectorMap name_to_service_connector_; 58 ServiceProviderPtr remote_service_provider_; 59 60 MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceRegistry); 61}; 62 63} // namespace internal 64} // namespace mojo 65 66#endif // MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_REGISTRY_H_ 67