| Index: ipc/mojo/ipc_message_pipe_reader.cc
|
| diff --git a/ipc/mojo/ipc_message_pipe_reader.cc b/ipc/mojo/ipc_message_pipe_reader.cc
|
| index 72e7ad7618f4c31b2587bd554f0f6ff381a73a2d..b4d473ea408caaa57454404ba8a67430ee29d772 100644
|
| --- a/ipc/mojo/ipc_message_pipe_reader.cc
|
| +++ b/ipc/mojo/ipc_message_pipe_reader.cc
|
| @@ -9,7 +9,6 @@
|
| #include "base/location.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop/message_loop_proxy.h"
|
| -#include "ipc/mojo/async_handle_waiter.h"
|
| #include "ipc/mojo/ipc_channel_mojo.h"
|
|
|
| namespace IPC {
|
| @@ -19,9 +18,8 @@ MessagePipeReader::MessagePipeReader(mojo::ScopedMessagePipeHandle handle,
|
| MessagePipeReader::Delegate* delegate)
|
| : pipe_(handle.Pass()),
|
| delegate_(delegate),
|
| - async_waiter_(
|
| - new AsyncHandleWaiter(base::Bind(&MessagePipeReader::PipeIsReady,
|
| - base::Unretained(this)))) {
|
| + async_waiter_(new AsyncHandleWaiter(this)) {
|
| + async_waiter_->SetMessageCallback(pipe_.get().value());
|
| }
|
|
|
| MessagePipeReader::~MessagePipeReader() {
|
| @@ -29,6 +27,8 @@ MessagePipeReader::~MessagePipeReader() {
|
| }
|
|
|
| void MessagePipeReader::Close() {
|
| + if (async_waiter_)
|
| + async_waiter_->ClearMessageCallback(pipe_.get().value());
|
| async_waiter_.reset();
|
| pipe_.reset();
|
| OnPipeClosed();
|
| @@ -195,6 +195,13 @@ void MessagePipeReader::PipeIsReady(MojoResult wait_result) {
|
| ReadMessagesThenWait();
|
| }
|
|
|
| +void MessagePipeReader::MessageWasArrived(const void* bytes,
|
| + uint32_t num_bytes) {
|
| + Message message(reinterpret_cast<const char*>(bytes),
|
| + static_cast<int>(num_bytes));
|
| + delegate_->OnMessageReceived(message);
|
| +}
|
| +
|
| void MessagePipeReader::DelayedDeleter::operator()(
|
| MessagePipeReader* ptr) const {
|
| ptr->Close();
|
|
|