| 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #include "content/browser/download/save_file_manager.h" | 7 #include "content/browser/download/save_file_manager.h" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 const Referrer& referrer, | 67 const Referrer& referrer, |
| 68 int render_process_host_id, | 68 int render_process_host_id, |
| 69 int render_view_routing_id, | 69 int render_view_routing_id, |
| 70 int render_frame_routing_id, | 70 int render_frame_routing_id, |
| 71 SaveFileCreateInfo::SaveFileSource save_source, | 71 SaveFileCreateInfo::SaveFileSource save_source, |
| 72 const base::FilePath& file_full_path, | 72 const base::FilePath& file_full_path, |
| 73 ResourceContext* context, | 73 ResourceContext* context, |
| 74 SavePackage* save_package) { | 74 SavePackage* save_package) { |
| 75 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 75 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 76 | 76 |
| 77 // Insert started saving job to tracking list. |
| 78 DCHECK(packages_.find(save_item_id) == packages_.end()); |
| 79 packages_[save_item_id] = save_package; |
| 80 |
| 77 // Register a saving job. | 81 // Register a saving job. |
| 78 if (save_source == SaveFileCreateInfo::SAVE_FILE_FROM_NET) { | 82 if (save_source == SaveFileCreateInfo::SAVE_FILE_FROM_NET) { |
| 79 DCHECK(url.is_valid()); | 83 DCHECK(url.is_valid()); |
| 80 | 84 |
| 81 BrowserThread::PostTask( | 85 BrowserThread::PostTask( |
| 82 BrowserThread::IO, FROM_HERE, | 86 BrowserThread::IO, FROM_HERE, |
| 83 base::Bind(&SaveFileManager::OnSaveURL, this, url, referrer, | 87 base::Bind(&SaveFileManager::OnSaveURL, this, url, referrer, |
| 84 save_item_id, save_package->id(), render_process_host_id, | 88 save_item_id, save_package->id(), render_process_host_id, |
| 85 render_view_routing_id, render_frame_routing_id, context)); | 89 render_view_routing_id, render_frame_routing_id, context)); |
| 86 } else { | 90 } else { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 // The IO thread will call this when saving is completed or it got error when | 198 // The IO thread will call this when saving is completed or it got error when |
| 195 // fetching data. We forward the message to OnSaveFinished in UI thread. | 199 // fetching data. We forward the message to OnSaveFinished in UI thread. |
| 196 void SaveFileManager::SaveFinished(SaveItemId save_item_id, | 200 void SaveFileManager::SaveFinished(SaveItemId save_item_id, |
| 197 SavePackageId save_package_id, | 201 SavePackageId save_package_id, |
| 198 bool is_success) { | 202 bool is_success) { |
| 199 DVLOG(20) << " " << __FUNCTION__ << "()" | 203 DVLOG(20) << " " << __FUNCTION__ << "()" |
| 200 << " save_item_id = " << save_item_id | 204 << " save_item_id = " << save_item_id |
| 201 << " save_package_id = " << save_package_id | 205 << " save_package_id = " << save_package_id |
| 202 << " is_success = " << is_success; | 206 << " is_success = " << is_success; |
| 203 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 207 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 208 |
| 209 int64_t bytes_so_far; |
| 204 SaveFile* save_file = LookupSaveFile(save_item_id); | 210 SaveFile* save_file = LookupSaveFile(save_item_id); |
| 205 if (save_file != nullptr) { | 211 if (save_file != nullptr) { |
| 206 DCHECK(save_file->InProgress()); | 212 DCHECK(save_file->InProgress()); |
| 207 DVLOG(20) << " " << __FUNCTION__ << "()" | 213 DVLOG(20) << " " << __FUNCTION__ << "()" |
| 208 << " save_file = " << save_file->DebugString(); | 214 << " save_file = " << save_file->DebugString(); |
| 209 BrowserThread::PostTask( | 215 bytes_so_far = save_file->BytesSoFar(); |
| 210 BrowserThread::UI, FROM_HERE, | |
| 211 base::Bind(&SaveFileManager::OnSaveFinished, this, save_item_id, | |
| 212 save_file->BytesSoFar(), is_success)); | |
| 213 | |
| 214 save_file->Finish(); | 216 save_file->Finish(); |
| 215 save_file->Detach(); | 217 save_file->Detach(); |
| 218 } else { |
| 219 // We got called before StartSave - this should only happen if |
| 220 // ResourceHandler failed before it got a chance to parse headers |
| 221 // and metadata. |
| 222 DCHECK(!is_success); |
| 223 |
| 224 bytes_so_far = 0; |
| 216 } | 225 } |
| 226 |
| 227 BrowserThread::PostTask( |
| 228 BrowserThread::UI, FROM_HERE, |
| 229 base::Bind(&SaveFileManager::OnSaveFinished, this, save_item_id, |
| 230 bytes_so_far, is_success)); |
| 217 } | 231 } |
| 218 | 232 |
| 219 // Notifications sent from the file thread and run on the UI thread. | 233 // Notifications sent from the file thread and run on the UI thread. |
| 220 | 234 |
| 221 void SaveFileManager::OnStartSave(const SaveFileCreateInfo& info) { | 235 void SaveFileManager::OnStartSave(const SaveFileCreateInfo& info) { |
| 222 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 236 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 223 SavePackage* save_package = GetSavePackageFromRenderIds( | 237 SavePackage* save_package = GetSavePackageFromRenderIds( |
| 224 info.render_process_id, info.render_frame_routing_id); | 238 info.render_process_id, info.render_frame_routing_id); |
| 225 if (!save_package) { | 239 if (!save_package) { |
| 226 // Cancel this request. | 240 // Cancel this request. |
| 227 SendCancelRequest(info.save_item_id); | 241 SendCancelRequest(info.save_item_id); |
| 228 return; | 242 return; |
| 229 } | 243 } |
| 230 | 244 |
| 231 // Insert started saving job to tracking list. | |
| 232 DCHECK(packages_.find(info.save_item_id) == packages_.end()); | |
| 233 packages_[info.save_item_id] = save_package; | |
| 234 | |
| 235 // Forward this message to SavePackage. | 245 // Forward this message to SavePackage. |
| 236 save_package->StartSave(&info); | 246 save_package->StartSave(&info); |
| 237 } | 247 } |
| 238 | 248 |
| 239 void SaveFileManager::OnUpdateSaveProgress(SaveItemId save_item_id, | 249 void SaveFileManager::OnUpdateSaveProgress(SaveItemId save_item_id, |
| 240 int64_t bytes_so_far, | 250 int64_t bytes_so_far, |
| 241 bool write_success) { | 251 bool write_success) { |
| 242 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 252 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 243 SavePackage* package = LookupPackage(save_item_id); | 253 SavePackage* package = LookupPackage(save_item_id); |
| 244 if (package) | 254 if (package) |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 SaveFile* save_file = it->second; | 421 SaveFile* save_file = it->second; |
| 412 DCHECK(!save_file->InProgress()); | 422 DCHECK(!save_file->InProgress()); |
| 413 base::DeleteFile(save_file->FullPath(), false); | 423 base::DeleteFile(save_file->FullPath(), false); |
| 414 delete save_file; | 424 delete save_file; |
| 415 save_file_map_.erase(it); | 425 save_file_map_.erase(it); |
| 416 } | 426 } |
| 417 } | 427 } |
| 418 } | 428 } |
| 419 | 429 |
| 420 } // namespace content | 430 } // namespace content |
| OLD | NEW |