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