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