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_INTERFACE_FACTORY_IMPL_H_ 6 #define MOJO_PUBLIC_CPP_APPLICATION_INTERFACE_FACTORY_IMPL_H_ 7 8 #include "mojo/public/cpp/application/interface_factory.h" 9 10 namespace mojo { 11 12 // Use this class to allocate and bind instances of Impl to interface requests. 13 // The lifetime of the constructed Impl is bound to the pipe. 14 template <typename Impl, 15 typename Interface = typename Impl::ImplementedInterface> 16 class InterfaceFactoryImpl : public InterfaceFactory<Interface> { 17 public: 18 virtual ~InterfaceFactoryImpl() {} 19 20 virtual void Create(ApplicationConnection* connection, 21 InterfaceRequest<Interface> request) MOJO_OVERRIDE { 22 BindToRequest(new Impl(), &request); 23 } 24 }; 25 26 // Use this class to allocate and bind instances of Impl constructed with a 27 // context parameter to interface requests. The lifetime of the constructed 28 // Impl is bound to the pipe. 29 template <typename Impl, 30 typename Context, 31 typename Interface = typename Impl::ImplementedInterface> 32 class InterfaceFactoryImplWithContext : public InterfaceFactory<Interface> { 33 public: 34 explicit InterfaceFactoryImplWithContext(Context* context) 35 : context_(context) {} 36 virtual ~InterfaceFactoryImplWithContext() {} 37 38 virtual void Create(ApplicationConnection* connection, 39 InterfaceRequest<Interface> request) MOJO_OVERRIDE { 40 BindToRequest(new Impl(context_), &request); 41 } 42 43 private: 44 Context* context_; 45 }; 46 47 } // namespace mojo 48 49 #endif // MOJO_PUBLIC_CPP_APPLICATION_INTERFACE_FACTORY_IMPL_H_ 50