Home | History | Annotate | Download | only in application
      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