Home | History | Annotate | Download | only in lib
      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