1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef IPC_IPC_MESSAGE_ATTACHMENT_H_ 6 #define IPC_IPC_MESSAGE_ATTACHMENT_H_ 7 8 #include "base/files/file.h" 9 #include "base/macros.h" 10 #include "base/memory/ref_counted.h" 11 #include "base/pickle.h" 12 #include "build/build_config.h" 13 #include "ipc/ipc_export.h" 14 15 namespace IPC { 16 17 // Auxiliary data sent with |Message|. This can be a platform file descriptor 18 // or a mojo |MessagePipe|. |GetType()| returns the type of the subclass. 19 class IPC_EXPORT MessageAttachment : public base::Pickle::Attachment { 20 public: 21 enum Type { 22 TYPE_PLATFORM_FILE, // The instance is |PlatformFileAttachment|. 23 TYPE_MOJO_HANDLE, // The instance is |MojoHandleAttachment|. 24 TYPE_BROKERABLE_ATTACHMENT, // The instance is |BrokerableAttachment|. 25 }; 26 27 virtual Type GetType() const = 0; 28 29 #if defined(OS_POSIX) 30 virtual base::PlatformFile TakePlatformFile() = 0; 31 #endif // OS_POSIX 32 33 protected: 34 friend class base::RefCountedThreadSafe<MessageAttachment>; 35 MessageAttachment(); 36 ~MessageAttachment() override; 37 38 DISALLOW_COPY_AND_ASSIGN(MessageAttachment); 39 }; 40 41 } // namespace IPC 42 43 #endif // IPC_IPC_MESSAGE_ATTACHMENT_H_ 44