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/message_pipe.h" | 5 #include "mojo/system/message_pipe.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "mojo/system/channel.h" | 8 #include "mojo/system/channel.h" |
9 #include "mojo/system/local_message_pipe_endpoint.h" | 9 #include "mojo/system/local_message_pipe_endpoint.h" |
10 #include "mojo/system/message_in_transit.h" | 10 #include "mojo/system/message_in_transit.h" |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 // The destination port need not be open, unlike the source port. | 175 // The destination port need not be open, unlike the source port. |
176 if (!endpoints_[port].get()) | 176 if (!endpoints_[port].get()) |
177 return MOJO_RESULT_FAILED_PRECONDITION; | 177 return MOJO_RESULT_FAILED_PRECONDITION; |
178 | 178 |
179 if (transports) { | 179 if (transports) { |
180 DCHECK(!message->dispatchers()); | 180 DCHECK(!message->dispatchers()); |
181 | 181 |
182 // You're not allowed to send either handle to a message pipe over the | 182 // You're not allowed to send either handle to a message pipe over the |
183 // message pipe, so check for this. (The case of trying to write a handle to | 183 // message pipe, so check for this. (The case of trying to write a handle to |
184 // itself is taken care of by |CoreImpl|. That case kind of makes sense, but | 184 // itself is taken care of by |Core|. That case kind of makes sense, but |
185 // leads to complications if, e.g., both sides try to do the same thing with | 185 // leads to complications if, e.g., both sides try to do the same thing with |
186 // their respective handles simultaneously. The other case, of trying to | 186 // their respective handles simultaneously. The other case, of trying to |
187 // write the peer handle to a handle, doesn't make sense -- since no handle | 187 // write the peer handle to a handle, doesn't make sense -- since no handle |
188 // will be available to read the message from.) | 188 // will be available to read the message from.) |
189 for (size_t i = 0; i < transports->size(); i++) { | 189 for (size_t i = 0; i < transports->size(); i++) { |
190 if (!(*transports)[i].is_valid()) | 190 if (!(*transports)[i].is_valid()) |
191 continue; | 191 continue; |
192 if ((*transports)[i].GetType() == Dispatcher::kTypeMessagePipe) { | 192 if ((*transports)[i].GetType() == Dispatcher::kTypeMessagePipe) { |
193 MessagePipeDispatcherTransport mp_transport((*transports)[i]); | 193 MessagePipeDispatcherTransport mp_transport((*transports)[i]); |
194 if (mp_transport.GetMessagePipe() == this) { | 194 if (mp_transport.GetMessagePipe() == this) { |
195 // The other case should have been disallowed by |CoreImpl|. (Note: | 195 // The other case should have been disallowed by |Core|. (Note: |port| |
196 // |port| is the peer port of the handle given to |WriteMessage()|.) | 196 // is the peer port of the handle given to |WriteMessage()|.) |
197 DCHECK_EQ(mp_transport.GetPort(), port); | 197 DCHECK_EQ(mp_transport.GetPort(), port); |
198 return MOJO_RESULT_INVALID_ARGUMENT; | 198 return MOJO_RESULT_INVALID_ARGUMENT; |
199 } | 199 } |
200 } | 200 } |
201 } | 201 } |
202 | 202 |
203 // Clone the dispatchers and attach them to the message. (This must be done | 203 // Clone the dispatchers and attach them to the message. (This must be done |
204 // as a separate loop, since we want to leave the dispatchers alone on | 204 // as a separate loop, since we want to leave the dispatchers alone on |
205 // failure.) | 205 // failure.) |
206 scoped_ptr<std::vector<scoped_refptr<Dispatcher> > > | 206 scoped_ptr<std::vector<scoped_refptr<Dispatcher> > > |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 } | 276 } |
277 } | 277 } |
278 | 278 |
279 LOG(WARNING) << "Unrecognized MessagePipe control message subtype " | 279 LOG(WARNING) << "Unrecognized MessagePipe control message subtype " |
280 << message->subtype(); | 280 << message->subtype(); |
281 return MOJO_RESULT_UNKNOWN; | 281 return MOJO_RESULT_UNKNOWN; |
282 } | 282 } |
283 | 283 |
284 } // namespace system | 284 } // namespace system |
285 } // namespace mojo | 285 } // namespace mojo |
OLD | NEW |