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 37ddf76e915e905d508f8cd2551007f534cc5ea7..2a2986e88bce8288a3932261c5629389d1f5fc4e 100644 |
--- a/content/browser/download/download_item_impl.cc |
+++ b/content/browser/download/download_item_impl.cc |
@@ -369,6 +369,13 @@ void DownloadItemImpl::Cancel(bool user_cancel) { |
request_handle_->CancelRequest(); |
} |
+ if ((state_ == INTERRUPTED_INTERNAL || state_ == RESUMING_INTERNAL) && |
+ !current_path_.empty() && current_path_ != target_path_) { |
+ BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
+ base::Bind(&DeleteDownloadedFile, current_path_)); |
+ current_path_.clear(); |
+ } |
+ |
TransitionTo(CANCELLED_INTERNAL); |
} |
@@ -409,7 +416,13 @@ void DownloadItemImpl::Remove() { |
// Remove the intermediate file if we are removing an interrupted download. |
// Continuable interruptions leave the intermediate file around. However, the |
// intermediate file will be unusable if the download item is removed. |
- if (!current_path_.empty() && IsInterrupted() && !download_file_.get()) { |
+ // |
+ // Be extra cautious here and only delete an intermediate file if we sure it's |
+ // really an intermediate file. Downloads imported from history may have a |
+ // non-empty current_path_ that's the same as target_path_. |
Randy Smith (Not in Mondays)
2013/05/15 15:34:56
I'm slightly confused. If the download was import
asanka
2013/05/21 21:09:02
https://codereview.chromium.org/11363222 introduce
Randy Smith (Not in Mondays)
2013/05/21 21:40:37
I hear you about the entries from before we starte
asanka
2013/05/22 22:55:52
Yeah. I got rid of the check.
|
+ if (IsInterrupted() && !current_path_.empty() && !target_path_.empty() && |
+ current_path_ != target_path_) { |
+ DCHECK(!download_file_.get()); |
BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
base::Bind(&DeleteDownloadedFile, current_path_)); |
current_path_.clear(); |