| Index: net/base/file_stream.h
|
| diff --git a/net/base/file_stream.h b/net/base/file_stream.h
|
| index f4cfff293e8599f7c79d1790d0623f34f4511e8b..5c6479238a20338351b20927590e8185990e14ea 100644
|
| --- a/net/base/file_stream.h
|
| +++ b/net/base/file_stream.h
|
| @@ -15,11 +15,6 @@
|
| #include "net/base/file_stream_whence.h"
|
| #include "net/base/net_export.h"
|
| #include "net/base/net_log.h"
|
| -#if defined(OS_WIN)
|
| -#include "net/base/file_stream_win.h"
|
| -#elif defined(OS_POSIX)
|
| -#include "net/base/file_stream_posix.h"
|
| -#endif
|
|
|
| class FilePath;
|
|
|
| @@ -39,32 +34,13 @@ class NET_EXPORT FileStream {
|
| // opened.
|
| // |net_log| is the net log pointer to use to create a |BoundNetLog|. May be
|
| // NULL if logging is not needed.
|
| - // The already opened file will not be automatically closed when FileStream
|
| - // is destructed.
|
| + // Note: the new FileStream object takes ownership of the PlatformFile and
|
| + // will close it on destruction.
|
| FileStream(base::PlatformFile file, int flags, net::NetLog* net_log);
|
|
|
| - // If the file stream was opened with Open() or OpenSync(), the underlying
|
| - // file will be closed automatically by the destructor, if not closed
|
| - // manually.
|
| + // The underlying file is closed automatically.
|
| virtual ~FileStream();
|
|
|
| - // Call this method to close the FileStream, which was previously opened in
|
| - // the async mode (PLATFORM_FILE_ASYNC) asynchronously.
|
| - //
|
| - // Once the operation is done, |callback| will be run on the thread where
|
| - // Close() was called, with OK (i.e. an error is not propagated just like
|
| - // CloseSync() does not).
|
| - //
|
| - // It is not OK to call Close() multiple times. The behavior is not defined.
|
| - // Note that there must never be any pending async operations.
|
| - virtual void Close(const CompletionCallback& callback);
|
| -
|
| - // Call this method to close the FileStream synchronously.
|
| - // It is OK to call CloseSync() multiple times. Redundant calls are
|
| - // ignored. Note that if there are any pending async operations, they'll
|
| - // be aborted.
|
| - virtual void CloseSync();
|
| -
|
| // Call this method to open the FileStream asynchronously. The remaining
|
| // methods cannot be used unless the file is opened successfully. Returns
|
| // ERR_IO_PENDING if the operation is started. If the operation cannot be
|
| @@ -237,11 +213,20 @@ class NET_EXPORT FileStream {
|
| base::PlatformFile GetPlatformFileForTesting();
|
|
|
| private:
|
| -#if defined(OS_WIN)
|
| - FileStreamWin impl_;
|
| -#elif defined(OS_POSIX)
|
| - FileStreamPosix impl_;
|
| -#endif
|
| + class Context;
|
| +
|
| + bool is_async() const { return !!(open_flags_ & base::PLATFORM_FILE_ASYNC); }
|
| +
|
| + int open_flags_;
|
| + net::BoundNetLog bound_net_log_;
|
| +
|
| + // Context performing I/O operations. It was extracted into separate class
|
| + // to perform asynchronous operations because FileStream can be destroyed
|
| + // before completion of async operation. Also if async FileStream is destroyed
|
| + // without explicit closing file should be closed asynchronously without
|
| + // delaying FileStream's destructor. To perform all that separate object is
|
| + // necessary.
|
| + scoped_ptr<Context> context_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(FileStream);
|
| };
|
|
|