Chromium Code Reviews| 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))); |