Index: net/base/upload_file_element_reader.cc |
diff --git a/net/base/upload_file_element_reader.cc b/net/base/upload_file_element_reader.cc |
deleted file mode 100644 |
index 864584d849d43f08741e7ce3834bb8af97a64d28..0000000000000000000000000000000000000000 |
--- a/net/base/upload_file_element_reader.cc |
+++ /dev/null |
@@ -1,221 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/base/upload_file_element_reader.h" |
- |
-#include "base/bind.h" |
-#include "base/files/file_util.h" |
-#include "base/location.h" |
-#include "base/profiler/scoped_tracker.h" |
-#include "base/task_runner_util.h" |
-#include "net/base/file_stream.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-// In tests, this value is used to override the return value of |
-// UploadFileElementReader::GetContentLength() when set to non-zero. |
-uint64 overriding_content_length = 0; |
- |
-} // namespace |
- |
-UploadFileElementReader::UploadFileElementReader( |
- base::TaskRunner* task_runner, |
- const base::FilePath& path, |
- uint64 range_offset, |
- uint64 range_length, |
- const base::Time& expected_modification_time) |
- : task_runner_(task_runner), |
- path_(path), |
- range_offset_(range_offset), |
- range_length_(range_length), |
- expected_modification_time_(expected_modification_time), |
- content_length_(0), |
- bytes_remaining_(0), |
- weak_ptr_factory_(this) { |
- DCHECK(task_runner_.get()); |
-} |
- |
-UploadFileElementReader::~UploadFileElementReader() { |
-} |
- |
-const UploadFileElementReader* UploadFileElementReader::AsFileReader() const { |
- return this; |
-} |
- |
-int UploadFileElementReader::Init(const CompletionCallback& callback) { |
- DCHECK(!callback.is_null()); |
- Reset(); |
- |
- file_stream_.reset(new FileStream(task_runner_.get())); |
- int result = file_stream_->Open( |
- path_, |
- base::File::FLAG_OPEN | base::File::FLAG_READ | |
- base::File::FLAG_ASYNC, |
- base::Bind(&UploadFileElementReader::OnOpenCompleted, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback)); |
- DCHECK_GT(0, result); |
- return result; |
-} |
- |
-uint64 UploadFileElementReader::GetContentLength() const { |
- if (overriding_content_length) |
- return overriding_content_length; |
- return content_length_; |
-} |
- |
-uint64 UploadFileElementReader::BytesRemaining() const { |
- return bytes_remaining_; |
-} |
- |
-int UploadFileElementReader::Read(IOBuffer* buf, |
- int buf_length, |
- const CompletionCallback& callback) { |
- DCHECK(!callback.is_null()); |
- |
- int num_bytes_to_read = static_cast<int>( |
- std::min(BytesRemaining(), static_cast<uint64>(buf_length))); |
- if (num_bytes_to_read == 0) |
- return 0; |
- |
- int result = file_stream_->Read( |
- buf, num_bytes_to_read, |
- base::Bind(base::IgnoreResult(&UploadFileElementReader::OnReadCompleted), |
- weak_ptr_factory_.GetWeakPtr(), |
- callback)); |
- // Even in async mode, FileStream::Read() may return the result synchronously. |
- if (result != ERR_IO_PENDING) |
- return OnReadCompleted(CompletionCallback(), result); |
- return ERR_IO_PENDING; |
-} |
- |
-void UploadFileElementReader::Reset() { |
- weak_ptr_factory_.InvalidateWeakPtrs(); |
- bytes_remaining_ = 0; |
- content_length_ = 0; |
- file_stream_.reset(); |
-} |
- |
-void UploadFileElementReader::OnOpenCompleted( |
- const CompletionCallback& callback, |
- int result) { |
- // TODO(vadimt): Remove ScopedTracker below once crbug.com/423948 is fixed. |
- tracked_objects::ScopedTracker tracking_profile( |
- FROM_HERE_WITH_EXPLICIT_FUNCTION( |
- "423948 UploadFileElementReader::OnOpenCompleted")); |
- |
- DCHECK(!callback.is_null()); |
- |
- if (result < 0) { |
- DLOG(WARNING) << "Failed to open \"" << path_.value() |
- << "\" for reading: " << result; |
- callback.Run(result); |
- return; |
- } |
- |
- if (range_offset_) { |
- int result = file_stream_->Seek( |
- base::File::FROM_BEGIN, range_offset_, |
- base::Bind(&UploadFileElementReader::OnSeekCompleted, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback)); |
- DCHECK_GT(0, result); |
- if (result != ERR_IO_PENDING) |
- callback.Run(result); |
- } else { |
- OnSeekCompleted(callback, OK); |
- } |
-} |
- |
-void UploadFileElementReader::OnSeekCompleted( |
- const CompletionCallback& callback, |
- int64 result) { |
- DCHECK(!callback.is_null()); |
- |
- if (result < 0) { |
- DLOG(WARNING) << "Failed to seek \"" << path_.value() |
- << "\" to offset: " << range_offset_ << " (" << result << ")"; |
- callback.Run(static_cast<int>(result)); |
- return; |
- } |
- |
- base::File::Info* file_info = new base::File::Info; |
- bool posted = base::PostTaskAndReplyWithResult( |
- task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&base::GetFileInfo, path_, file_info), |
- base::Bind(&UploadFileElementReader::OnGetFileInfoCompleted, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback, |
- base::Owned(file_info))); |
- DCHECK(posted); |
-} |
- |
-void UploadFileElementReader::OnGetFileInfoCompleted( |
- const CompletionCallback& callback, |
- base::File::Info* file_info, |
- bool result) { |
- DCHECK(!callback.is_null()); |
- if (!result) { |
- DLOG(WARNING) << "Failed to get file info of \"" << path_.value() << "\""; |
- callback.Run(ERR_FILE_NOT_FOUND); |
- return; |
- } |
- |
- int64 length = file_info->size; |
- if (range_offset_ < static_cast<uint64>(length)) { |
- // Compensate for the offset. |
- length = std::min(length - range_offset_, range_length_); |
- } |
- |
- // If the underlying file has been changed and the expected file modification |
- // time is set, treat it as error. Note that |expected_modification_time_| may |
- // have gone through multiple conversion steps involving loss of precision |
- // (including conversion to time_t). Therefore the check below only verifies |
- // that the timestamps are within one second of each other. This check is used |
- // for sliced files. |
- if (!expected_modification_time_.is_null() && |
- (expected_modification_time_ - file_info->last_modified) |
- .magnitude() |
- .InSeconds() != 0) { |
- callback.Run(ERR_UPLOAD_FILE_CHANGED); |
- return; |
- } |
- |
- content_length_ = length; |
- bytes_remaining_ = GetContentLength(); |
- callback.Run(OK); |
-} |
- |
-int UploadFileElementReader::OnReadCompleted( |
- const CompletionCallback& callback, |
- int result) { |
- if (result == 0) // Reached end-of-file earlier than expected. |
- result = ERR_UPLOAD_FILE_CHANGED; |
- |
- if (result > 0) { |
- DCHECK_GE(bytes_remaining_, static_cast<uint64>(result)); |
- bytes_remaining_ -= result; |
- } |
- |
- if (!callback.is_null()) |
- callback.Run(result); |
- return result; |
-} |
- |
-UploadFileElementReader::ScopedOverridingContentLengthForTests:: |
-ScopedOverridingContentLengthForTests(uint64 value) { |
- overriding_content_length = value; |
-} |
- |
-UploadFileElementReader::ScopedOverridingContentLengthForTests:: |
-~ScopedOverridingContentLengthForTests() { |
- overriding_content_length = 0; |
-} |
- |
-} // namespace net |