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
10namespace 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.
14template <typename Impl,
15          typename Interface = typename Impl::ImplementedInterface>
16class 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.
29template <typename Impl,
30          typename Context,
31          typename Interface = typename Impl::ImplementedInterface>
32class 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