xref: /aosp_15_r20/external/cronet/ipc/ipc_test_base.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 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_test_base.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <memory>
8*6777b538SAndroid Build Coastguard Worker #include <utility>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/memory/ptr_util.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/run_loop.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/task/single_thread_task_runner.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/test/task_environment.h"
14*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
15*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_channel_mojo.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker IPCChannelMojoTestBase::IPCChannelMojoTestBase() = default;
18*6777b538SAndroid Build Coastguard Worker IPCChannelMojoTestBase::~IPCChannelMojoTestBase() = default;
19*6777b538SAndroid Build Coastguard Worker 
Init(const std::string & test_client_name)20*6777b538SAndroid Build Coastguard Worker void IPCChannelMojoTestBase::Init(const std::string& test_client_name) {
21*6777b538SAndroid Build Coastguard Worker   handle_ = helper_.StartChild(test_client_name);
22*6777b538SAndroid Build Coastguard Worker }
23*6777b538SAndroid Build Coastguard Worker 
WaitForClientShutdown()24*6777b538SAndroid Build Coastguard Worker bool IPCChannelMojoTestBase::WaitForClientShutdown() {
25*6777b538SAndroid Build Coastguard Worker   return helper_.WaitForChildTestShutdown();
26*6777b538SAndroid Build Coastguard Worker }
27*6777b538SAndroid Build Coastguard Worker 
TearDown()28*6777b538SAndroid Build Coastguard Worker void IPCChannelMojoTestBase::TearDown() {
29*6777b538SAndroid Build Coastguard Worker   base::RunLoop().RunUntilIdle();
30*6777b538SAndroid Build Coastguard Worker }
31*6777b538SAndroid Build Coastguard Worker 
CreateChannel(IPC::Listener * listener)32*6777b538SAndroid Build Coastguard Worker void IPCChannelMojoTestBase::CreateChannel(IPC::Listener* listener) {
33*6777b538SAndroid Build Coastguard Worker   channel_ = IPC::ChannelMojo::Create(
34*6777b538SAndroid Build Coastguard Worker       TakeHandle(), IPC::Channel::MODE_SERVER, listener,
35*6777b538SAndroid Build Coastguard Worker       base::SingleThreadTaskRunner::GetCurrentDefault(),
36*6777b538SAndroid Build Coastguard Worker       base::SingleThreadTaskRunner::GetCurrentDefault());
37*6777b538SAndroid Build Coastguard Worker }
38*6777b538SAndroid Build Coastguard Worker 
ConnectChannel()39*6777b538SAndroid Build Coastguard Worker bool IPCChannelMojoTestBase::ConnectChannel() {
40*6777b538SAndroid Build Coastguard Worker   return channel_->Connect();
41*6777b538SAndroid Build Coastguard Worker }
42*6777b538SAndroid Build Coastguard Worker 
DestroyChannel()43*6777b538SAndroid Build Coastguard Worker void IPCChannelMojoTestBase::DestroyChannel() {
44*6777b538SAndroid Build Coastguard Worker   channel_.reset();
45*6777b538SAndroid Build Coastguard Worker }
46*6777b538SAndroid Build Coastguard Worker 
TakeHandle()47*6777b538SAndroid Build Coastguard Worker mojo::ScopedMessagePipeHandle IPCChannelMojoTestBase::TakeHandle() {
48*6777b538SAndroid Build Coastguard Worker   return std::move(handle_);
49*6777b538SAndroid Build Coastguard Worker }
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker IpcChannelMojoTestClient::IpcChannelMojoTestClient() = default;
52*6777b538SAndroid Build Coastguard Worker 
53*6777b538SAndroid Build Coastguard Worker IpcChannelMojoTestClient::~IpcChannelMojoTestClient() = default;
54*6777b538SAndroid Build Coastguard Worker 
Init(mojo::ScopedMessagePipeHandle handle)55*6777b538SAndroid Build Coastguard Worker void IpcChannelMojoTestClient::Init(mojo::ScopedMessagePipeHandle handle) {
56*6777b538SAndroid Build Coastguard Worker   handle_ = std::move(handle);
57*6777b538SAndroid Build Coastguard Worker }
58*6777b538SAndroid Build Coastguard Worker 
Connect(IPC::Listener * listener)59*6777b538SAndroid Build Coastguard Worker void IpcChannelMojoTestClient::Connect(IPC::Listener* listener) {
60*6777b538SAndroid Build Coastguard Worker   channel_ = IPC::ChannelMojo::Create(
61*6777b538SAndroid Build Coastguard Worker       std::move(handle_), IPC::Channel::MODE_CLIENT, listener,
62*6777b538SAndroid Build Coastguard Worker       base::SingleThreadTaskRunner::GetCurrentDefault(),
63*6777b538SAndroid Build Coastguard Worker       base::SingleThreadTaskRunner::GetCurrentDefault());
64*6777b538SAndroid Build Coastguard Worker   CHECK(channel_->Connect());
65*6777b538SAndroid Build Coastguard Worker }
66*6777b538SAndroid Build Coastguard Worker 
Close()67*6777b538SAndroid Build Coastguard Worker void IpcChannelMojoTestClient::Close() {
68*6777b538SAndroid Build Coastguard Worker   channel_->Close();
69*6777b538SAndroid Build Coastguard Worker 
70*6777b538SAndroid Build Coastguard Worker   base::RunLoop run_loop;
71*6777b538SAndroid Build Coastguard Worker   base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
72*6777b538SAndroid Build Coastguard Worker       FROM_HERE, run_loop.QuitClosure());
73*6777b538SAndroid Build Coastguard Worker   run_loop.Run();
74*6777b538SAndroid Build Coastguard Worker }
75