xref: /aosp_15_r20/external/cronet/ipc/ipc_channel_factory.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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