1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_channel_factory.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/memory/ptr_util.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/task/single_thread_task_runner.h"
9*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
10*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_channel_mojo.h"
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Worker namespace IPC {
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker namespace {
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Worker class PlatformChannelFactory : public ChannelFactory {
17*6777b538SAndroid Build Coastguard Worker public:
PlatformChannelFactory(ChannelHandle handle,Channel::Mode mode,const scoped_refptr<base::SingleThreadTaskRunner> & ipc_task_runner)18*6777b538SAndroid Build Coastguard Worker PlatformChannelFactory(
19*6777b538SAndroid Build Coastguard Worker ChannelHandle handle,
20*6777b538SAndroid Build Coastguard Worker Channel::Mode mode,
21*6777b538SAndroid Build Coastguard Worker const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner)
22*6777b538SAndroid Build Coastguard Worker : handle_(handle), mode_(mode), ipc_task_runner_(ipc_task_runner) {}
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard Worker PlatformChannelFactory(const PlatformChannelFactory&) = delete;
25*6777b538SAndroid Build Coastguard Worker PlatformChannelFactory& operator=(const PlatformChannelFactory&) = delete;
26*6777b538SAndroid Build Coastguard Worker
BuildChannel(Listener * listener)27*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Channel> BuildChannel(Listener* listener) override {
28*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_NACL)
29*6777b538SAndroid Build Coastguard Worker return Channel::Create(handle_, mode_, listener);
30*6777b538SAndroid Build Coastguard Worker #else
31*6777b538SAndroid Build Coastguard Worker DCHECK(handle_.is_mojo_channel_handle());
32*6777b538SAndroid Build Coastguard Worker return ChannelMojo::Create(
33*6777b538SAndroid Build Coastguard Worker mojo::ScopedMessagePipeHandle(handle_.mojo_handle), mode_, listener,
34*6777b538SAndroid Build Coastguard Worker ipc_task_runner_, base::SingleThreadTaskRunner::GetCurrentDefault());
35*6777b538SAndroid Build Coastguard Worker #endif
36*6777b538SAndroid Build Coastguard Worker }
37*6777b538SAndroid Build Coastguard Worker
GetIPCTaskRunner()38*6777b538SAndroid Build Coastguard Worker scoped_refptr<base::SingleThreadTaskRunner> GetIPCTaskRunner() override {
39*6777b538SAndroid Build Coastguard Worker return ipc_task_runner_;
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker private:
43*6777b538SAndroid Build Coastguard Worker ChannelHandle handle_;
44*6777b538SAndroid Build Coastguard Worker Channel::Mode mode_;
45*6777b538SAndroid Build Coastguard Worker scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner_;
46*6777b538SAndroid Build Coastguard Worker };
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker } // namespace
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker // static
Create(const ChannelHandle & handle,Channel::Mode mode,const scoped_refptr<base::SingleThreadTaskRunner> & ipc_task_runner)51*6777b538SAndroid Build Coastguard Worker std::unique_ptr<ChannelFactory> ChannelFactory::Create(
52*6777b538SAndroid Build Coastguard Worker const ChannelHandle& handle,
53*6777b538SAndroid Build Coastguard Worker Channel::Mode mode,
54*6777b538SAndroid Build Coastguard Worker const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
55*6777b538SAndroid Build Coastguard Worker return std::make_unique<PlatformChannelFactory>(handle, mode,
56*6777b538SAndroid Build Coastguard Worker ipc_task_runner);
57*6777b538SAndroid Build Coastguard Worker }
58*6777b538SAndroid Build Coastguard Worker
59*6777b538SAndroid Build Coastguard Worker } // namespace IPC
60