| Index: base/files/file.h
|
| diff --git a/base/files/file.h b/base/files/file.h
|
| index 885e00b95776d1030c503bd03ffdb2222af1f9d4..0155c7c259e771b318637488a5e7b49d66e76b7b 100644
|
| --- a/base/files/file.h
|
| +++ b/base/files/file.h
|
| @@ -63,28 +63,31 @@ class BASE_EXPORT File {
|
| // FLAG_EXCLUSIVE_(READ|WRITE) only grant exclusive access to the file on
|
| // creation on POSIX; for existing files, consider using Lock().
|
| enum Flags {
|
| - FLAG_OPEN = 1 << 0, // Opens a file, only if it exists.
|
| - FLAG_CREATE = 1 << 1, // Creates a new file, only if it does not
|
| - // already exist.
|
| - FLAG_OPEN_ALWAYS = 1 << 2, // May create a new file.
|
| - FLAG_CREATE_ALWAYS = 1 << 3, // May overwrite an old file.
|
| - FLAG_OPEN_TRUNCATED = 1 << 4, // Opens a file and truncates it, only if it
|
| - // exists.
|
| + FLAG_OPEN = 1 << 0, // Opens a file, only if it exists.
|
| + FLAG_CREATE = 1 << 1, // Creates a new file, only if it does not
|
| + // already exist.
|
| + FLAG_OPEN_ALWAYS = 1 << 2, // May create a new file.
|
| + FLAG_CREATE_ALWAYS = 1 << 3, // May overwrite an old file.
|
| + FLAG_OPEN_TRUNCATED = 1 << 4, // Opens a file and truncates it, only if it
|
| + // exists.
|
| FLAG_READ = 1 << 5,
|
| FLAG_WRITE = 1 << 6,
|
| FLAG_APPEND = 1 << 7,
|
| - FLAG_EXCLUSIVE_READ = 1 << 8, // EXCLUSIVE is opposite of Windows SHARE.
|
| + FLAG_EXCLUSIVE_READ = 1 << 8, // EXCLUSIVE is opposite of Windows SHARE.
|
| FLAG_EXCLUSIVE_WRITE = 1 << 9,
|
| FLAG_ASYNC = 1 << 10,
|
| - FLAG_TEMPORARY = 1 << 11, // Used on Windows only.
|
| - FLAG_HIDDEN = 1 << 12, // Used on Windows only.
|
| + FLAG_TEMPORARY = 1 << 11, // Used on Windows only.
|
| + FLAG_HIDDEN = 1 << 12, // Used on Windows only.
|
| FLAG_DELETE_ON_CLOSE = 1 << 13,
|
| - FLAG_WRITE_ATTRIBUTES = 1 << 14, // Used on Windows only.
|
| - FLAG_SHARE_DELETE = 1 << 15, // Used on Windows only.
|
| - FLAG_TERMINAL_DEVICE = 1 << 16, // Serial port flags.
|
| - FLAG_BACKUP_SEMANTICS = 1 << 17, // Used on Windows only.
|
| - FLAG_EXECUTE = 1 << 18, // Used on Windows only.
|
| - FLAG_SEQUENTIAL_SCAN = 1 << 19, // Used on Windows only.
|
| + FLAG_WRITE_ATTRIBUTES = 1 << 14, // Used on Windows only.
|
| + FLAG_SHARE_DELETE = 1 << 15, // Used on Windows only.
|
| + FLAG_TERMINAL_DEVICE = 1 << 16, // Serial port flags.
|
| + FLAG_BACKUP_SEMANTICS = 1 << 17, // Used on Windows only.
|
| + FLAG_EXECUTE = 1 << 18, // Used on Windows only.
|
| + FLAG_SEQUENTIAL_SCAN = 1 << 19, // Used on Windows only.
|
| + FLAG_CAN_DELETE_ON_CLOSE = 1 << 20, // Requests permission to delete a file
|
| + // via DeleteOnClose() (Windows only).
|
| + // See DeleteOnClose() for details.
|
| };
|
|
|
| // This enum has been recorded in multiple histograms. If the order of the
|
| @@ -305,6 +308,36 @@ class BASE_EXPORT File {
|
| bool async() const { return async_; }
|
|
|
| #if defined(OS_WIN)
|
| + // Sets or clears the DeleteFile disposition on the handle. Returns true if
|
| + // the disposition was set or cleared, as indicated by |delete_on_close|.
|
| + //
|
| + // Microsoft Windows deletes a file only when the last handle to the
|
| + // underlying kernel object is closed when the DeleteFile disposition has been
|
| + // set by any handle holder. This disposition is be set by:
|
| + // - Calling the Win32 DeleteFile function with the path to a file.
|
| + // - Opening/creating a file with FLAG_DELETE_ON_CLOSE.
|
| + // - Opening/creating a file with FLAG_CAN_DELETE_ON_CLOSE and subsequently
|
| + // calling DeleteOnClose(true).
|
| + //
|
| + // In all cases, all pre-existing handles to the file must have been opened
|
| + // with FLAG_SHARE_DELETE.
|
| + //
|
| + // So:
|
| + // - Use FLAG_SHARE_DELETE when creating/opening a file to allow another
|
| + // entity on the system to cause it to be deleted when it is closed. (Note:
|
| + // another entity can delete the file the moment after it is closed, so not
|
| + // using this permission doesn't provide any protections.)
|
| + // - Use FLAG_DELETE_ON_CLOSE for any file that is to be deleted after use.
|
| + // The OS will ensure it is deleted even in the face of process termination.
|
| + // - Use FLAG_CAN_DELETE_ON_CLOSE in conjunction with DeleteOnClose() to alter
|
| + // the DeleteFile disposition on an open handle. This fine-grained control
|
| + // allows for marking a file for deletion during processing so that it is
|
| + // deleted in the event of untimely process termination, and then clearing
|
| + // this state once the file is suitable for persistence.
|
| + bool DeleteOnClose(bool delete_on_close);
|
| +#endif
|
| +
|
| +#if defined(OS_WIN)
|
| static Error OSErrorToFileError(DWORD last_error);
|
| #elif defined(OS_POSIX)
|
| static Error OSErrorToFileError(int saved_errno);
|
|
|