| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ipc/mojo/ipc_message_pipe_reader.h" | 5 #include "ipc/mojo/ipc_message_pipe_reader.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 StopWaiting(); | 31 StopWaiting(); |
| 32 pipe_.reset(); | 32 pipe_.reset(); |
| 33 OnPipeClosed(); | 33 OnPipeClosed(); |
| 34 } | 34 } |
| 35 | 35 |
| 36 void MessagePipeReader::CloseWithError(MojoResult error) { | 36 void MessagePipeReader::CloseWithError(MojoResult error) { |
| 37 OnPipeError(error); | 37 OnPipeError(error); |
| 38 Close(); | 38 Close(); |
| 39 } | 39 } |
| 40 | 40 |
| 41 bool MessagePipeReader::Send(scoped_ptr<Message> message) { | 41 MojoResult MessagePipeReader::Send(scoped_ptr<Message> message) { |
| 42 DCHECK(IsValid()); | 42 DCHECK(IsValid()); |
| 43 | 43 |
| 44 message->TraceMessageBegin(); | 44 message->TraceMessageBegin(); |
| 45 std::vector<MojoHandle> handles; | 45 std::vector<MojoHandle> handles; |
| 46 MojoResult result = MOJO_RESULT_OK; | 46 MojoResult result = MOJO_RESULT_OK; |
| 47 #if defined(OS_POSIX) && !defined(OS_NACL) | 47 #if defined(OS_POSIX) && !defined(OS_NACL) |
| 48 result = ChannelMojo::ReadFromFileDescriptorSet(message.get(), &handles); | 48 result = ChannelMojo::ReadFromFileDescriptorSet(message.get(), &handles); |
| 49 #endif | 49 #endif |
| 50 if (result == MOJO_RESULT_OK) { | 50 if (result == MOJO_RESULT_OK) { |
| 51 result = MojoWriteMessage(handle(), | 51 result = MojoWriteMessage(handle(), |
| 52 message->data(), | 52 message->data(), |
| 53 static_cast<uint32>(message->size()), | 53 static_cast<uint32>(message->size()), |
| 54 handles.empty() ? nullptr : &handles[0], | 54 handles.empty() ? nullptr : &handles[0], |
| 55 static_cast<uint32>(handles.size()), | 55 static_cast<uint32>(handles.size()), |
| 56 MOJO_WRITE_MESSAGE_FLAG_NONE); | 56 MOJO_WRITE_MESSAGE_FLAG_NONE); |
| 57 } | 57 } |
| 58 | 58 |
| 59 if (result != MOJO_RESULT_OK) { | 59 if (result != MOJO_RESULT_OK) |
| 60 std::for_each(handles.begin(), handles.end(), &MojoClose); | 60 std::for_each(handles.begin(), handles.end(), &MojoClose); |
| 61 CloseWithError(result); | 61 return result; |
| 62 return false; | |
| 63 } | |
| 64 | |
| 65 return true; | |
| 66 } | 62 } |
| 67 | 63 |
| 68 // static | 64 // static |
| 69 void MessagePipeReader::InvokePipeIsReady(void* closure, MojoResult result) { | 65 void MessagePipeReader::InvokePipeIsReady(void* closure, MojoResult result) { |
| 70 reinterpret_cast<MessagePipeReader*>(closure)->PipeIsReady(result); | 66 reinterpret_cast<MessagePipeReader*>(closure)->PipeIsReady(result); |
| 71 } | 67 } |
| 72 | 68 |
| 73 void MessagePipeReader::OnMessageReceived() { | 69 void MessagePipeReader::OnMessageReceived() { |
| 74 Message message(data_buffer().empty() ? "" : &data_buffer()[0], | 70 Message message(data_buffer().empty() ? "" : &data_buffer()[0], |
| 75 static_cast<uint32>(data_buffer().size())); | 71 static_cast<uint32>(data_buffer().size())); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 | 195 |
| 200 void MessagePipeReader::DelayedDeleter::operator()( | 196 void MessagePipeReader::DelayedDeleter::operator()( |
| 201 MessagePipeReader* ptr) const { | 197 MessagePipeReader* ptr) const { |
| 202 ptr->Close(); | 198 ptr->Close(); |
| 203 base::MessageLoopProxy::current()->PostTask( | 199 base::MessageLoopProxy::current()->PostTask( |
| 204 FROM_HERE, base::Bind(&DeleteNow, ptr)); | 200 FROM_HERE, base::Bind(&DeleteNow, ptr)); |
| 205 } | 201 } |
| 206 | 202 |
| 207 } // namespace internal | 203 } // namespace internal |
| 208 } // namespace IPC | 204 } // namespace IPC |
| OLD | NEW |