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

Side by Side Diff: chrome/browser/chromeos/drive/drive_file_stream_reader.cc

Issue 1547093002: Switch to standard integer types in chrome/browser/chromeos/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h" 5 #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h"
6 6
7 #include <stddef.h>
8
7 #include <algorithm> 9 #include <algorithm>
8 #include <cstring> 10 #include <cstring>
9 11
10 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
11 #include "base/logging.h" 13 #include "base/logging.h"
12 #include "base/sequenced_task_runner.h" 14 #include "base/sequenced_task_runner.h"
13 #include "components/drive/drive.pb.h" 15 #include "components/drive/drive.pb.h"
14 #include "components/drive/file_system_interface.h" 16 #include "components/drive/file_system_interface.h"
15 #include "components/drive/local_file_reader.h" 17 #include "components/drive/local_file_reader.h"
16 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
(...skipping 13 matching lines...) Expand all
30 } 32 }
31 33
32 // Computes the concrete |start| offset and the |length| of |range| in a file 34 // Computes the concrete |start| offset and the |length| of |range| in a file
33 // of |total| size. 35 // of |total| size.
34 // 36 //
35 // This is a thin wrapper of HttpByteRange::ComputeBounds, extended to allow 37 // This is a thin wrapper of HttpByteRange::ComputeBounds, extended to allow
36 // an empty range at the end of the file, like "Range: bytes 0-" on a zero byte 38 // an empty range at the end of the file, like "Range: bytes 0-" on a zero byte
37 // file. This is for convenience in unifying implementation with the seek 39 // file. This is for convenience in unifying implementation with the seek
38 // operation of stream reader. HTTP doesn't allow such ranges but we want to 40 // operation of stream reader. HTTP doesn't allow such ranges but we want to
39 // treat such seeking as valid. 41 // treat such seeking as valid.
40 bool ComputeConcretePosition(net::HttpByteRange range, int64 total, 42 bool ComputeConcretePosition(net::HttpByteRange range,
41 int64* start, int64* length) { 43 int64_t total,
44 int64_t* start,
45 int64_t* length) {
42 // The special case when empty range in the end of the file is selected. 46 // The special case when empty range in the end of the file is selected.
43 if (range.HasFirstBytePosition() && range.first_byte_position() == total) { 47 if (range.HasFirstBytePosition() && range.first_byte_position() == total) {
44 *start = range.first_byte_position(); 48 *start = range.first_byte_position();
45 *length = 0; 49 *length = 0;
46 return true; 50 return true;
47 } 51 }
48 52
49 // Otherwise forward to HttpByteRange::ComputeBounds. 53 // Otherwise forward to HttpByteRange::ComputeBounds.
50 if (!range.ComputeBounds(total)) 54 if (!range.ComputeBounds(total))
51 return false; 55 return false;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 89
86 // Consume the copied data. 90 // Consume the copied data.
87 pending_data->erase(pending_data->begin(), pending_data->begin() + index); 91 pending_data->erase(pending_data->begin(), pending_data->begin() + index);
88 92
89 return offset; 93 return offset;
90 } 94 }
91 95
92 } // namespace 96 } // namespace
93 97
94 LocalReaderProxy::LocalReaderProxy( 98 LocalReaderProxy::LocalReaderProxy(
95 scoped_ptr<util::LocalFileReader> file_reader, int64 length) 99 scoped_ptr<util::LocalFileReader> file_reader,
100 int64_t length)
96 : file_reader_(file_reader.Pass()), 101 : file_reader_(file_reader.Pass()),
97 remaining_length_(length), 102 remaining_length_(length),
98 weak_ptr_factory_(this) { 103 weak_ptr_factory_(this) {
99 DCHECK(file_reader_); 104 DCHECK(file_reader_);
100 } 105 }
101 106
102 LocalReaderProxy::~LocalReaderProxy() { 107 LocalReaderProxy::~LocalReaderProxy() {
103 } 108 }
104 109
105 int LocalReaderProxy::Read(net::IOBuffer* buffer, int buffer_length, 110 int LocalReaderProxy::Read(net::IOBuffer* buffer, int buffer_length,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 // |read_result| bytes data is read. 146 // |read_result| bytes data is read.
142 DCHECK_LE(read_result, remaining_length_); 147 DCHECK_LE(read_result, remaining_length_);
143 remaining_length_ -= read_result; 148 remaining_length_ -= read_result;
144 } else { 149 } else {
145 // An error occurs. Close the |file_reader_|. 150 // An error occurs. Close the |file_reader_|.
146 file_reader_.reset(); 151 file_reader_.reset();
147 } 152 }
148 callback.Run(read_result); 153 callback.Run(read_result);
149 } 154 }
150 155
151 NetworkReaderProxy::NetworkReaderProxy( 156 NetworkReaderProxy::NetworkReaderProxy(int64_t offset,
152 int64 offset, 157 int64_t content_length,
153 int64 content_length, 158 int64_t full_content_length,
154 int64 full_content_length, 159 const base::Closure& job_canceller)
155 const base::Closure& job_canceller)
156 : remaining_offset_(offset), 160 : remaining_offset_(offset),
157 remaining_content_length_(content_length), 161 remaining_content_length_(content_length),
158 is_full_download_(offset + content_length == full_content_length), 162 is_full_download_(offset + content_length == full_content_length),
159 error_code_(net::OK), 163 error_code_(net::OK),
160 buffer_length_(0), 164 buffer_length_(0),
161 job_canceller_(job_canceller) { 165 job_canceller_(job_canceller) {}
162 }
163 166
164 NetworkReaderProxy::~NetworkReaderProxy() { 167 NetworkReaderProxy::~NetworkReaderProxy() {
165 if (!job_canceller_.is_null()) { 168 if (!job_canceller_.is_null()) {
166 job_canceller_.Run(); 169 job_canceller_.Run();
167 } 170 }
168 } 171 }
169 172
170 int NetworkReaderProxy::Read(net::IOBuffer* buffer, int buffer_length, 173 int NetworkReaderProxy::Read(net::IOBuffer* buffer, int buffer_length,
171 const net::CompletionCallback& callback) { 174 const net::CompletionCallback& callback) {
172 DCHECK(thread_checker_.CalledOnValidThread()); 175 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 if (is_full_download_ && remaining_content_length_ == 0) 215 if (is_full_download_ && remaining_content_length_ == 0)
213 job_canceller_.Reset(); 216 job_canceller_.Reset();
214 217
215 return result; 218 return result;
216 } 219 }
217 220
218 void NetworkReaderProxy::OnGetContent(scoped_ptr<std::string> data) { 221 void NetworkReaderProxy::OnGetContent(scoped_ptr<std::string> data) {
219 DCHECK(thread_checker_.CalledOnValidThread()); 222 DCHECK(thread_checker_.CalledOnValidThread());
220 DCHECK(data && !data->empty()); 223 DCHECK(data && !data->empty());
221 224
222 if (remaining_offset_ >= static_cast<int64>(data->length())) { 225 if (remaining_offset_ >= static_cast<int64_t>(data->length())) {
223 // Skip unneeded leading data. 226 // Skip unneeded leading data.
224 remaining_offset_ -= data->length(); 227 remaining_offset_ -= data->length();
225 return; 228 return;
226 } 229 }
227 230
228 if (remaining_offset_ > 0) { 231 if (remaining_offset_ > 0) {
229 // Erase unnecessary leading bytes. 232 // Erase unnecessary leading bytes.
230 data->erase(0, static_cast<size_t>(remaining_offset_)); 233 data->erase(0, static_cast<size_t>(remaining_offset_));
231 remaining_offset_ = 0; 234 remaining_offset_ = 0;
232 } 235 }
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 DCHECK(thread_checker_.CalledOnValidThread()); 392 DCHECK(thread_checker_.CalledOnValidThread());
390 // StoreCancelDownloadClosure() should be called before this function. 393 // StoreCancelDownloadClosure() should be called before this function.
391 DCHECK(!cancel_download_closure_.is_null()); 394 DCHECK(!cancel_download_closure_.is_null());
392 395
393 if (error != FILE_ERROR_OK) { 396 if (error != FILE_ERROR_OK) {
394 callback.Run(FileErrorToNetError(error), scoped_ptr<ResourceEntry>()); 397 callback.Run(FileErrorToNetError(error), scoped_ptr<ResourceEntry>());
395 return; 398 return;
396 } 399 }
397 DCHECK(entry); 400 DCHECK(entry);
398 401
399 int64 range_start = 0, range_length = 0; 402 int64_t range_start = 0, range_length = 0;
400 if (!ComputeConcretePosition(byte_range, entry->file_info().size(), 403 if (!ComputeConcretePosition(byte_range, entry->file_info().size(),
401 &range_start, &range_length)) { 404 &range_start, &range_length)) {
402 // If |byte_range| is invalid (e.g. out of bounds), return with an error. 405 // If |byte_range| is invalid (e.g. out of bounds), return with an error.
403 // At the same time, we cancel the in-flight downloading operation if 406 // At the same time, we cancel the in-flight downloading operation if
404 // needed and and invalidate weak pointers so that we won't 407 // needed and and invalidate weak pointers so that we won't
405 // receive unwanted callbacks. 408 // receive unwanted callbacks.
406 cancel_download_closure_.Run(); 409 cancel_download_closure_.Run();
407 weak_ptr_factory_.InvalidateWeakPtrs(); 410 weak_ptr_factory_.InvalidateWeakPtrs();
408 callback.Run( 411 callback.Run(
409 net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, scoped_ptr<ResourceEntry>()); 412 net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, scoped_ptr<ResourceEntry>());
(...skipping 20 matching lines...) Expand all
430 base::Bind( 433 base::Bind(
431 &DriveFileStreamReader::InitializeAfterLocalFileOpen, 434 &DriveFileStreamReader::InitializeAfterLocalFileOpen,
432 weak_ptr_factory_.GetWeakPtr(), 435 weak_ptr_factory_.GetWeakPtr(),
433 range_length, 436 range_length,
434 callback, 437 callback,
435 base::Passed(&entry), 438 base::Passed(&entry),
436 base::Passed(&file_reader))); 439 base::Passed(&file_reader)));
437 } 440 }
438 441
439 void DriveFileStreamReader::InitializeAfterLocalFileOpen( 442 void DriveFileStreamReader::InitializeAfterLocalFileOpen(
440 int64 length, 443 int64_t length,
441 const InitializeCompletionCallback& callback, 444 const InitializeCompletionCallback& callback,
442 scoped_ptr<ResourceEntry> entry, 445 scoped_ptr<ResourceEntry> entry,
443 scoped_ptr<util::LocalFileReader> file_reader, 446 scoped_ptr<util::LocalFileReader> file_reader,
444 int open_result) { 447 int open_result) {
445 DCHECK(thread_checker_.CalledOnValidThread()); 448 DCHECK(thread_checker_.CalledOnValidThread());
446 449
447 if (open_result != net::OK) { 450 if (open_result != net::OK) {
448 callback.Run(net::ERR_FAILED, scoped_ptr<ResourceEntry>()); 451 callback.Run(net::ERR_FAILED, scoped_ptr<ResourceEntry>());
449 return; 452 return;
450 } 453 }
(...skipping 29 matching lines...) Expand all
480 // Note: due to the same reason, LocalReaderProxy::OnCompleted may 483 // Note: due to the same reason, LocalReaderProxy::OnCompleted may
481 // or may not be called. This is timing issue, and it is difficult to avoid 484 // or may not be called. This is timing issue, and it is difficult to avoid
482 // unfortunately. 485 // unfortunately.
483 if (error != FILE_ERROR_OK) { 486 if (error != FILE_ERROR_OK) {
484 callback.Run(FileErrorToNetError(error), scoped_ptr<ResourceEntry>()); 487 callback.Run(FileErrorToNetError(error), scoped_ptr<ResourceEntry>());
485 } 488 }
486 } 489 }
487 } 490 }
488 491
489 } // namespace drive 492 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698