Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Side by Side Diff: net/base/file_stream.h

Issue 323683002: net: FileStream cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More comments, fix init typo Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file defines FileStream, a basic interface for reading and writing files 5 // This file defines FileStream, a basic interface for reading and writing files
6 // synchronously or asynchronously with support for seeking to an offset. 6 // synchronously or asynchronously with support for seeking to an offset.
7 // Note that even when used asynchronously, only one operation is supported at 7 // Note that even when used asynchronously, only one operation is supported at
8 // a time. 8 // a time.
9 9
10 #ifndef NET_BASE_FILE_STREAM_H_ 10 #ifndef NET_BASE_FILE_STREAM_H_
11 #define NET_BASE_FILE_STREAM_H_ 11 #define NET_BASE_FILE_STREAM_H_
12 12
13 #include "base/files/file.h" 13 #include "base/files/file.h"
14 #include "net/base/completion_callback.h" 14 #include "net/base/completion_callback.h"
15 #include "net/base/file_stream_whence.h"
16 #include "net/base/net_export.h" 15 #include "net/base/net_export.h"
17 16
18 namespace base { 17 namespace base {
19 class FilePath; 18 class FilePath;
20 class TaskRunner; 19 class TaskRunner;
21 } 20 }
22 21
23 namespace net { 22 namespace net {
24 23
25 class IOBuffer; 24 class IOBuffer;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 61
63 // Returns true if Open succeeded and Close has not been called. 62 // Returns true if Open succeeded and Close has not been called.
64 virtual bool IsOpen() const; 63 virtual bool IsOpen() const;
65 64
66 // Adjust the position from where data is read asynchronously. 65 // Adjust the position from where data is read asynchronously.
67 // Upon success, ERR_IO_PENDING is returned and |callback| will be run 66 // Upon success, ERR_IO_PENDING is returned and |callback| will be run
68 // on the thread where Seek() was called with the the stream position 67 // on the thread where Seek() was called with the the stream position
69 // relative to the start of the file. Otherwise, an error code is returned. 68 // relative to the start of the file. Otherwise, an error code is returned.
70 // It is invalid to request any asynchronous operations while there is an 69 // It is invalid to request any asynchronous operations while there is an
71 // in-flight asynchronous operation. 70 // in-flight asynchronous operation.
72 virtual int Seek(Whence whence, int64 offset, 71 virtual int Seek(base::File::Whence whence, int64 offset,
73 const Int64CompletionCallback& callback); 72 const Int64CompletionCallback& callback);
74 73
75 // Call this method to read data from the current stream position 74 // Call this method to read data from the current stream position
76 // asynchronously. Up to buf_len bytes will be copied into buf. (In 75 // asynchronously. Up to buf_len bytes will be copied into buf. (In
77 // other words, partial reads are allowed.) Returns the number of bytes 76 // other words, partial reads are allowed.) Returns the number of bytes
78 // copied, 0 if at end-of-file, or an error code if the operation could 77 // copied, 0 if at end-of-file, or an error code if the operation could
79 // not be performed. 78 // not be performed.
80 // 79 //
81 // The file must be opened with FLAG_ASYNC, and a non-null 80 // The file must be opened with FLAG_ASYNC, and a non-null
82 // callback must be passed to this method. If the read could not 81 // callback must be passed to this method. If the read could not
83 // complete synchronously, then ERR_IO_PENDING is returned, and the 82 // complete synchronously, then ERR_IO_PENDING is returned, and the
84 // callback will be run on the thread where Read() was called, when the 83 // callback will be run on the thread where Read() was called, when the
85 // read has completed. 84 // read has completed.
86 // 85 //
87 // It is valid to destroy or close the file stream while there is an 86 // It is valid to destroy or close the file stream while there is an
88 // asynchronous read in progress. That will cancel the read and allow 87 // asynchronous read in progress. That will cancel the read and allow
89 // the buffer to be freed. 88 // the buffer to be freed.
90 // 89 //
91 // It is invalid to request any asynchronous operations while there is an 90 // It is invalid to request any asynchronous operations while there is an
92 // in-flight asynchronous operation. 91 // in-flight asynchronous operation.
93 // 92 //
94 // This method must not be called if the stream was opened WRITE_ONLY. 93 // This method must not be called if the stream was opened WRITE_ONLY.
95 virtual int Read(IOBuffer* buf, int buf_len, 94 virtual int Read(IOBuffer* buf, int buf_len,
96 const CompletionCallback& callback); 95 const CompletionCallback& callback);
97 96
97 // Same as Read, but delays starting the operation until it should complete
98 // without blocking, reducing the load on the task_runner. It is the caller's
99 // responsibility to determine if using non-blocking IO is appropriate or not.
100 // For example, using this with regular files will most likely hang on POSIX.
101 // This method does the same as Read on Windows, as Read uses async IO instead
102 // of blocking IO.
103 virtual int ReadNonBlocking(IOBuffer* buf, int buf_len,
104 const CompletionCallback& callback);
105
98 // Call this method to write data at the current stream position 106 // Call this method to write data at the current stream position
99 // asynchronously. Up to buf_len bytes will be written from buf. (In 107 // asynchronously. Up to buf_len bytes will be written from buf. (In
100 // other words, partial writes are allowed.) Returns the number of 108 // other words, partial writes are allowed.) Returns the number of
101 // bytes written, or an error code if the operation could not be 109 // bytes written, or an error code if the operation could not be
102 // performed. 110 // performed.
103 // 111 //
104 // The file must be opened with FLAG_ASYNC, and a non-null 112 // The file must be opened with FLAG_ASYNC, and a non-null
105 // callback must be passed to this method. If the write could not 113 // callback must be passed to this method. If the write could not
106 // complete synchronously, then ERR_IO_PENDING is returned, and the 114 // complete synchronously, then ERR_IO_PENDING is returned, and the
107 // callback will be run on the thread where Write() was called when 115 // callback will be run on the thread where Write() was called when
108 // the write has completed. 116 // the write has completed.
109 // 117 //
110 // It is valid to destroy or close the file stream while there is an 118 // It is valid to destroy or close the file stream while there is an
111 // asynchronous write in progress. That will cancel the write and allow 119 // asynchronous write in progress. That will cancel the write and allow
112 // the buffer to be freed. 120 // the buffer to be freed.
113 // 121 //
114 // It is invalid to request any asynchronous operations while there is an 122 // It is invalid to request any asynchronous operations while there is an
115 // in-flight asynchronous operation. 123 // in-flight asynchronous operation.
116 // 124 //
117 // This method must not be called if the stream was opened READ_ONLY. 125 // This method must not be called if the stream was opened READ_ONLY.
118 // 126 //
119 // Zero byte writes are not allowed. 127 // Zero byte writes are not allowed.
120 virtual int Write(IOBuffer* buf, int buf_len, 128 virtual int Write(IOBuffer* buf, int buf_len,
121 const CompletionCallback& callback); 129 const CompletionCallback& callback);
122 130
131 // Same as Write, but delays starting the operation until it should complete
132 // without blocking, reducing the load on the task_runner. It is the caller's
133 // responsibility to determine if using non-blocking IO is appropriate or not.
134 // For example, using this with regular files will most likely hang on POSIX.
135 // This method does the same as Write on Windows, as Write uses async IO
136 // instead of blocking IO.
137 virtual int WriteNonBlocking(IOBuffer* buf, int buf_len,
138 const CompletionCallback& callback);
139
123 // Forces out a filesystem sync on this file to make sure that the file was 140 // Forces out a filesystem sync on this file to make sure that the file was
124 // written out to disk and is not currently sitting in the buffer. This does 141 // written out to disk and is not currently sitting in the buffer. This does
125 // not have to be called, it just forces one to happen at the time of 142 // not have to be called, it just forces one to happen at the time of
126 // calling. 143 // calling.
127 // 144 //
128 // The file must be opened with FLAG_ASYNC, and a non-null 145 // The file must be opened with FLAG_ASYNC, and a non-null
129 // callback must be passed to this method. If the write could not 146 // callback must be passed to this method. If the write could not
130 // complete synchronously, then ERR_IO_PENDING is returned, and the 147 // complete synchronously, then ERR_IO_PENDING is returned, and the
131 // callback will be run on the thread where Flush() was called when 148 // callback will be run on the thread where Flush() was called when
132 // the write has completed. 149 // the write has completed.
(...skipping 20 matching lines...) Expand all
153 // without explicitly calling Close, the file should be closed asynchronously 170 // without explicitly calling Close, the file should be closed asynchronously
154 // without delaying FileStream's destructor. 171 // without delaying FileStream's destructor.
155 scoped_ptr<Context> context_; 172 scoped_ptr<Context> context_;
156 173
157 DISALLOW_COPY_AND_ASSIGN(FileStream); 174 DISALLOW_COPY_AND_ASSIGN(FileStream);
158 }; 175 };
159 176
160 } // namespace net 177 } // namespace net
161 178
162 #endif // NET_BASE_FILE_STREAM_H_ 179 #endif // NET_BASE_FILE_STREAM_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698