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

Unified Diff: chrome/browser/chromeos/drive/drive_file_stream_reader.cc

Issue 93883006: Fix failure of reading zero-byte files on Drive via StreamReader. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/drive/drive_file_stream_reader.cc
diff --git a/chrome/browser/chromeos/drive/drive_file_stream_reader.cc b/chrome/browser/chromeos/drive/drive_file_stream_reader.cc
index 4a5530fed586ac4612851e83dd35f89a310901ba..fd84ec3983b47389ff15ed233ace2a9b03c36960 100644
--- a/chrome/browser/chromeos/drive/drive_file_stream_reader.cc
+++ b/chrome/browser/chromeos/drive/drive_file_stream_reader.cc
@@ -339,7 +339,7 @@ int DriveFileStreamReader::Read(net::IOBuffer* buffer, int buffer_length,
}
void DriveFileStreamReader::InitializeAfterGetFileContentInitialized(
- const net::HttpByteRange& in_byte_range,
+ const net::HttpByteRange& byte_range,
const InitializeCompletionCallback& callback,
FileError error,
scoped_ptr<ResourceEntry> entry,
@@ -353,8 +353,14 @@ void DriveFileStreamReader::InitializeAfterGetFileContentInitialized(
}
DCHECK(entry);
- net::HttpByteRange byte_range = in_byte_range;
- if (!byte_range.ComputeBounds(entry->file_info().size())) {
+ // Note: both boundary of |byte_range| are inclusive.
+ // Convert it to half-exclusive range with missing bounds filled.
hashimoto 2013/12/19 08:53:40 Is it OK to ignore suffix byte range?
kinaba 2013/12/20 03:57:55 Good catch. Recovered the support for suffix range
+ const int64 range_start = byte_range.HasFirstBytePosition() ?
+ byte_range.first_byte_position() : 0;
+ const int64 range_end = byte_range.HasLastBytePosition() ?
+ byte_range.last_byte_position() + 1 : entry->file_info().size();
+
+ if (range_start > range_end || entry->file_info().size() < range_end) {
// If |byte_range| is invalid (e.g. out of bounds), return with an error.
// At the same time, we cancel the in-flight downloading operation if
// needed and and invalidate weak pointers so that we won't
@@ -367,17 +373,12 @@ void DriveFileStreamReader::InitializeAfterGetFileContentInitialized(
return;
}
- // Note: both boundary of |byte_range| are inclusive.
- int64 range_length =
- byte_range.last_byte_position() - byte_range.first_byte_position() + 1;
- DCHECK_GE(range_length, 0);
-
if (local_cache_file_path.empty()) {
// The file is not cached, and being downloaded.
DCHECK(!ui_cancel_download_closure.is_null());
reader_proxy_.reset(
new internal::NetworkReaderProxy(
- byte_range.first_byte_position(), range_length,
+ range_start, range_end - range_start,
base::Bind(&RunTaskOnUIThread, ui_cancel_download_closure)));
callback.Run(net::OK, entry.Pass());
return;
@@ -389,11 +390,11 @@ void DriveFileStreamReader::InitializeAfterGetFileContentInitialized(
util::LocalFileReader* file_reader_ptr = file_reader.get();
file_reader_ptr->Open(
local_cache_file_path,
- byte_range.first_byte_position(),
+ range_start,
base::Bind(
&DriveFileStreamReader::InitializeAfterLocalFileOpen,
weak_ptr_factory_.GetWeakPtr(),
- range_length,
+ range_end - range_start,
callback,
base::Passed(&entry),
base::Passed(&file_reader)));

Powered by Google App Engine
This is Rietveld 408576698