• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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