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 <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 void MessagePipeReader::CloseWithError(MojoResult error) { | 51 void MessagePipeReader::CloseWithError(MojoResult error) { |
52 DCHECK(thread_checker_.CalledOnValidThread()); | 52 DCHECK(thread_checker_.CalledOnValidThread()); |
53 OnPipeError(error); | 53 OnPipeError(error); |
54 } | 54 } |
55 | 55 |
56 bool MessagePipeReader::Send(scoped_ptr<Message> message) { | 56 bool MessagePipeReader::Send(scoped_ptr<Message> message) { |
57 TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"), | 57 TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"), |
58 "MessagePipeReader::Send", | 58 "MessagePipeReader::Send", |
59 message->flags(), | 59 message->flags(), |
60 TRACE_EVENT_FLAG_FLOW_OUT); | 60 TRACE_EVENT_FLAG_FLOW_OUT); |
61 mojom::MessagePtr ipc_message = mojom::Message::New(); | 61 mojo::Array<mojom::SerializedHandlePtr> handles(nullptr); |
62 MojoResult result = MOJO_RESULT_OK; | 62 MojoResult result = MOJO_RESULT_OK; |
63 result = ChannelMojo::ReadFromMessageAttachmentSet(message.get(), | 63 result = ChannelMojo::ReadFromMessageAttachmentSet(message.get(), &handles); |
64 &ipc_message->handles); | |
65 if (result != MOJO_RESULT_OK) { | 64 if (result != MOJO_RESULT_OK) { |
66 CloseWithError(result); | 65 CloseWithError(result); |
67 return false; | 66 return false; |
68 } | 67 } |
69 ipc_message->data.resize(message->size()); | 68 mojo::Array<uint8_t> data(message->size()); |
70 std::copy(reinterpret_cast<const uint8_t*>(message->data()), | 69 std::copy(reinterpret_cast<const uint8_t*>(message->data()), |
71 reinterpret_cast<const uint8_t*>(message->data()) + message->size(), | 70 reinterpret_cast<const uint8_t*>(message->data()) + message->size(), |
72 &ipc_message->data[0]); | 71 &data[0]); |
73 sender_->Receive(std::move(ipc_message)); | 72 sender_->Receive(std::move(data), std::move(handles)); |
74 DVLOG(4) << "Send " << message->type() << ": " << message->size(); | 73 DVLOG(4) << "Send " << message->type() << ": " << message->size(); |
75 return true; | 74 return true; |
76 } | 75 } |
77 | 76 |
78 void MessagePipeReader::Receive(mojom::MessagePtr ipc_message) { | 77 void MessagePipeReader::Receive( |
79 Message message(ipc_message->data.size() == 0 | 78 mojo::Array<uint8_t> data, |
80 ? "" | 79 mojo::Array<mojom::SerializedHandlePtr> handles) { |
81 : reinterpret_cast<const char*>(&ipc_message->data[0]), | 80 Message message( |
82 static_cast<uint32_t>(ipc_message->data.size())); | 81 data.size() == 0 ? "" : reinterpret_cast<const char*>(&data[0]), |
| 82 static_cast<uint32_t>(data.size())); |
83 message.set_sender_pid(peer_pid_); | 83 message.set_sender_pid(peer_pid_); |
84 | 84 |
85 DVLOG(4) << "Receive " << message.type() << ": " << message.size(); | 85 DVLOG(4) << "Receive " << message.type() << ": " << message.size(); |
86 MojoResult write_result = ChannelMojo::WriteToMessageAttachmentSet( | 86 MojoResult write_result = |
87 std::move(ipc_message->handles), &message); | 87 ChannelMojo::WriteToMessageAttachmentSet(std::move(handles), &message); |
88 if (write_result != MOJO_RESULT_OK) { | 88 if (write_result != MOJO_RESULT_OK) { |
89 CloseWithError(write_result); | 89 CloseWithError(write_result); |
90 return; | 90 return; |
91 } | 91 } |
92 | 92 |
93 TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"), | 93 TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"), |
94 "MessagePipeReader::OnMessageReceived", | 94 "MessagePipeReader::OnMessageReceived", |
95 message.flags(), | 95 message.flags(), |
96 TRACE_EVENT_FLAG_FLOW_IN); | 96 TRACE_EVENT_FLAG_FLOW_IN); |
97 delegate_->OnMessageReceived(message); | 97 delegate_->OnMessageReceived(message); |
(...skipping 16 matching lines...) Expand all Loading... |
114 | 114 |
115 void MessagePipeReader::DelayedDeleter::operator()( | 115 void MessagePipeReader::DelayedDeleter::operator()( |
116 MessagePipeReader* ptr) const { | 116 MessagePipeReader* ptr) const { |
117 ptr->Close(); | 117 ptr->Close(); |
118 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 118 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
119 base::Bind(&DeleteNow, ptr)); | 119 base::Bind(&DeleteNow, ptr)); |
120 } | 120 } |
121 | 121 |
122 } // namespace internal | 122 } // namespace internal |
123 } // namespace IPC | 123 } // namespace IPC |
OLD | NEW |