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 Workervoid 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 Workerbool 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 Workervoid 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 Workervoid 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 Workerbool 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 Workervoid IPCChannelMojoTestBase::DestroyChannel() { 44*6777b538SAndroid Build Coastguard Worker channel_.reset(); 45*6777b538SAndroid Build Coastguard Worker } 46*6777b538SAndroid Build Coastguard Worker TakeHandle()47*6777b538SAndroid Build Coastguard Workermojo::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 Workervoid 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 Workervoid 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 Workervoid 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