• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)14 bool 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)23 bool 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