Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ipc / mojo / ipc_channel_mojo_host.h
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 IPC_IPC_CHANNEL_MOJO_HOST_H_
6 #define IPC_IPC_CHANNEL_MOJO_HOST_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/weak_ptr.h"
10 #include "base/process/process_handle.h"
11 #include "ipc/ipc_export.h"
12 #include "ipc/mojo/ipc_channel_mojo.h"
13
14 namespace base {
15 class TaskRunner;
16 }
17
18 namespace IPC {
19
20 // Through ChannelMojoHost, ChannelMojo gets extra information that
21 // its client provides, including the child process's process handle. Every
22 // server process that uses ChannelMojo must have a ChannelMojoHost
23 // instance and call OnClientLaunched().
24 class IPC_MOJO_EXPORT ChannelMojoHost {
25  public:
26   explicit ChannelMojoHost(scoped_refptr<base::TaskRunner> io_task_runner);
27   ~ChannelMojoHost();
28
29   void OnClientLaunched(base::ProcessHandle process);
30   ChannelMojo::Delegate* channel_delegate() const;
31
32  private:
33   class ChannelDelegate;
34
35   // Delegate talks to ChannelMojo, whch lives in IO thread, thus
36   // the Delegate should also live and dies in the IO thread as well.
37   class DelegateDeleter {
38    public:
39     void operator()(ChannelDelegate* ptr) const;
40   };
41
42   const scoped_refptr<base::TaskRunner> io_task_runner_;
43   scoped_ptr<ChannelDelegate, DelegateDeleter> channel_delegate_;
44   base::WeakPtrFactory<ChannelMojoHost> weak_factory_;
45
46   DISALLOW_COPY_AND_ASSIGN(ChannelMojoHost);
47 };
48
49 }  // namespace IPC
50
51 #endif  // IPC_IPC_CHANNEL_MOJO_HOST_H_