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_message_support_export.h" 14 #include "mojo/public/cpp/system/handle.h" 15 16 namespace IPC { 17 18 // Auxiliary data sent with |Message|. This can be a platform file descriptor 19 // or a mojo |MessagePipe|. |GetType()| returns the type of the subclass. 20 class IPC_MESSAGE_SUPPORT_EXPORT MessageAttachment 21 : public base::Pickle::Attachment { 22 public: 23 enum class Type { 24 MOJO_HANDLE, 25 PLATFORM_FILE, 26 WIN_HANDLE, 27 MACH_PORT, 28 FUCHSIA_HANDLE, 29 }; 30 31 static scoped_refptr<MessageAttachment> CreateFromMojoHandle( 32 mojo::ScopedHandle handle, 33 Type type); 34 35 virtual Type GetType() const = 0; 36 37 mojo::ScopedHandle TakeMojoHandle(); 38 39 protected: 40 friend class base::RefCountedThreadSafe<MessageAttachment>; 41 MessageAttachment(); 42 ~MessageAttachment() override; 43 44 DISALLOW_COPY_AND_ASSIGN(MessageAttachment); 45 }; 46 47 } // namespace IPC 48 49 #endif // IPC_IPC_MESSAGE_ATTACHMENT_H_ 50