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 11namespace IPC { 12namespace 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. 18class 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 38base::PlatformFile GetPlatformFile(scoped_refptr<MessageAttachment> attachment); 39 40} // namespace internal 41} // namespace IPC 42 43#endif // IPC_IPC_PLATFORM_FILE_ATTACHMENT_H_ 44