Change most IPC tests to use ChannelMojo.

Most IPC::Channels in production are now ChannelMojo, but most tests
use the platform-specific Channel implementations. This changes the IPC
tests other than IPCMultiSendingFdsTest.StressTest and those in
ipc_channel_unittest.cc and ipc_channel_posix_unittest.cc to use
ChannelMojo.

BUG=659448

Committed: https://crrev.com/d45a95a8ac88b71b768a850cbeffc2c318a10cf9
Review-Url: https://codereview.chromium.org/2451953003
Cr-Original-Commit-Position: refs/heads/master@{#427624}
Cr-Commit-Position: refs/heads/master@{#427988}
diff --git a/ipc/ipc_test_base.cc b/ipc/ipc_test_base.cc
index 880e495..8bc6bfc7 100644
--- a/ipc/ipc_test_base.cc
+++ b/ipc/ipc_test_base.cc
@@ -9,10 +9,12 @@
 #include "base/command_line.h"
 #include "base/memory/ptr_util.h"
 #include "base/process/kill.h"
+#include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "ipc/ipc_channel_mojo.h"
 #include "ipc/ipc_descriptors.h"
 
 #if defined(OS_POSIX)
@@ -168,3 +170,59 @@
     base::SingleThreadTaskRunner* runner) {
   return IPC::ChannelFactory::Create(handle, IPC::Channel::MODE_SERVER, runner);
 }
+IPCChannelMojoTestBase::IPCChannelMojoTestBase() = default;
+IPCChannelMojoTestBase::~IPCChannelMojoTestBase() = default;
+
+void IPCChannelMojoTestBase::Init(const std::string& test_client_name) {
+  handle_ = helper_.StartChild(test_client_name);
+}
+
+bool IPCChannelMojoTestBase::WaitForClientShutdown() {
+  return helper_.WaitForChildTestShutdown();
+}
+
+void IPCChannelMojoTestBase::TearDown() {
+  base::RunLoop().RunUntilIdle();
+}
+
+void IPCChannelMojoTestBase::CreateChannel(IPC::Listener* listener) {
+  channel_ =
+      IPC::ChannelMojo::Create(TakeHandle(), IPC::Channel::MODE_SERVER,
+                               listener, base::ThreadTaskRunnerHandle::Get());
+}
+
+bool IPCChannelMojoTestBase::ConnectChannel() {
+  return channel_->Connect();
+}
+
+void IPCChannelMojoTestBase::DestroyChannel() {
+  channel_.reset();
+}
+
+mojo::ScopedMessagePipeHandle IPCChannelMojoTestBase::TakeHandle() {
+  return std::move(handle_);
+}
+
+IpcChannelMojoTestClient::IpcChannelMojoTestClient() = default;
+
+IpcChannelMojoTestClient::~IpcChannelMojoTestClient() = default;
+
+void IpcChannelMojoTestClient::Init(mojo::ScopedMessagePipeHandle handle) {
+  handle_ = std::move(handle);
+}
+
+void IpcChannelMojoTestClient::Connect(IPC::Listener* listener) {
+  channel_ =
+      IPC::ChannelMojo::Create(std::move(handle_), IPC::Channel::MODE_CLIENT,
+                               listener, base::ThreadTaskRunnerHandle::Get());
+  CHECK(channel_->Connect());
+}
+
+void IpcChannelMojoTestClient::Close() {
+  channel_->Close();
+
+  base::RunLoop run_loop;
+  base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
+                                                run_loop.QuitClosure());
+  run_loop.Run();
+}