| OLD | NEW | 
|---|
| 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 <algorithm> | 7 #include <algorithm> | 
| 8 #include <cstring> | 8 #include <cstring> | 
| 9 | 9 | 
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" | 
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 136 NetworkReaderProxy::~NetworkReaderProxy() { | 136 NetworkReaderProxy::~NetworkReaderProxy() { | 
| 137   if (!job_canceller_.is_null()) { | 137   if (!job_canceller_.is_null()) { | 
| 138     job_canceller_.Run(); | 138     job_canceller_.Run(); | 
| 139   } | 139   } | 
| 140 } | 140 } | 
| 141 | 141 | 
| 142 int NetworkReaderProxy::Read(net::IOBuffer* buffer, int buffer_length, | 142 int NetworkReaderProxy::Read(net::IOBuffer* buffer, int buffer_length, | 
| 143                              const net::CompletionCallback& callback) { | 143                              const net::CompletionCallback& callback) { | 
| 144   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 144   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 
| 145   // Check if there is no pending Read operation. | 145   // Check if there is no pending Read operation. | 
| 146   DCHECK(!buffer_); | 146   DCHECK(!buffer_.get()); | 
| 147   DCHECK_EQ(buffer_length_, 0); | 147   DCHECK_EQ(buffer_length_, 0); | 
| 148   DCHECK(callback_.is_null()); | 148   DCHECK(callback_.is_null()); | 
| 149   // Validate the arguments. | 149   // Validate the arguments. | 
| 150   DCHECK(buffer); | 150   DCHECK(buffer); | 
| 151   DCHECK_GT(buffer_length, 0); | 151   DCHECK_GT(buffer_length, 0); | 
| 152   DCHECK(!callback.is_null()); | 152   DCHECK(!callback.is_null()); | 
| 153 | 153 | 
| 154   if (error_code_ != net::OK) { | 154   if (error_code_ != net::OK) { | 
| 155     // An error is already found. Return it immediately. | 155     // An error is already found. Return it immediately. | 
| 156     return error_code_; | 156     return error_code_; | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 190     return; | 190     return; | 
| 191   } | 191   } | 
| 192 | 192 | 
| 193   if (remaining_offset_ > 0) { | 193   if (remaining_offset_ > 0) { | 
| 194     // Erase unnecessary leading bytes. | 194     // Erase unnecessary leading bytes. | 
| 195     data->erase(0, static_cast<size_t>(remaining_offset_)); | 195     data->erase(0, static_cast<size_t>(remaining_offset_)); | 
| 196     remaining_offset_ = 0; | 196     remaining_offset_ = 0; | 
| 197   } | 197   } | 
| 198 | 198 | 
| 199   pending_data_.push_back(data.release()); | 199   pending_data_.push_back(data.release()); | 
| 200   if (!buffer_) { | 200   if (!buffer_.get()) { | 
| 201     // No pending Read operation. | 201     // No pending Read operation. | 
| 202     return; | 202     return; | 
| 203   } | 203   } | 
| 204 | 204 | 
| 205   int result = ReadInternal(&pending_data_, buffer_.get(), buffer_length_); | 205   int result = ReadInternal(&pending_data_, buffer_.get(), buffer_length_); | 
| 206   remaining_content_length_ -= result; | 206   remaining_content_length_ -= result; | 
| 207   DCHECK_GE(remaining_content_length_, 0); | 207   DCHECK_GE(remaining_content_length_, 0); | 
| 208 | 208 | 
| 209   buffer_ = NULL; | 209   buffer_ = NULL; | 
| 210   buffer_length_ = 0; | 210   buffer_length_ = 0; | 
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 373         new internal::NetworkReaderProxy( | 373         new internal::NetworkReaderProxy( | 
| 374             byte_range.first_byte_position(), range_length, | 374             byte_range.first_byte_position(), range_length, | 
| 375             base::Bind(&google_apis::RunTaskOnUIThread, | 375             base::Bind(&google_apis::RunTaskOnUIThread, | 
| 376                        ui_cancel_download_closure))); | 376                        ui_cancel_download_closure))); | 
| 377     callback.Run(net::OK, entry.Pass()); | 377     callback.Run(net::OK, entry.Pass()); | 
| 378     return; | 378     return; | 
| 379   } | 379   } | 
| 380 | 380 | 
| 381   // Otherwise, open the stream for file. | 381   // Otherwise, open the stream for file. | 
| 382   scoped_ptr<util::LocalFileReader> file_reader( | 382   scoped_ptr<util::LocalFileReader> file_reader( | 
| 383       new util::LocalFileReader(file_task_runner_)); | 383       new util::LocalFileReader(file_task_runner_.get())); | 
| 384   util::LocalFileReader* file_reader_ptr = file_reader.get(); | 384   util::LocalFileReader* file_reader_ptr = file_reader.get(); | 
| 385   file_reader_ptr->Open( | 385   file_reader_ptr->Open( | 
| 386       local_cache_file_path, | 386       local_cache_file_path, | 
| 387       byte_range.first_byte_position(), | 387       byte_range.first_byte_position(), | 
| 388       base::Bind( | 388       base::Bind( | 
| 389           &DriveFileStreamReader::InitializeAfterLocalFileOpen, | 389           &DriveFileStreamReader::InitializeAfterLocalFileOpen, | 
| 390           weak_ptr_factory_.GetWeakPtr(), | 390           weak_ptr_factory_.GetWeakPtr(), | 
| 391           range_length, | 391           range_length, | 
| 392           callback, | 392           callback, | 
| 393           base::Passed(&entry), | 393           base::Passed(&entry), | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 437     // Note: due to the same reason, LocalReaderProxy::OnCompleted may | 437     // Note: due to the same reason, LocalReaderProxy::OnCompleted may | 
| 438     // or may not be called. This is timing issue, and it is difficult to avoid | 438     // or may not be called. This is timing issue, and it is difficult to avoid | 
| 439     // unfortunately. | 439     // unfortunately. | 
| 440     if (error != FILE_ERROR_OK) { | 440     if (error != FILE_ERROR_OK) { | 
| 441       callback.Run(FileErrorToNetError(error), scoped_ptr<ResourceEntry>()); | 441       callback.Run(FileErrorToNetError(error), scoped_ptr<ResourceEntry>()); | 
| 442     } | 442     } | 
| 443   } | 443   } | 
| 444 } | 444 } | 
| 445 | 445 | 
| 446 }  // namespace drive | 446 }  // namespace drive | 
| OLD | NEW | 
|---|