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 11 namespace mojo { 12 13 class Application; 14 class ApplicationImpl; 15 16 namespace internal { 17 18 class 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. 23 class 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