xref: /aosp_15_r20/external/libchrome/ipc/ipc_channel_factory.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
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