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_CONNECTOR_H_ 6#define MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ 7 8#include "mojo/public/cpp/application/interface_factory.h" 9#include "mojo/public/cpp/bindings/interface_request.h" 10 11namespace mojo { 12class ApplicationConnection; 13 14namespace internal { 15 16class ServiceConnectorBase { 17 public: 18 ServiceConnectorBase(const std::string& name); 19 virtual ~ServiceConnectorBase(); 20 virtual void ConnectToService(const std::string& name, 21 ScopedMessagePipeHandle client_handle) = 0; 22 std::string name() const { return name_; } 23 void set_application_connection(ApplicationConnection* connection) { 24 application_connection_ = connection; } 25 26 protected: 27 std::string name_; 28 ApplicationConnection* application_connection_; 29 30 MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceConnectorBase); 31}; 32 33template <typename Interface> 34class InterfaceFactoryConnector : public ServiceConnectorBase { 35 public: 36 explicit InterfaceFactoryConnector(InterfaceFactory<Interface>* factory) 37 : ServiceConnectorBase(Interface::Name_), factory_(factory) {} 38 virtual ~InterfaceFactoryConnector() {} 39 40 virtual void ConnectToService(const std::string& name, 41 ScopedMessagePipeHandle client_handle) { 42 factory_->Create(application_connection_, 43 MakeRequest<Interface>(client_handle.Pass())); 44 } 45 46 private: 47 InterfaceFactory<Interface>* factory_; 48 MOJO_DISALLOW_COPY_AND_ASSIGN(InterfaceFactoryConnector); 49}; 50 51} // namespace internal 52} // namespace mojo 53 54#endif // MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ 55