Index: base/files/file.cc |
diff --git a/base/files/file.cc b/base/files/file.cc |
index 58f80c52322ec38125e1acbe3fda1120f64aa912..9a4ddb1de4a17e174f569a648096e631ad857f8f 100644 |
--- a/base/files/file.cc |
+++ b/base/files/file.cc |
@@ -52,22 +52,30 @@ File::File(Error error_details) |
File::File(RValue other) |
: file_(other.object->TakePlatformFile()), |
- path_(other.object->path_), |
+ tracing_path_(other.object->tracing_path_), |
error_details_(other.object->error_details()), |
created_(other.object->created()), |
- async_(other.object->async_) { |
-} |
+ async_(other.object->async_) {} |
File::~File() { |
// Go through the AssertIOAllowed logic. |
Close(); |
} |
+// static |
+File File::CreateForAsyncHandle(PlatformFile platform_file) { |
+ File file(platform_file); |
+ // It would be nice if we could validate that |platform_file| was opened with |
+ // FILE_FLAG_OVERLAPPED on Windows but this doesn't appear to be possible. |
+ file.async_ = true; |
+ return file.Pass(); |
+} |
+ |
File& File::operator=(RValue other) { |
if (this != other.object) { |
Close(); |
SetPlatformFile(other.object->TakePlatformFile()); |
- path_ = other.object->path_; |
+ tracing_path_ = other.object->tracing_path_; |
error_details_ = other.object->error_details(); |
created_ = other.object->created(); |
async_ = other.object->async_; |
@@ -81,9 +89,10 @@ void File::Initialize(const FilePath& path, uint32 flags) { |
error_details_ = FILE_ERROR_ACCESS_DENIED; |
return; |
} |
- path_ = path; |
+ if (FileTracing::IsCategoryEnabled()) |
+ tracing_path_ = path; |
SCOPED_FILE_TRACE("Initialize"); |
- DoInitialize(flags); |
+ DoInitialize(path, flags); |
} |
#endif |