OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "mojo/system/channel.h" | 5 #include "mojo/system/channel.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 // tested (TODO(vtl)). | 186 // tested (TODO(vtl)). |
187 DLOG(ERROR) << "This should not happen under normal operation."; | 187 DLOG(ERROR) << "This should not happen under normal operation."; |
188 return; | 188 return; |
189 } | 189 } |
190 endpoint_info = it->second; | 190 endpoint_info = it->second; |
191 } | 191 } |
192 | 192 |
193 // We need to duplicate the message, because |EnqueueMessage()| will take | 193 // We need to duplicate the message, because |EnqueueMessage()| will take |
194 // ownership of it. | 194 // ownership of it. |
195 // TODO(vtl): Need to enforce limits on message size and handle count. | 195 // TODO(vtl): Need to enforce limits on message size and handle count. |
196 MessageInTransit* own_message = MessageInTransit::Create( | 196 MessageInTransit* own_message = message.Clone(); |
197 message.type(), message.subtype(), message.bytes(), message.num_bytes(), | |
198 message.num_handles()); | |
199 std::vector<DispatcherTransport> transports(message.num_handles()); | 197 std::vector<DispatcherTransport> transports(message.num_handles()); |
200 // TODO(vtl): Create dispatchers for handles. | 198 // TODO(vtl): Create dispatchers for handles. |
201 // TODO(vtl): It's bad that the current API will create equivalent dispatchers | 199 // TODO(vtl): It's bad that the current API will create equivalent dispatchers |
202 // for the freshly-created ones, which is totally redundant. Make a version of | 200 // for the freshly-created ones, which is totally redundant. Make a version of |
203 // |EnqueueMessage()| that passes ownership. | 201 // |EnqueueMessage()| that passes ownership. |
204 if (endpoint_info.message_pipe->EnqueueMessage( | 202 if (endpoint_info.message_pipe->EnqueueMessage( |
205 MessagePipe::GetPeerPort(endpoint_info.port), own_message, | 203 MessagePipe::GetPeerPort(endpoint_info.port), own_message, |
206 message.num_handles() ? &transports : NULL) != MOJO_RESULT_OK) { | 204 message.num_handles() ? &transports : NULL) != MOJO_RESULT_OK) { |
207 HandleLocalError(base::StringPrintf( | 205 HandleLocalError(base::StringPrintf( |
208 "Failed to enqueue message to local destination ID %u", | 206 "Failed to enqueue message to local destination ID %u", |
(...skipping 13 matching lines...) Expand all Loading... |
222 LOG(WARNING) << error_message; | 220 LOG(WARNING) << error_message; |
223 } | 221 } |
224 | 222 |
225 void Channel::HandleLocalError(const base::StringPiece& error_message) { | 223 void Channel::HandleLocalError(const base::StringPiece& error_message) { |
226 // TODO(vtl): Is this how we really want to handle this? | 224 // TODO(vtl): Is this how we really want to handle this? |
227 LOG(FATAL) << error_message; | 225 LOG(FATAL) << error_message; |
228 } | 226 } |
229 | 227 |
230 } // namespace system | 228 } // namespace system |
231 } // namespace mojo | 229 } // namespace mojo |
OLD | NEW |