1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ipc/ipc_mojo_message_helper.h" 6 7 #include <utility> 8 9 #include "ipc/ipc_mojo_handle_attachment.h" 10 11 namespace IPC { 12 13 // static WriteMessagePipeTo(base::Pickle * message,mojo::ScopedMessagePipeHandle handle)14bool MojoMessageHelper::WriteMessagePipeTo( 15 base::Pickle* message, 16 mojo::ScopedMessagePipeHandle handle) { 17 message->WriteAttachment(new internal::MojoHandleAttachment( 18 mojo::ScopedHandle::From(std::move(handle)))); 19 return true; 20 } 21 22 // static ReadMessagePipeFrom(const base::Pickle * message,base::PickleIterator * iter,mojo::ScopedMessagePipeHandle * handle)23bool MojoMessageHelper::ReadMessagePipeFrom( 24 const base::Pickle* message, 25 base::PickleIterator* iter, 26 mojo::ScopedMessagePipeHandle* handle) { 27 scoped_refptr<base::Pickle::Attachment> attachment; 28 if (!message->ReadAttachment(iter, &attachment)) { 29 LOG(ERROR) << "Failed to read attachment for message pipe."; 30 return false; 31 } 32 33 MessageAttachment::Type type = 34 static_cast<MessageAttachment*>(attachment.get())->GetType(); 35 if (type != MessageAttachment::Type::MOJO_HANDLE) { 36 LOG(ERROR) << "Unxpected attachment type:" << static_cast<int>(type); 37 return false; 38 } 39 40 handle->reset(mojo::MessagePipeHandle( 41 static_cast<internal::MojoHandleAttachment*>(attachment.get()) 42 ->TakeHandle() 43 .release() 44 .value())); 45 return true; 46 } 47 48 MojoMessageHelper::MojoMessageHelper() = default; 49 50 } // namespace IPC 51