Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: ipc/ipc_channel_mojo.cc

Issue 2181443002: Mojo C++ bindings: make ipc/ mojom targets to use STL string/vector types (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make further change to array_traits_stl.h to make MSan build happy. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ipc/ipc_channel_mojo.h ('k') | ipc/ipc_message_pipe_reader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/ipc_channel_mojo.h" 5 #include "ipc/ipc_channel_mojo.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 mojom::SerializedHandle::Type::WIN_HANDLE, serialized); 172 mojom::SerializedHandle::Type::WIN_HANDLE, serialized);
173 handle_attachment.reset_handle_ownership(); 173 handle_attachment.reset_handle_ownership();
174 return result; 174 return result;
175 #else 175 #else
176 NOTREACHED(); 176 NOTREACHED();
177 return MOJO_RESULT_UNKNOWN; 177 return MOJO_RESULT_UNKNOWN;
178 #endif // defined(OS_MACOSX) 178 #endif // defined(OS_MACOSX)
179 } 179 }
180 180
181 MojoResult WrapAttachment(MessageAttachment* attachment, 181 MojoResult WrapAttachment(MessageAttachment* attachment,
182 mojo::Array<mojom::SerializedHandlePtr>* handles) { 182 std::vector<mojom::SerializedHandlePtr>* handles) {
183 mojom::SerializedHandlePtr serialized_handle; 183 mojom::SerializedHandlePtr serialized_handle;
184 MojoResult wrap_result = WrapAttachmentImpl(attachment, &serialized_handle); 184 MojoResult wrap_result = WrapAttachmentImpl(attachment, &serialized_handle);
185 if (wrap_result != MOJO_RESULT_OK) { 185 if (wrap_result != MOJO_RESULT_OK) {
186 LOG(WARNING) << "Pipe failed to wrap handles. Closing: " << wrap_result; 186 LOG(WARNING) << "Pipe failed to wrap handles. Closing: " << wrap_result;
187 return wrap_result; 187 return wrap_result;
188 } 188 }
189 handles->push_back(std::move(serialized_handle)); 189 handles->push_back(std::move(serialized_handle));
190 return MOJO_RESULT_OK; 190 return MOJO_RESULT_OK;
191 } 191 }
192 192
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 } 402 }
403 403
404 base::ScopedFD ChannelMojo::TakeClientFileDescriptor() { 404 base::ScopedFD ChannelMojo::TakeClientFileDescriptor() {
405 return base::ScopedFD(GetClientFileDescriptor()); 405 return base::ScopedFD(GetClientFileDescriptor());
406 } 406 }
407 #endif // defined(OS_POSIX) && !defined(OS_NACL_SFI) 407 #endif // defined(OS_POSIX) && !defined(OS_NACL_SFI)
408 408
409 // static 409 // static
410 MojoResult ChannelMojo::ReadFromMessageAttachmentSet( 410 MojoResult ChannelMojo::ReadFromMessageAttachmentSet(
411 Message* message, 411 Message* message,
412 mojo::Array<mojom::SerializedHandlePtr>* handles) { 412 base::Optional<std::vector<mojom::SerializedHandlePtr>>* handles) {
413 if (message->HasAttachments()) { 413 DCHECK(!*handles);
414 MessageAttachmentSet* set = message->attachment_set(); 414
415 for (unsigned i = 0; i < set->num_non_brokerable_attachments(); ++i) { 415 MojoResult result = MOJO_RESULT_OK;
416 MojoResult result = WrapAttachment( 416 if (!message->HasAttachments())
417 set->GetNonBrokerableAttachmentAt(i).get(), handles); 417 return result;
418 if (result != MOJO_RESULT_OK) { 418
419 set->CommitAllDescriptors(); 419 std::vector<mojom::SerializedHandlePtr> output_handles;
420 return result; 420 MessageAttachmentSet* set = message->attachment_set();
421 } 421
422 } 422 for (unsigned i = 0;
423 for (unsigned i = 0; i < set->num_brokerable_attachments(); ++i) { 423 result == MOJO_RESULT_OK && i < set->num_non_brokerable_attachments();
424 MojoResult result = 424 ++i) {
425 WrapAttachment(set->GetBrokerableAttachmentAt(i).get(), handles); 425 result = WrapAttachment(set->GetNonBrokerableAttachmentAt(i).get(),
426 if (result != MOJO_RESULT_OK) { 426 &output_handles);
427 set->CommitAllDescriptors();
428 return result;
429 }
430 }
431 set->CommitAllDescriptors();
432 } 427 }
433 return MOJO_RESULT_OK; 428 for (unsigned i = 0;
429 result == MOJO_RESULT_OK && i < set->num_brokerable_attachments(); ++i) {
430 result = WrapAttachment(set->GetBrokerableAttachmentAt(i).get(),
431 &output_handles);
432 }
433
434 set->CommitAllDescriptors();
435
436 if (!output_handles.empty())
437 *handles = std::move(output_handles);
438
439 return result;
434 } 440 }
435 441
436 // static 442 // static
437 MojoResult ChannelMojo::WriteToMessageAttachmentSet( 443 MojoResult ChannelMojo::WriteToMessageAttachmentSet(
438 mojo::Array<mojom::SerializedHandlePtr> handle_buffer, 444 base::Optional<std::vector<mojom::SerializedHandlePtr>> handle_buffer,
439 Message* message) { 445 Message* message) {
440 for (size_t i = 0; i < handle_buffer.size(); ++i) { 446 if (!handle_buffer)
447 return MOJO_RESULT_OK;
448 for (size_t i = 0; i < handle_buffer->size(); ++i) {
441 scoped_refptr<MessageAttachment> unwrapped_attachment; 449 scoped_refptr<MessageAttachment> unwrapped_attachment;
442 MojoResult unwrap_result = UnwrapAttachment(std::move(handle_buffer[i]), 450 MojoResult unwrap_result =
443 &unwrapped_attachment); 451 UnwrapAttachment(std::move((*handle_buffer)[i]), &unwrapped_attachment);
444 if (unwrap_result != MOJO_RESULT_OK) { 452 if (unwrap_result != MOJO_RESULT_OK) {
445 LOG(WARNING) << "Pipe failed to unwrap handles. Closing: " 453 LOG(WARNING) << "Pipe failed to unwrap handles. Closing: "
446 << unwrap_result; 454 << unwrap_result;
447 return unwrap_result; 455 return unwrap_result;
448 } 456 }
449 DCHECK(unwrapped_attachment); 457 DCHECK(unwrapped_attachment);
450 458
451 bool ok = message->attachment_set()->AddAttachment( 459 bool ok = message->attachment_set()->AddAttachment(
452 std::move(unwrapped_attachment)); 460 std::move(unwrapped_attachment));
453 DCHECK(ok); 461 DCHECK(ok);
(...skipping 19 matching lines...) Expand all
473 } 481 }
474 482
475 void ChannelMojo::GetGenericRemoteAssociatedInterface( 483 void ChannelMojo::GetGenericRemoteAssociatedInterface(
476 const std::string& name, 484 const std::string& name,
477 mojo::ScopedInterfaceEndpointHandle handle) { 485 mojo::ScopedInterfaceEndpointHandle handle) {
478 if (message_reader_) 486 if (message_reader_)
479 message_reader_->GetRemoteInterface(name, std::move(handle)); 487 message_reader_->GetRemoteInterface(name, std::move(handle));
480 } 488 }
481 489
482 } // namespace IPC 490 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_channel_mojo.h ('k') | ipc/ipc_message_pipe_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698