| Index: ipc/mojo/async_handle_waiter.cc
|
| diff --git a/ipc/mojo/async_handle_waiter.cc b/ipc/mojo/async_handle_waiter.cc
|
| index b9e68d7c4539886059b8428617eb43121eb19b4d..228a53ba8faf3e48cefc1cef3da6aa1be65c6978 100644
|
| --- a/ipc/mojo/async_handle_waiter.cc
|
| +++ b/ipc/mojo/async_handle_waiter.cc
|
| @@ -9,7 +9,12 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/location.h"
|
| #include "base/logging.h"
|
| +
|
| +#if defined(USE_CHROME_EDK)
|
| +#include "mojo/edk/embedder/embedder.h"
|
| +#else
|
| #include "third_party/mojo/src/mojo/edk/embedder/embedder.h"
|
| +#endif
|
|
|
| namespace IPC {
|
| namespace internal {
|
| @@ -86,6 +91,11 @@ class AsyncHandleWaiter::Context
|
| }
|
|
|
| void DidProcessIOEvent() override {
|
| + // This object could have been constructed in another's class's
|
| + // DidProcessIOEvent.
|
| + if (io_loop_level_== 0)
|
| + return;
|
| +
|
| DCHECK_GE(io_loop_level_, 1);
|
|
|
| // Leaving a nested loop.
|
| @@ -136,8 +146,13 @@ AsyncHandleWaiter::~AsyncHandleWaiter() {
|
|
|
| MojoResult AsyncHandleWaiter::Wait(MojoHandle handle,
|
| MojoHandleSignals signals) {
|
| +#if defined(USE_CHROME_EDK)
|
| + return mojo::edk::AsyncWait(
|
| + handle, signals, base::Bind(&Context::HandleIsReady, context_));
|
| +#else
|
| return mojo::embedder::AsyncWait(
|
| handle, signals, base::Bind(&Context::HandleIsReady, context_));
|
| +#endif
|
| }
|
|
|
| void AsyncHandleWaiter::InvokeCallback(MojoResult result) {
|
|
|