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