| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/gdata/gdata_uploader.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_uploader.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 // Retry opening this file if we failed before. File open can fail because | 160 // Retry opening this file if we failed before. File open can fail because |
| 161 // the downloads system sets the full path on the UI thread and schedules a | 161 // the downloads system sets the full path on the UI thread and schedules a |
| 162 // rename on the FILE thread. Thus the new path is visible on the UI thread | 162 // rename on the FILE thread. Thus the new path is visible on the UI thread |
| 163 // before the renamed file is available on the file system. | 163 // before the renamed file is available on the file system. |
| 164 if (upload_file_info->should_retry_file_open) { | 164 if (upload_file_info->should_retry_file_open) { |
| 165 DCHECK(!download->IsComplete()); | 165 DCHECK(!download->IsComplete()); |
| 166 // Disallow further retries. | 166 // Disallow further retries. |
| 167 upload_file_info->should_retry_file_open = false; | 167 upload_file_info->should_retry_file_open = false; |
| 168 OpenFile(upload_file_info); | 168 OpenFile(upload_file_info); |
| 169 } | 169 } |
| 170 | |
| 171 if (download->IsComplete()) | |
| 172 MoveFileToCache(upload_file_info); | |
| 173 } | 170 } |
| 174 | 171 |
| 175 int64 GDataUploader::GetUploadedBytes(int upload_id) const { | 172 int64 GDataUploader::GetUploadedBytes(int upload_id) const { |
| 176 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 177 UploadFileInfo* upload_info = GetUploadFileInfo(upload_id); | 174 UploadFileInfo* upload_info = GetUploadFileInfo(upload_id); |
| 178 // We return the start_range as the count of uploaded bytes since that is the | 175 // We return the start_range as the count of uploaded bytes since that is the |
| 179 // start of the next or currently uploading chunk. | 176 // start of the next or currently uploading chunk. |
| 180 // TODO(asanka): Use a finer grained progress value than this. We end up | 177 // TODO(asanka): Use a finer grained progress value than this. We end up |
| 181 // reporting progress in kUploadChunkSize increments. | 178 // reporting progress in kUploadChunkSize increments. |
| 182 return upload_info ? upload_info->start_range : 0; | 179 return upload_info ? upload_info->start_range : 0; |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 } | 476 } |
| 480 | 477 |
| 481 DVLOG(1) << "Received range " << response.start_range_received | 478 DVLOG(1) << "Received range " << response.start_range_received |
| 482 << "-" << response.end_range_received | 479 << "-" << response.end_range_received |
| 483 << " for [" << upload_file_info->title << "]"; | 480 << " for [" << upload_file_info->title << "]"; |
| 484 | 481 |
| 485 // Continue uploading. | 482 // Continue uploading. |
| 486 UploadNextChunk(upload_file_info); | 483 UploadNextChunk(upload_file_info); |
| 487 } | 484 } |
| 488 | 485 |
| 489 void GDataUploader::MoveFileToCache(UploadFileInfo* upload_file_info) { | |
| 490 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
| 491 if (upload_file_info->entry == NULL) | |
| 492 return; | |
| 493 | |
| 494 // Remove |upload_id| from the UploadFileInfoMap. The UploadFileInfo object | |
| 495 // will be deleted upon completion of AddUploadedFile. | |
| 496 RemoveUpload(upload_file_info->upload_id); | |
| 497 | |
| 498 DVLOG(1) << "MoveFileToCache " << upload_file_info->file_path.value(); | |
| 499 file_system_->AddUploadedFile( | |
| 500 UPLOAD_NEW_FILE, | |
| 501 upload_file_info->gdata_path.DirName(), | |
| 502 upload_file_info->entry.get(), | |
| 503 upload_file_info->file_path, | |
| 504 GDataCache::FILE_OPERATION_MOVE, | |
| 505 base::Bind(&base::DeletePointer<UploadFileInfo>, | |
| 506 upload_file_info)); | |
| 507 } | |
| 508 | |
| 509 void GDataUploader::UploadFailed(scoped_ptr<UploadFileInfo> upload_file_info, | 486 void GDataUploader::UploadFailed(scoped_ptr<UploadFileInfo> upload_file_info, |
| 510 base::PlatformFileError error) { | 487 base::PlatformFileError error) { |
| 511 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 488 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 512 | 489 |
| 513 RemoveUpload(upload_file_info->upload_id); | 490 RemoveUpload(upload_file_info->upload_id); |
| 514 | 491 |
| 515 LOG(ERROR) << "Upload failed " << upload_file_info->DebugString(); | 492 LOG(ERROR) << "Upload failed " << upload_file_info->DebugString(); |
| 516 // This is subtle but we should take the callback reference before | 493 // This is subtle but we should take the callback reference before |
| 517 // calling upload_file_info.Pass(). Otherwise, it'll crash. | 494 // calling upload_file_info.Pass(). Otherwise, it'll crash. |
| 518 const UploadFileInfo::UploadCompletionCallback& callback = | 495 const UploadFileInfo::UploadCompletionCallback& callback = |
| 519 upload_file_info->completion_callback; | 496 upload_file_info->completion_callback; |
| 520 if (!callback.is_null()) | 497 if (!callback.is_null()) |
| 521 callback.Run(error, upload_file_info.Pass()); | 498 callback.Run(error, upload_file_info.Pass()); |
| 522 } | 499 } |
| 523 | 500 |
| 524 void GDataUploader::RemoveUpload(int upload_id) { | 501 void GDataUploader::RemoveUpload(int upload_id) { |
| 525 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 502 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 526 pending_uploads_.erase(upload_id); | 503 pending_uploads_.erase(upload_id); |
| 527 } | 504 } |
| 528 | 505 |
| 529 } // namespace gdata | 506 } // namespace gdata |
| OLD | NEW |