diff options
Diffstat (limited to 'content/browser/download/download_manager_impl.cc')
-rw-r--r-- | content/browser/download/download_manager_impl.cc | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index d34310d8..65f60c9 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc @@ -462,8 +462,27 @@ void DownloadManagerImpl::ContinueDownloadWithPath( // Rename to intermediate name. FilePath download_path; - if (!delegate_->OverrideIntermediatePath(download, &download_path)) - download_path = download->GetFullPath(); + if (download->GetDangerType() != + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) { + if (download->PromptUserForSaveLocation()) { + // When we prompt the user, we overwrite the FullPath with what the user + // wanted to use. Construct a file path using the previously determined + // intermediate filename and the new path. + // TODO(asanka): This can trample an in-progress download in the new + // target directory if it was using the same intermediate name. + FilePath file_name = download->GetSuggestedPath().BaseName(); + download_path = download->GetFullPath().DirName().Append(file_name); + } else { + // The download's name is already set to an intermediate name, so no need + // to override. + download_path = download->GetFullPath(); + } + } else { + // The download is a safe download. We need to rename it to its + // intermediate path. The final name after user confirmation will be set + // from DownloadItem::OnDownloadCompleting. + download_path = delegate_->GetIntermediatePath(download->GetFullPath()); + } BrowserThread::PostTask( BrowserThread::FILE, FROM_HERE, @@ -507,7 +526,6 @@ void DownloadManagerImpl::OnResponseCompleted(int32 download_id, DownloadItem* download = active_downloads_[download_id]; download->OnAllDataSaved(size, hash); - delegate_->OnResponseCompleted(download); download->MaybeCompleteDownload(); } |