xref: /aosp_15_r20/external/cronet/ipc/ipc_message_attachment.h (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 #ifndef IPC_IPC_MESSAGE_ATTACHMENT_H_
6*6777b538SAndroid Build Coastguard Worker #define IPC_IPC_MESSAGE_ATTACHMENT_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/memory/ref_counted.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/pickle.h"
10*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
11*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_support_export.h"
12*6777b538SAndroid Build Coastguard Worker #include "mojo/public/cpp/system/handle.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace IPC {
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker // Auxiliary data sent with |Message|. This can be a platform file descriptor
17*6777b538SAndroid Build Coastguard Worker // or a mojo |MessagePipe|. |GetType()| returns the type of the subclass.
18*6777b538SAndroid Build Coastguard Worker class IPC_MESSAGE_SUPPORT_EXPORT MessageAttachment
19*6777b538SAndroid Build Coastguard Worker     : public base::Pickle::Attachment {
20*6777b538SAndroid Build Coastguard Worker  public:
21*6777b538SAndroid Build Coastguard Worker   enum class Type {
22*6777b538SAndroid Build Coastguard Worker     MOJO_HANDLE,
23*6777b538SAndroid Build Coastguard Worker     PLATFORM_FILE,
24*6777b538SAndroid Build Coastguard Worker     WIN_HANDLE,
25*6777b538SAndroid Build Coastguard Worker     MACH_PORT,
26*6777b538SAndroid Build Coastguard Worker     FUCHSIA_HANDLE,
27*6777b538SAndroid Build Coastguard Worker   };
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker   static scoped_refptr<MessageAttachment> CreateFromMojoHandle(
30*6777b538SAndroid Build Coastguard Worker       mojo::ScopedHandle handle,
31*6777b538SAndroid Build Coastguard Worker       Type type);
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   MessageAttachment(const MessageAttachment&) = delete;
34*6777b538SAndroid Build Coastguard Worker   MessageAttachment& operator=(const MessageAttachment&) = delete;
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker   virtual Type GetType() const = 0;
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker   mojo::ScopedHandle TakeMojoHandle();
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker  protected:
41*6777b538SAndroid Build Coastguard Worker   friend class base::RefCountedThreadSafe<MessageAttachment>;
42*6777b538SAndroid Build Coastguard Worker   MessageAttachment();
43*6777b538SAndroid Build Coastguard Worker   ~MessageAttachment() override;
44*6777b538SAndroid Build Coastguard Worker };
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker }  // namespace IPC
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker #endif  // IPC_IPC_MESSAGE_ATTACHMENT_H_
49