| Index: net/base/file_stream_context_win.cc
|
| diff --git a/net/base/file_stream_context_win.cc b/net/base/file_stream_context_win.cc
|
| index 4a666c70a5b98d746e0af948669b74dfbf0d6e80..cb7b41c09d42bacb40b5c0633c45c60ee466f61f 100644
|
| --- a/net/base/file_stream_context_win.cc
|
| +++ b/net/base/file_stream_context_win.cc
|
| @@ -40,10 +40,10 @@ void IncrementOffset(OVERLAPPED* overlapped, DWORD count) {
|
| FileStream::Context::Context(const BoundNetLog& bound_net_log,
|
| const scoped_refptr<base::TaskRunner>& task_runner)
|
| : io_context_(),
|
| - file_(base::kInvalidPlatformFileValue),
|
| record_uma_(false),
|
| async_in_progress_(false),
|
| orphaned_(false),
|
| + async_(false),
|
| bound_net_log_(bound_net_log),
|
| error_source_(FILE_ERROR_SOURCE_COUNT),
|
| task_runner_(task_runner) {
|
| @@ -51,24 +51,41 @@ FileStream::Context::Context(const BoundNetLog& bound_net_log,
|
| memset(&io_context_.overlapped, 0, sizeof(io_context_.overlapped));
|
| }
|
|
|
| -FileStream::Context::Context(base::PlatformFile file,
|
| +FileStream::Context::Context(base::File file,
|
| const BoundNetLog& bound_net_log,
|
| - int open_flags,
|
| const scoped_refptr<base::TaskRunner>& task_runner)
|
| : io_context_(),
|
| - file_(file),
|
| + file_(file.Pass()),
|
| record_uma_(false),
|
| async_in_progress_(false),
|
| orphaned_(false),
|
| + async_(false),
|
| bound_net_log_(bound_net_log),
|
| error_source_(FILE_ERROR_SOURCE_COUNT),
|
| task_runner_(task_runner) {
|
| io_context_.handler = this;
|
| memset(&io_context_.overlapped, 0, sizeof(io_context_.overlapped));
|
| - if (file_ != base::kInvalidPlatformFileValue &&
|
| - (open_flags & base::PLATFORM_FILE_ASYNC)) {
|
| + if (file_.IsValid() && file_.async())
|
| + OnAsyncFileOpened();
|
| +}
|
| +
|
| +FileStream::Context::Context(base::File file,
|
| + int flags,
|
| + const BoundNetLog& bound_net_log,
|
| + const scoped_refptr<base::TaskRunner>& task_runner)
|
| + : io_context_(),
|
| + file_(file.Pass()),
|
| + record_uma_(false),
|
| + async_in_progress_(false),
|
| + orphaned_(false),
|
| + async_((flags & base::File::FLAG_ASYNC) == base::File::FLAG_ASYNC),
|
| + bound_net_log_(bound_net_log),
|
| + error_source_(FILE_ERROR_SOURCE_COUNT),
|
| + task_runner_(task_runner) {
|
| + io_context_.handler = this;
|
| + memset(&io_context_.overlapped, 0, sizeof(io_context_.overlapped));
|
| + if (file_.IsValid() && (file_.async() || flags & base::File::FLAG_ASYNC))
|
| OnAsyncFileOpened();
|
| - }
|
| }
|
|
|
| FileStream::Context::~Context() {
|
| @@ -76,7 +93,7 @@ FileStream::Context::~Context() {
|
|
|
| int64 FileStream::Context::GetFileSize() const {
|
| LARGE_INTEGER file_size;
|
| - if (!GetFileSizeEx(file_, &file_size)) {
|
| + if (!GetFileSizeEx(file_.GetPlatformFile(), &file_size)) {
|
| IOResult error = IOResult::FromOSError(GetLastError());
|
| LOG(WARNING) << "GetFileSizeEx failed: " << error.os_error;
|
| RecordError(error, FILE_ERROR_SOURCE_GET_SIZE);
|
| @@ -93,7 +110,7 @@ int FileStream::Context::ReadAsync(IOBuffer* buf,
|
| error_source_ = FILE_ERROR_SOURCE_READ;
|
|
|
| DWORD bytes_read;
|
| - if (!ReadFile(file_, buf->data(), buf_len,
|
| + if (!ReadFile(file_.GetPlatformFile(), buf->data(), buf_len,
|
| &bytes_read, &io_context_.overlapped)) {
|
| IOResult error = IOResult::FromOSError(GetLastError());
|
| if (error.os_error == ERROR_IO_PENDING) {
|
| @@ -113,7 +130,7 @@ int FileStream::Context::ReadAsync(IOBuffer* buf,
|
|
|
| int FileStream::Context::ReadSync(char* buf, int buf_len) {
|
| DWORD bytes_read;
|
| - if (!ReadFile(file_, buf, buf_len, &bytes_read, NULL)) {
|
| + if (!ReadFile(file_.GetPlatformFile(), buf, buf_len, &bytes_read, NULL)) {
|
| IOResult error = IOResult::FromOSError(GetLastError());
|
| if (error.os_error == ERROR_HANDLE_EOF) {
|
| return 0; // Report EOF by returning 0 bytes read.
|
| @@ -133,7 +150,7 @@ int FileStream::Context::WriteAsync(IOBuffer* buf,
|
| error_source_ = FILE_ERROR_SOURCE_WRITE;
|
|
|
| DWORD bytes_written = 0;
|
| - if (!WriteFile(file_, buf->data(), buf_len,
|
| + if (!WriteFile(file_.GetPlatformFile(), buf->data(), buf_len,
|
| &bytes_written, &io_context_.overlapped)) {
|
| IOResult error = IOResult::FromOSError(GetLastError());
|
| if (error.os_error == ERROR_IO_PENDING) {
|
| @@ -151,7 +168,7 @@ int FileStream::Context::WriteAsync(IOBuffer* buf,
|
|
|
| int FileStream::Context::WriteSync(const char* buf, int buf_len) {
|
| DWORD bytes_written = 0;
|
| - if (!WriteFile(file_, buf, buf_len, &bytes_written, NULL)) {
|
| + if (!WriteFile(file_.GetPlatformFile(), buf, buf_len, &bytes_written, NULL)) {
|
| IOResult error = IOResult::FromOSError(GetLastError());
|
| LOG(WARNING) << "WriteFile failed: " << error.os_error;
|
| RecordError(error, FILE_ERROR_SOURCE_WRITE);
|
| @@ -162,7 +179,7 @@ int FileStream::Context::WriteSync(const char* buf, int buf_len) {
|
| }
|
|
|
| int FileStream::Context::Truncate(int64 bytes) {
|
| - if (!SetEndOfFile(file_)) {
|
| + if (!SetEndOfFile(file_.GetPlatformFile())) {
|
| IOResult error = IOResult::FromOSError(GetLastError());
|
| LOG(WARNING) << "SetEndOfFile failed: " << error.os_error;
|
| RecordError(error, FILE_ERROR_SOURCE_SET_EOF);
|
| @@ -173,7 +190,8 @@ int FileStream::Context::Truncate(int64 bytes) {
|
| }
|
|
|
| void FileStream::Context::OnAsyncFileOpened() {
|
| - base::MessageLoopForIO::current()->RegisterIOHandler(file_, this);
|
| + base::MessageLoopForIO::current()->RegisterIOHandler(file_.GetPlatformFile(),
|
| + this);
|
| }
|
|
|
| FileStream::Context::IOResult FileStream::Context::SeekFileImpl(Whence whence,
|
| @@ -181,7 +199,7 @@ FileStream::Context::IOResult FileStream::Context::SeekFileImpl(Whence whence,
|
| LARGE_INTEGER distance, res;
|
| distance.QuadPart = offset;
|
| DWORD move_method = static_cast<DWORD>(whence);
|
| - if (SetFilePointerEx(file_, distance, &res, move_method)) {
|
| + if (SetFilePointerEx(file_.GetPlatformFile(), distance, &res, move_method)) {
|
| SetOffset(&io_context_.overlapped, res);
|
| return IOResult(res.QuadPart, 0);
|
| }
|
| @@ -190,16 +208,7 @@ FileStream::Context::IOResult FileStream::Context::SeekFileImpl(Whence whence,
|
| }
|
|
|
| FileStream::Context::IOResult FileStream::Context::FlushFileImpl() {
|
| - if (FlushFileBuffers(file_))
|
| - return IOResult(OK, 0);
|
| -
|
| - return IOResult::FromOSError(GetLastError());
|
| -}
|
| -
|
| -FileStream::Context::IOResult FileStream::Context::CloseFileImpl() {
|
| - bool success = base::ClosePlatformFile(file_);
|
| - file_ = base::kInvalidPlatformFileValue;
|
| - if (success)
|
| + if (FlushFileBuffers(file_.GetPlatformFile()))
|
| return IOResult(OK, 0);
|
|
|
| return IOResult::FromOSError(GetLastError());
|
|
|