summaryrefslogtreecommitdiffstats
path: root/content/browser/download/download_manager_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/download/download_manager_impl.cc')
-rw-r--r--content/browser/download/download_manager_impl.cc24
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();
}