| 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 // File method ordering: Methods in this file are in the same order as | 5 // File method ordering: Methods in this file are in the same order as |
| 6 // in download_item_impl.h, with the following exception: The public | 6 // in download_item_impl.h, with the following exception: The public |
| 7 // interface Start is placed in chronological order with the other | 7 // interface Start is placed in chronological order with the other |
| 8 // (private) routines that together define a DownloadItem's state | 8 // (private) routines that together define a DownloadItem's state |
| 9 // transitions as the download progresses. See "Download progression | 9 // transitions as the download progresses. See "Download progression |
| 10 // cascade" later in this file. | 10 // cascade" later in this file. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 62 | 62 |
| 63 // Make sure we only delete files. | 63 // Make sure we only delete files. |
| 64 if (!file_util::DirectoryExists(path)) | 64 if (!file_util::DirectoryExists(path)) |
| 65 file_util::Delete(path, false); | 65 file_util::Delete(path, false); |
| 66 } | 66 } |
| 67 | 67 |
| 68 // Wrapper around DownloadFile::Detach and DownloadFile::Cancel that | 68 // Wrapper around DownloadFile::Detach and DownloadFile::Cancel that |
| 69 // takes ownership of the DownloadFile and hence implicitly destroys it | 69 // takes ownership of the DownloadFile and hence implicitly destroys it |
| 70 // at the end of the function. | 70 // at the end of the function. |
| 71 static void DownloadFileDetach(scoped_ptr<DownloadFile> download_file) { | 71 static base::FilePath DownloadFileDetach( |
| 72 scoped_ptr<DownloadFile> download_file) { |
| 72 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 73 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 74 base::FilePath full_path = download_file->FullPath(); |
| 73 download_file->Detach(); | 75 download_file->Detach(); |
| 76 return full_path; |
| 74 } | 77 } |
| 75 | 78 |
| 76 static void DownloadFileCancel(scoped_ptr<DownloadFile> download_file) { | 79 static void DownloadFileCancel(scoped_ptr<DownloadFile> download_file) { |
| 77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 80 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 78 download_file->Cancel(); | 81 download_file->Cancel(); |
| 79 } | 82 } |
| 80 | 83 |
| 81 bool IsDownloadResumptionEnabled() { | 84 bool IsDownloadResumptionEnabled() { |
| 82 return CommandLine::ForCurrentProcess()->HasSwitch( | 85 return CommandLine::ForCurrentProcess()->HasSwitch( |
| 83 switches::kEnableDownloadResumption); | 86 switches::kEnableDownloadResumption); |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 | 271 |
| 269 observers_.RemoveObserver(observer); | 272 observers_.RemoveObserver(observer); |
| 270 } | 273 } |
| 271 | 274 |
| 272 void DownloadItemImpl::UpdateObservers() { | 275 void DownloadItemImpl::UpdateObservers() { |
| 273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 274 | 277 |
| 275 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadUpdated(this)); | 278 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadUpdated(this)); |
| 276 } | 279 } |
| 277 | 280 |
| 278 void DownloadItemImpl::DangerousDownloadValidated() { | 281 void DownloadItemImpl::ValidateDangerousDownload() { |
| 279 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 280 DCHECK_EQ(IN_PROGRESS, GetState()); | 283 DCHECK_EQ(IN_PROGRESS, GetState()); |
| 281 DCHECK(IsDangerous()); | 284 DCHECK(IsDangerous()); |
| 282 | 285 |
| 283 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); | 286 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); |
| 284 | 287 |
| 285 if (GetState() != IN_PROGRESS) | 288 if (GetState() != IN_PROGRESS) |
| 286 return; | 289 return; |
| 287 | 290 |
| 288 UMA_HISTOGRAM_ENUMERATION("Download.DangerousDownloadValidated", | 291 UMA_HISTOGRAM_ENUMERATION("Download.DangerousDownloadValidated", |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 368 |
| 366 if (state_ == IN_PROGRESS_INTERNAL) { | 369 if (state_ == IN_PROGRESS_INTERNAL) { |
| 367 // Cancel the originating URL request unless it's already been cancelled | 370 // Cancel the originating URL request unless it's already been cancelled |
| 368 // by interrupt. | 371 // by interrupt. |
| 369 request_handle_->CancelRequest(); | 372 request_handle_->CancelRequest(); |
| 370 } | 373 } |
| 371 | 374 |
| 372 TransitionTo(CANCELLED_INTERNAL); | 375 TransitionTo(CANCELLED_INTERNAL); |
| 373 } | 376 } |
| 374 | 377 |
| 375 void DownloadItemImpl::Delete(DeleteReason reason) { | 378 void DownloadItemImpl::DiscardDangerousDownload( |
| 379 DeleteReason reason, |
| 380 const AcquireFileCallback& callback) { |
| 376 VLOG(20) << __FUNCTION__ << "() download = " << DebugString(true); | 381 VLOG(20) << __FUNCTION__ << "() download = " << DebugString(true); |
| 377 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 382 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 383 DCHECK(IsDangerous()); |
| 378 | 384 |
| 379 switch (reason) { | 385 switch (reason) { |
| 380 case DELETE_DUE_TO_USER_DISCARD: | 386 case DELETE_DUE_TO_USER_DISCARD: |
| 381 UMA_HISTOGRAM_ENUMERATION( | 387 UMA_HISTOGRAM_ENUMERATION( |
| 382 "Download.UserDiscard", GetDangerType(), | 388 "Download.UserDiscard", GetDangerType(), |
| 383 DOWNLOAD_DANGER_TYPE_MAX); | 389 DOWNLOAD_DANGER_TYPE_MAX); |
| 384 break; | 390 break; |
| 385 case DELETE_DUE_TO_BROWSER_SHUTDOWN: | 391 case DELETE_DUE_TO_BROWSER_SHUTDOWN: |
| 386 UMA_HISTOGRAM_ENUMERATION( | 392 UMA_HISTOGRAM_ENUMERATION( |
| 387 "Download.Discard", GetDangerType(), | 393 "Download.Discard", GetDangerType(), |
| 388 DOWNLOAD_DANGER_TYPE_MAX); | 394 DOWNLOAD_DANGER_TYPE_MAX); |
| 389 break; | 395 break; |
| 390 default: | 396 default: |
| 391 NOTREACHED(); | 397 NOTREACHED(); |
| 392 } | 398 } |
| 393 | 399 |
| 400 if (!callback.is_null()) { |
| 401 if (download_file_) { |
| 402 BrowserThread::PostTaskAndReplyWithResult( |
| 403 BrowserThread::FILE, |
| 404 FROM_HERE, |
| 405 base::Bind(&DownloadFileDetach, base::Passed(&download_file_)), |
| 406 callback); |
| 407 } else { |
| 408 callback.Run(current_path_); |
| 409 } |
| 410 current_path_.clear(); |
| 411 } |
| 412 |
| 394 // Delete the file if it exists and is not owned by a DownloadFile object. | 413 // Delete the file if it exists and is not owned by a DownloadFile object. |
| 395 // (In the latter case the DownloadFile object will delete it on cancel.) | 414 // (In the latter case the DownloadFile object will delete it on cancel.) |
| 396 if (!current_path_.empty() && download_file_.get() == NULL) { | 415 if (!current_path_.empty() && download_file_.get() == NULL) { |
| 397 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 416 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
| 398 base::Bind(&DeleteDownloadedFile, current_path_)); | 417 base::Bind(&DeleteDownloadedFile, current_path_)); |
| 399 current_path_.clear(); | 418 current_path_.clear(); |
| 400 } | 419 } |
| 401 Remove(); | 420 Remove(); |
| 402 // We have now been deleted. | 421 // We have now been deleted. |
| 403 } | 422 } |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1398 | 1417 |
| 1399 if (destroy_file) { | 1418 if (destroy_file) { |
| 1400 BrowserThread::PostTask( | 1419 BrowserThread::PostTask( |
| 1401 BrowserThread::FILE, FROM_HERE, | 1420 BrowserThread::FILE, FROM_HERE, |
| 1402 // Will be deleted at end of task execution. | 1421 // Will be deleted at end of task execution. |
| 1403 base::Bind(&DownloadFileCancel, base::Passed(&download_file_))); | 1422 base::Bind(&DownloadFileCancel, base::Passed(&download_file_))); |
| 1404 // Avoid attempting to reuse the intermediate file by clearing out | 1423 // Avoid attempting to reuse the intermediate file by clearing out |
| 1405 // current_path_. | 1424 // current_path_. |
| 1406 current_path_.clear(); | 1425 current_path_.clear(); |
| 1407 } else { | 1426 } else { |
| 1408 BrowserThread::PostTask( | 1427 BrowserThread::PostTask(BrowserThread::FILE, |
| 1409 BrowserThread::FILE, FROM_HERE, | 1428 FROM_HERE, |
| 1410 // Will be deleted at end of task execution. | 1429 // Will be deleted at end of task execution. |
| 1411 base::Bind(&DownloadFileDetach, base::Passed(&download_file_))); | 1430 base::Bind(base::IgnoreResult(&DownloadFileDetach), |
| 1431 base::Passed(&download_file_))); |
| 1412 } | 1432 } |
| 1413 // Don't accept any more messages from the DownloadFile, and null | 1433 // Don't accept any more messages from the DownloadFile, and null |
| 1414 // out any previous "all data received". This also breaks links to | 1434 // out any previous "all data received". This also breaks links to |
| 1415 // other entities we've given out weak pointers to. | 1435 // other entities we've given out weak pointers to. |
| 1416 weak_ptr_factory_.InvalidateWeakPtrs(); | 1436 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 1417 } | 1437 } |
| 1418 | 1438 |
| 1419 bool DownloadItemImpl::IsDownloadReadyForCompletion( | 1439 bool DownloadItemImpl::IsDownloadReadyForCompletion( |
| 1420 const base::Closure& state_change_notification) { | 1440 const base::Closure& state_change_notification) { |
| 1421 // If we don't have all the data, the download is not ready for | 1441 // If we don't have all the data, the download is not ready for |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1685 case RESUME_MODE_USER_CONTINUE: | 1705 case RESUME_MODE_USER_CONTINUE: |
| 1686 return "USER_CONTINUE"; | 1706 return "USER_CONTINUE"; |
| 1687 case RESUME_MODE_USER_RESTART: | 1707 case RESUME_MODE_USER_RESTART: |
| 1688 return "USER_RESTART"; | 1708 return "USER_RESTART"; |
| 1689 } | 1709 } |
| 1690 NOTREACHED() << "Unknown resume mode " << mode; | 1710 NOTREACHED() << "Unknown resume mode " << mode; |
| 1691 return "unknown"; | 1711 return "unknown"; |
| 1692 } | 1712 } |
| 1693 | 1713 |
| 1694 } // namespace content | 1714 } // namespace content |
| OLD | NEW |