summaryrefslogtreecommitdiff
path: root/ipc/ipc_mojo_message_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/ipc_mojo_message_helper.cc')
-rw-r--r--ipc/ipc_mojo_message_helper.cc51
1 files changed, 51 insertions, 0 deletions
diff --git a/ipc/ipc_mojo_message_helper.cc b/ipc/ipc_mojo_message_helper.cc
new file mode 100644
index 0000000000..a87a2d694d
--- /dev/null
+++ b/ipc/ipc_mojo_message_helper.cc
@@ -0,0 +1,51 @@
+// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ipc/ipc_mojo_message_helper.h"
+
+#include <utility>
+
+#include "ipc/ipc_mojo_handle_attachment.h"
+
+namespace IPC {
+
+// static
+bool MojoMessageHelper::WriteMessagePipeTo(
+ base::Pickle* message,
+ mojo::ScopedMessagePipeHandle handle) {
+ message->WriteAttachment(new internal::MojoHandleAttachment(
+ mojo::ScopedHandle::From(std::move(handle))));
+ return true;
+}
+
+// static
+bool MojoMessageHelper::ReadMessagePipeFrom(
+ const base::Pickle* message,
+ base::PickleIterator* iter,
+ mojo::ScopedMessagePipeHandle* handle) {
+ scoped_refptr<base::Pickle::Attachment> attachment;
+ if (!message->ReadAttachment(iter, &attachment)) {
+ LOG(ERROR) << "Failed to read attachment for message pipe.";
+ return false;
+ }
+
+ MessageAttachment::Type type =
+ static_cast<MessageAttachment*>(attachment.get())->GetType();
+ if (type != MessageAttachment::Type::MOJO_HANDLE) {
+ LOG(ERROR) << "Unxpected attachment type:" << type;
+ return false;
+ }
+
+ handle->reset(mojo::MessagePipeHandle(
+ static_cast<internal::MojoHandleAttachment*>(attachment.get())
+ ->TakeHandle()
+ .release()
+ .value()));
+ return true;
+}
+
+MojoMessageHelper::MojoMessageHelper() {
+}
+
+} // namespace IPC