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_PLATFORM_FILE_ATTACHMENT_H_ 6 #define IPC_IPC_PLATFORM_FILE_ATTACHMENT_H_ 7 8 #include "ipc/ipc_export.h" 9 #include "ipc/ipc_message_attachment.h" 10 11 namespace IPC { 12 namespace internal { 13 14 // A platform file that is sent over |Channel| as a part of |Message|. 15 // PlatformFileAttachment optionally owns the file and |owning_| is set in that 16 // case. Also, |file_| is not cleared even after the ownership is taken. 17 // Some old clients require this strange behavior. 18 class IPC_EXPORT PlatformFileAttachment : public MessageAttachment { 19 public: 20 // Non-owning constructor 21 explicit PlatformFileAttachment(base::PlatformFile file); 22 // Owning constructor 23 explicit PlatformFileAttachment(base::ScopedFD file); 24 25 Type GetType() const override; 26 base::PlatformFile TakePlatformFile() override; 27 28 base::PlatformFile file() const { return file_; } 29 bool Owns() const { return owning_.is_valid(); } 30 31 private: 32 ~PlatformFileAttachment() override; 33 34 base::PlatformFile file_; 35 base::ScopedFD owning_; 36 }; 37 38 base::PlatformFile GetPlatformFile(scoped_refptr<MessageAttachment> attachment); 39 40 } // namespace internal 41 } // namespace IPC 42 43 #endif // IPC_IPC_PLATFORM_FILE_ATTACHMENT_H_ 44