| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IPC_IPC_MESSAGE_ATTACHMENT_H_ |
| #define IPC_IPC_MESSAGE_ATTACHMENT_H_ |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/pickle.h" |
| #include "build/build_config.h" |
| #include "ipc/ipc_message_support_export.h" |
| #include "mojo/public/cpp/system/handle.h" |
| |
| namespace IPC { |
| |
| // Auxiliary data sent with |Message|. This can be a platform file descriptor |
| // or a mojo |MessagePipe|. |GetType()| returns the type of the subclass. |
| class IPC_MESSAGE_SUPPORT_EXPORT MessageAttachment |
| : public base::Pickle::Attachment { |
| public: |
| enum class Type { |
| MOJO_HANDLE, |
| PLATFORM_FILE, |
| WIN_HANDLE, |
| MACH_PORT, |
| FUCHSIA_HANDLE, |
| }; |
| |
| static scoped_refptr<MessageAttachment> CreateFromMojoHandle( |
| mojo::ScopedHandle handle, |
| Type type); |
| |
| MessageAttachment(const MessageAttachment&) = delete; |
| MessageAttachment& operator=(const MessageAttachment&) = delete; |
| |
| virtual Type GetType() const = 0; |
| |
| mojo::ScopedHandle TakeMojoHandle(); |
| |
| protected: |
| friend class base::RefCountedThreadSafe<MessageAttachment>; |
| MessageAttachment(); |
| ~MessageAttachment() override; |
| }; |
| |
| } // namespace IPC |
| |
| #endif // IPC_IPC_MESSAGE_ATTACHMENT_H_ |