1 // Copyright (c) 2011 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.
5 #include "base/files/file.h"
6 #include "base/files/file_path.h"
7 #include "base/files/file_tracing.h"
8 #include "base/metrics/histogram.h"
9 #include "base/timer/elapsed_timer.h"
16 is_symbolic_link(false) {
23 : error_details_(FILE_ERROR_FAILED
),
29 File::File(const FilePath
& path
, uint32 flags
)
30 : error_details_(FILE_OK
),
33 Initialize(path
, flags
);
37 File::File(PlatformFile platform_file
)
38 : file_(platform_file
),
39 error_details_(FILE_OK
),
43 DCHECK_GE(platform_file
, -1);
47 File::File(Error error_details
)
48 : error_details_(error_details
),
53 File::File(RValue other
)
54 : file_(other
.object
->TakePlatformFile()),
55 path_(other
.object
->path_
),
56 error_details_(other
.object
->error_details()),
57 created_(other
.object
->created()),
58 async_(other
.object
->async_
) {
62 // Go through the AssertIOAllowed logic.
66 File
& File::operator=(RValue other
) {
67 if (this != other
.object
) {
69 SetPlatformFile(other
.object
->TakePlatformFile());
70 path_
= other
.object
->path_
;
71 error_details_
= other
.object
->error_details();
72 created_
= other
.object
->created();
73 async_
= other
.object
->async_
;
79 void File::Initialize(const FilePath
& path
, uint32 flags
) {
80 if (path
.ReferencesParent()) {
81 error_details_
= FILE_ERROR_ACCESS_DENIED
;
85 SCOPED_FILE_TRACE("Initialize");
90 std::string
File::ErrorToString(Error error
) {
94 case FILE_ERROR_FAILED
:
95 return "FILE_ERROR_FAILED";
96 case FILE_ERROR_IN_USE
:
97 return "FILE_ERROR_IN_USE";
98 case FILE_ERROR_EXISTS
:
99 return "FILE_ERROR_EXISTS";
100 case FILE_ERROR_NOT_FOUND
:
101 return "FILE_ERROR_NOT_FOUND";
102 case FILE_ERROR_ACCESS_DENIED
:
103 return "FILE_ERROR_ACCESS_DENIED";
104 case FILE_ERROR_TOO_MANY_OPENED
:
105 return "FILE_ERROR_TOO_MANY_OPENED";
106 case FILE_ERROR_NO_MEMORY
:
107 return "FILE_ERROR_NO_MEMORY";
108 case FILE_ERROR_NO_SPACE
:
109 return "FILE_ERROR_NO_SPACE";
110 case FILE_ERROR_NOT_A_DIRECTORY
:
111 return "FILE_ERROR_NOT_A_DIRECTORY";
112 case FILE_ERROR_INVALID_OPERATION
:
113 return "FILE_ERROR_INVALID_OPERATION";
114 case FILE_ERROR_SECURITY
:
115 return "FILE_ERROR_SECURITY";
116 case FILE_ERROR_ABORT
:
117 return "FILE_ERROR_ABORT";
118 case FILE_ERROR_NOT_A_FILE
:
119 return "FILE_ERROR_NOT_A_FILE";
120 case FILE_ERROR_NOT_EMPTY
:
121 return "FILE_ERROR_NOT_EMPTY";
122 case FILE_ERROR_INVALID_URL
:
123 return "FILE_ERROR_INVALID_URL";
125 return "FILE_ERROR_IO";
136 SCOPED_FILE_TRACE("Flush");
137 bool return_value
= DoFlush();
138 UMA_HISTOGRAM_TIMES("PlatformFile.FlushTime", timer
.Elapsed());