Index: ipc/ipc_platform_file_attachment_posix.h |
diff --git a/ipc/ipc_platform_file_attachment.h b/ipc/ipc_platform_file_attachment_posix.h |
similarity index 60% |
rename from ipc/ipc_platform_file_attachment.h |
rename to ipc/ipc_platform_file_attachment_posix.h |
index c4c22a3c091518f9eca31de7716e9bd98fcae7b5..d1eff609c5340b8c617dcd4a069875121eed1212 100644 |
--- a/ipc/ipc_platform_file_attachment.h |
+++ b/ipc/ipc_platform_file_attachment_posix.h |
@@ -5,26 +5,34 @@ |
#ifndef IPC_IPC_PLATFORM_FILE_ATTACHMENT_H_ |
#define IPC_IPC_PLATFORM_FILE_ATTACHMENT_H_ |
-#include "base/files/file.h" |
+#include "ipc/ipc_export.h" |
#include "ipc/ipc_message_attachment.h" |
namespace IPC { |
namespace internal { |
// A platform file that is sent over |Channel| as a part of |Message|. |
-// |PlatformFileAttachment| doesn't own |file_|. The lifecycle of |file_| is |
-// managed by |MessageAttachmentSet|. |
-class PlatformFileAttachment : public MessageAttachment { |
+// PlatformFileAttachment optionally owns the file and |owning_| is set in that |
+// case. Also, |file_| is not cleared even after the ownership is taken. |
+// Some old clients require this strange behavior. |
+class IPC_EXPORT PlatformFileAttachment : public MessageAttachment { |
public: |
+ // Non-owning constructor |
explicit PlatformFileAttachment(base::PlatformFile file); |
+ // Owning constructor |
+ explicit PlatformFileAttachment(base::ScopedFD file); |
Type GetType() const override; |
+ base::PlatformFile TakePlatformFile() override; |
+ |
base::PlatformFile file() const { return file_; } |
+ bool Owns() const { return owning_.is_valid(); } |
private: |
~PlatformFileAttachment() override; |
base::PlatformFile file_; |
+ base::ScopedFD owning_; |
}; |
base::PlatformFile GetPlatformFile(scoped_refptr<MessageAttachment> attachment); |