| Index: third_party/mojo/src/mojo/edk/embedder/embedder_unittest.cc
|
| diff --git a/third_party/mojo/src/mojo/edk/embedder/embedder_unittest.cc b/third_party/mojo/src/mojo/edk/embedder/embedder_unittest.cc
|
| index aa0b08b8547e638d8d77f4494f500df8e4216380..48a59c13618427698c990f8054665b6ed757db72 100644
|
| --- a/third_party/mojo/src/mojo/edk/embedder/embedder_unittest.cc
|
| +++ b/third_party/mojo/src/mojo/edk/embedder/embedder_unittest.cc
|
| @@ -18,6 +18,7 @@
|
| #include "mojo/edk/embedder/test_embedder.h"
|
| #include "mojo/edk/system/test_utils.h"
|
| #include "mojo/edk/test/multiprocess_test_helper.h"
|
| +#include "mojo/edk/test/scoped_ipc_support.h"
|
| #include "mojo/public/c/system/core.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -44,7 +45,7 @@ class ScopedTestChannel {
|
| ScopedPlatformHandle platform_handle)
|
| : io_thread_task_runner_(io_thread_task_runner),
|
| bootstrap_message_pipe_(MOJO_HANDLE_INVALID),
|
| - did_create_channel_event_(true, false), // Manual reset.
|
| + event_(true, false), // Manual reset.
|
| channel_info_(nullptr) {
|
| bootstrap_message_pipe_ =
|
| CreateChannel(platform_handle.Pass(), io_thread_task_runner_,
|
| @@ -60,12 +61,17 @@ class ScopedTestChannel {
|
| // the I/O thread must be alive and pumping messages.)
|
| ~ScopedTestChannel() {
|
| // |WaitForChannelCreationCompletion()| must be called before destruction.
|
| - CHECK(did_create_channel_event_.IsSignaled());
|
| - DestroyChannel(channel_info_);
|
| + CHECK(event_.IsSignaled());
|
| + event_.Reset();
|
| + DestroyChannel(channel_info_,
|
| + base::Bind(&ScopedTestChannel::DidDestroyChannel,
|
| + base::Unretained(this)),
|
| + nullptr);
|
| + event_.Wait();
|
| }
|
|
|
| // Waits for channel creation to be completed.
|
| - void WaitForChannelCreationCompletion() { did_create_channel_event_.Wait(); }
|
| + void WaitForChannelCreationCompletion() { event_.Wait(); }
|
|
|
| MojoHandle bootstrap_message_pipe() const { return bootstrap_message_pipe_; }
|
|
|
| @@ -78,9 +84,11 @@ class ScopedTestChannel {
|
| CHECK(channel_info);
|
| CHECK(!channel_info_);
|
| channel_info_ = channel_info;
|
| - did_create_channel_event_.Signal();
|
| + event_.Signal();
|
| }
|
|
|
| + void DidDestroyChannel() { event_.Signal(); }
|
| +
|
| scoped_refptr<base::TaskRunner> io_thread_task_runner_;
|
|
|
| // Valid from creation until whenever it gets closed (by the "owner" of this
|
| @@ -90,8 +98,9 @@ class ScopedTestChannel {
|
| MojoHandle bootstrap_message_pipe_;
|
|
|
| // Set after channel creation has been completed (i.e., the callback to
|
| - // |CreateChannel()| has been called).
|
| - base::WaitableEvent did_create_channel_event_;
|
| + // |CreateChannel()| has been called). Also used in the destructor to wait for
|
| + // |DestroyChannel()| completion.
|
| + base::WaitableEvent event_;
|
|
|
| // Valid after channel creation completion until destruction.
|
| ChannelInfo* channel_info_;
|
| @@ -120,6 +129,8 @@ class EmbedderTest : public testing::Test {
|
| };
|
|
|
| TEST_F(EmbedderTest, ChannelsBasic) {
|
| + mojo::test::ScopedIPCSupport ipc_support(test_io_task_runner());
|
| +
|
| PlatformChannelPair channel_pair;
|
| ScopedTestChannel server_channel(test_io_task_runner(),
|
| channel_pair.PassServerHandle());
|
| @@ -247,6 +258,8 @@ TEST_F(EmbedderTest, AsyncWait) {
|
| }
|
|
|
| TEST_F(EmbedderTest, ChannelsHandlePassing) {
|
| + mojo::test::ScopedIPCSupport ipc_support(test_io_task_runner());
|
| +
|
| PlatformChannelPair channel_pair;
|
| ScopedTestChannel server_channel(test_io_task_runner(),
|
| channel_pair.PassServerHandle());
|
| @@ -389,6 +402,10 @@ TEST_F(EmbedderTest, ChannelsHandlePassing) {
|
| #define MAYBE_MultiprocessChannels MultiprocessChannels
|
| #endif // defined(OS_ANDROID)
|
| TEST_F(EmbedderTest, MAYBE_MultiprocessChannels) {
|
| + // TODO(vtl): This should eventually initialize a master process instead,
|
| + // probably.
|
| + mojo::test::ScopedIPCSupport ipc_support(test_io_task_runner());
|
| +
|
| mojo::test::MultiprocessTestHelper multiprocess_test_helper;
|
| multiprocess_test_helper.StartChild("MultiprocessChannelsClient");
|
|
|
| @@ -512,6 +529,10 @@ MOJO_MULTIPROCESS_TEST_CHILD_TEST(MultiprocessChannelsClient) {
|
| test::InitWithSimplePlatformSupport();
|
|
|
| {
|
| + // TODO(vtl): This should eventually initialize a slave process instead,
|
| + // probably.
|
| + mojo::test::ScopedIPCSupport ipc_support(test_io_thread.task_runner());
|
| +
|
| ScopedTestChannel client_channel(test_io_thread.task_runner(),
|
| client_platform_handle.Pass());
|
| MojoHandle client_mp = client_channel.bootstrap_message_pipe();
|
|
|