Index: content/browser/download/download_item_impl.cc |
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc |
index 9d8e9f08d59b08ac87f92529e8f4aef497e76cb7..98b7f3eb390faeeabf87464ab54b9dd1ec5c0487 100644 |
--- a/content/browser/download/download_item_impl.cc |
+++ b/content/browser/download/download_item_impl.cc |
@@ -280,12 +280,12 @@ void DownloadItemImpl::UpdateObservers() { |
void DownloadItemImpl::ValidateDangerousDownload() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- DCHECK_EQ(IN_PROGRESS, GetState()); |
+ DCHECK(!IsDone()); |
DCHECK(IsDangerous()); |
VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); |
- if (GetState() != IN_PROGRESS) |
+ if (IsDone() || !IsDangerous()) |
return; |
RecordDangerousDownloadAccept(GetDangerType()); |
@@ -423,7 +423,7 @@ void DownloadItemImpl::Remove() { |
void DownloadItemImpl::OpenDownload() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- if (state_ == IN_PROGRESS_INTERNAL) { |
+ if (!IsDone()) { |
// We don't honor the open_when_complete_ flag for temporary |
// downloads. Don't set it because it shows up in the UI. |
if (!IsTemporary()) |
@@ -493,13 +493,27 @@ bool DownloadItemImpl::CanResume() const { |
resume_mode == RESUME_MODE_USER_CONTINUE); |
} |
-// TODO(rdsmith): Figure out whether or not we want this probe routine |
-// to consider interrupted (resumably) downloads partial downloads. |
-// Conceptually the answer is probably yes, but everywhere that currently |
-// uses the routine is using it as a synonym for IsInProgress(). |
-bool DownloadItemImpl::IsPartialDownload() const { |
- DownloadState state = InternalToExternalState(state_); |
- return (state == IN_PROGRESS); |
+bool DownloadItemImpl::IsDone() const { |
+ switch (state_) { |
+ case IN_PROGRESS_INTERNAL: |
+ case COMPLETING_INTERNAL: |
+ return false; |
+ |
+ case COMPLETE_INTERNAL: |
+ case CANCELLED_INTERNAL: |
+ return true; |
+ |
+ case INTERRUPTED_INTERNAL: |
+ return !CanResume(); |
+ |
+ case RESUMING_INTERNAL: |
+ return false; |
+ |
+ case MAX_DOWNLOAD_INTERNAL_STATE: |
+ break; |
+ } |
+ NOTREACHED(); |
+ return true; |
} |
bool DownloadItemImpl::IsInProgress() const { |
@@ -689,8 +703,8 @@ bool DownloadItemImpl::CanOpenDownload() { |
// We can open the file or mark it for opening on completion if the download |
// is expected to complete successfully. Exclude temporary downloads, since |
// they aren't owned by the download system. |
- return (IsInProgress() || IsComplete()) && !IsTemporary() && |
- !file_externally_removed_; |
+ return (!IsDone() || IsComplete()) && !IsTemporary() && |
+ !file_externally_removed_; |
} |
bool DownloadItemImpl::ShouldOpenFileBasedOnExtension() { |