| 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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 } | 273 } |
| 274 | 274 |
| 275 void DownloadItemImpl::UpdateObservers() { | 275 void DownloadItemImpl::UpdateObservers() { |
| 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 277 | 277 |
| 278 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadUpdated(this)); | 278 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadUpdated(this)); |
| 279 } | 279 } |
| 280 | 280 |
| 281 void DownloadItemImpl::ValidateDangerousDownload() { | 281 void DownloadItemImpl::ValidateDangerousDownload() { |
| 282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 283 DCHECK_EQ(IN_PROGRESS, GetState()); | 283 DCHECK(!IsDone()); |
| 284 DCHECK(IsDangerous()); | 284 DCHECK(IsDangerous()); |
| 285 | 285 |
| 286 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); | 286 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); |
| 287 | 287 |
| 288 if (GetState() != IN_PROGRESS) | 288 if (IsDone() || !IsDangerous()) |
| 289 return; | 289 return; |
| 290 | 290 |
| 291 RecordDangerousDownloadAccept(GetDangerType()); | 291 RecordDangerousDownloadAccept(GetDangerType()); |
| 292 | 292 |
| 293 danger_type_ = DOWNLOAD_DANGER_TYPE_USER_VALIDATED; | 293 danger_type_ = DOWNLOAD_DANGER_TYPE_USER_VALIDATED; |
| 294 | 294 |
| 295 bound_net_log_.AddEvent( | 295 bound_net_log_.AddEvent( |
| 296 net::NetLog::TYPE_DOWNLOAD_ITEM_SAFETY_STATE_UPDATED, | 296 net::NetLog::TYPE_DOWNLOAD_ITEM_SAFETY_STATE_UPDATED, |
| 297 base::Bind(&ItemCheckedNetLogCallback, GetDangerType())); | 297 base::Bind(&ItemCheckedNetLogCallback, GetDangerType())); |
| 298 | 298 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 delegate_->AssertStateConsistent(this); | 416 delegate_->AssertStateConsistent(this); |
| 417 | 417 |
| 418 NotifyRemoved(); | 418 NotifyRemoved(); |
| 419 delegate_->DownloadRemoved(this); | 419 delegate_->DownloadRemoved(this); |
| 420 // We have now been deleted. | 420 // We have now been deleted. |
| 421 } | 421 } |
| 422 | 422 |
| 423 void DownloadItemImpl::OpenDownload() { | 423 void DownloadItemImpl::OpenDownload() { |
| 424 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 424 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 425 | 425 |
| 426 if (state_ == IN_PROGRESS_INTERNAL) { | 426 if (!IsDone()) { |
| 427 // We don't honor the open_when_complete_ flag for temporary | 427 // We don't honor the open_when_complete_ flag for temporary |
| 428 // downloads. Don't set it because it shows up in the UI. | 428 // downloads. Don't set it because it shows up in the UI. |
| 429 if (!IsTemporary()) | 429 if (!IsTemporary()) |
| 430 open_when_complete_ = !open_when_complete_; | 430 open_when_complete_ = !open_when_complete_; |
| 431 return; | 431 return; |
| 432 } | 432 } |
| 433 | 433 |
| 434 if (state_ != COMPLETE_INTERNAL || file_externally_removed_) | 434 if (state_ != COMPLETE_INTERNAL || file_externally_removed_) |
| 435 return; | 435 return; |
| 436 | 436 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 // isn't currently the case. See ResumeInterruptedDownload(). | 486 // isn't currently the case. See ResumeInterruptedDownload(). |
| 487 if (!GetWebContents()) | 487 if (!GetWebContents()) |
| 488 return false; | 488 return false; |
| 489 | 489 |
| 490 ResumeMode resume_mode = GetResumeMode(); | 490 ResumeMode resume_mode = GetResumeMode(); |
| 491 return IsDownloadResumptionEnabled() && | 491 return IsDownloadResumptionEnabled() && |
| 492 (resume_mode == RESUME_MODE_USER_RESTART || | 492 (resume_mode == RESUME_MODE_USER_RESTART || |
| 493 resume_mode == RESUME_MODE_USER_CONTINUE); | 493 resume_mode == RESUME_MODE_USER_CONTINUE); |
| 494 } | 494 } |
| 495 | 495 |
| 496 // TODO(rdsmith): Figure out whether or not we want this probe routine | 496 bool DownloadItemImpl::IsDone() const { |
| 497 // to consider interrupted (resumably) downloads partial downloads. | 497 switch (state_) { |
| 498 // Conceptually the answer is probably yes, but everywhere that currently | 498 case IN_PROGRESS_INTERNAL: |
| 499 // uses the routine is using it as a synonym for IsInProgress(). | 499 case COMPLETING_INTERNAL: |
| 500 bool DownloadItemImpl::IsPartialDownload() const { | 500 return false; |
| 501 DownloadState state = InternalToExternalState(state_); | 501 |
| 502 return (state == IN_PROGRESS); | 502 case COMPLETE_INTERNAL: |
| 503 case CANCELLED_INTERNAL: |
| 504 return true; |
| 505 |
| 506 case INTERRUPTED_INTERNAL: |
| 507 return !CanResume(); |
| 508 |
| 509 case RESUMING_INTERNAL: |
| 510 return false; |
| 511 |
| 512 case MAX_DOWNLOAD_INTERNAL_STATE: |
| 513 break; |
| 514 } |
| 515 NOTREACHED(); |
| 516 return true; |
| 503 } | 517 } |
| 504 | 518 |
| 505 bool DownloadItemImpl::IsInProgress() const { | 519 bool DownloadItemImpl::IsInProgress() const { |
| 506 return InternalToExternalState(state_) == IN_PROGRESS; | 520 return InternalToExternalState(state_) == IN_PROGRESS; |
| 507 } | 521 } |
| 508 | 522 |
| 509 bool DownloadItemImpl::IsCancelled() const { | 523 bool DownloadItemImpl::IsCancelled() const { |
| 510 return InternalToExternalState(state_) == CANCELLED; | 524 return InternalToExternalState(state_) == CANCELLED; |
| 511 } | 525 } |
| 512 | 526 |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 bool DownloadItemImpl::CanShowInFolder() { | 696 bool DownloadItemImpl::CanShowInFolder() { |
| 683 // A download can be shown in the folder if the downloaded file is in a known | 697 // A download can be shown in the folder if the downloaded file is in a known |
| 684 // location. | 698 // location. |
| 685 return CanOpenDownload() && !GetFullPath().empty(); | 699 return CanOpenDownload() && !GetFullPath().empty(); |
| 686 } | 700 } |
| 687 | 701 |
| 688 bool DownloadItemImpl::CanOpenDownload() { | 702 bool DownloadItemImpl::CanOpenDownload() { |
| 689 // We can open the file or mark it for opening on completion if the download | 703 // We can open the file or mark it for opening on completion if the download |
| 690 // is expected to complete successfully. Exclude temporary downloads, since | 704 // is expected to complete successfully. Exclude temporary downloads, since |
| 691 // they aren't owned by the download system. | 705 // they aren't owned by the download system. |
| 692 return (IsInProgress() || IsComplete()) && !IsTemporary() && | 706 return (!IsDone() || IsComplete()) && !IsTemporary() && |
| 693 !file_externally_removed_; | 707 !file_externally_removed_; |
| 694 } | 708 } |
| 695 | 709 |
| 696 bool DownloadItemImpl::ShouldOpenFileBasedOnExtension() { | 710 bool DownloadItemImpl::ShouldOpenFileBasedOnExtension() { |
| 697 return delegate_->ShouldOpenFileBasedOnExtension(GetTargetFilePath()); | 711 return delegate_->ShouldOpenFileBasedOnExtension(GetTargetFilePath()); |
| 698 } | 712 } |
| 699 | 713 |
| 700 bool DownloadItemImpl::GetOpenWhenComplete() const { | 714 bool DownloadItemImpl::GetOpenWhenComplete() const { |
| 701 return open_when_complete_; | 715 return open_when_complete_; |
| 702 } | 716 } |
| 703 | 717 |
| (...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1677 case RESUME_MODE_USER_CONTINUE: | 1691 case RESUME_MODE_USER_CONTINUE: |
| 1678 return "USER_CONTINUE"; | 1692 return "USER_CONTINUE"; |
| 1679 case RESUME_MODE_USER_RESTART: | 1693 case RESUME_MODE_USER_RESTART: |
| 1680 return "USER_RESTART"; | 1694 return "USER_RESTART"; |
| 1681 } | 1695 } |
| 1682 NOTREACHED() << "Unknown resume mode " << mode; | 1696 NOTREACHED() << "Unknown resume mode " << mode; |
| 1683 return "unknown"; | 1697 return "unknown"; |
| 1684 } | 1698 } |
| 1685 | 1699 |
| 1686 } // namespace content | 1700 } // namespace content |
| OLD | NEW |