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