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.
5 #ifndef IPC_IPC_CHANNEL_MOJO_HOST_H_
6 #define IPC_IPC_CHANNEL_MOJO_HOST_H_
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"
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 {
26 explicit ChannelMojoHost(scoped_refptr<base::TaskRunner> io_task_runner);
29 void OnClientLaunched(base::ProcessHandle process);
30 ChannelMojo::Delegate* channel_delegate() const;
33 class ChannelDelegate;
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 {
39 void operator()(ChannelDelegate* ptr) const;
42 base::WeakPtrFactory<ChannelMojoHost> weak_factory_;
43 const scoped_refptr<base::TaskRunner> io_task_runner_;
44 scoped_ptr<ChannelDelegate, DelegateDeleter> channel_delegate_;
46 DISALLOW_COPY_AND_ASSIGN(ChannelMojoHost);
51 #endif // IPC_IPC_CHANNEL_MOJO_HOST_H_