service_connector.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba// Copyright 2014 The Chromium Authors. All rights reserved.
2ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba// Use of this source code is governed by a BSD-style license that can be
3ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba// found in the LICENSE file.
4ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
5ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba#ifndef MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_
6ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba#define MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_
7ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
8ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba#include "mojo/public/cpp/application/interface_factory.h"
9ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba#include "mojo/public/cpp/bindings/interface_request.h"
10ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
11ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosibanamespace mojo {
12ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosibaclass ApplicationConnection;
13ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
14ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosibanamespace internal {
15ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
16ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosibaclass ServiceConnectorBase {
17ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba public:
18ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  ServiceConnectorBase(const std::string& name);
19ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  virtual ~ServiceConnectorBase();
20ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  virtual void ConnectToService(const std::string& name,
21ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba                                ScopedMessagePipeHandle client_handle) = 0;
22ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  std::string name() const { return name_; }
23ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  void set_application_connection(ApplicationConnection* connection) {
24ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba      application_connection_ = connection; }
25ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
26ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba protected:
27ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  std::string name_;
28ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  ApplicationConnection* application_connection_;
29ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
30ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceConnectorBase);
31ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba};
32ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
33ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosibatemplate <typename Interface>
34ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosibaclass InterfaceFactoryConnector : public ServiceConnectorBase {
35ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba public:
36ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  explicit InterfaceFactoryConnector(InterfaceFactory<Interface>* factory)
37ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba      : ServiceConnectorBase(Interface::Name_), factory_(factory) {}
38ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  virtual ~InterfaceFactoryConnector() {}
39ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
40ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  virtual void ConnectToService(const std::string& name,
41ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba                                ScopedMessagePipeHandle client_handle) {
42ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba    factory_->Create(application_connection_,
43ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba                     MakeRequest<Interface>(client_handle.Pass()));
44ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  }
45ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
46ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba private:
47ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  InterfaceFactory<Interface>* factory_;
48ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba  MOJO_DISALLOW_COPY_AND_ASSIGN(InterfaceFactoryConnector);
49ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba};
50ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
51ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba}  // namespace internal
52ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba}  // namespace mojo
53ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba
54ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba#endif  // MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_
55ab61347a2cb3254688c42c993278cefd43e5d99dMarcin Kosiba