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