From 22168bc6d841ff4bfec73718ce058fdf09ef3289 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Mon, 21 Sep 2015 14:03:36 +0800 Subject: [PATCH] Allow emitting 'done' event when user cancel the download saving dialog. --- .../browser/atom_download_manager_delegate.cc | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/atom/browser/atom_download_manager_delegate.cc b/atom/browser/atom_download_manager_delegate.cc index 7cc2c1714596..88daec2f4623 100644 --- a/atom/browser/atom_download_manager_delegate.cc +++ b/atom/browser/atom_download_manager_delegate.cc @@ -75,20 +75,24 @@ void AtomDownloadManagerDelegate::OnDownloadPathGenerated( window = relay->window.get(); file_dialog::Filters filters; - base::FilePath path = default_path; - if (open_download_dialog_ && - !file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path, - filters, &path)) { - return; + base::FilePath path; + if (!open_download_dialog_) { + // Use default_path if download dialog is disabled. + path = default_path; + } else { + if (file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path, + filters, &path)) { + // Remember the last selected download directory. + AtomBrowserContext* browser_context = static_cast( + download_manager_->GetBrowserContext()); + browser_context->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory, + path.DirName()); + } } - if (open_download_dialog_) { - // Remeber the last selected download directory. - AtomBrowserContext* browser_context = static_cast( - download_manager_->GetBrowserContext()); - browser_context->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory, - path.DirName()); - } + // Running the DownloadTargetCallback with an empty FilePath signals that the + // download should be cancelled. + // If user cancels the file save dialog, run the callback with empty FilePath. callback.Run(path, content::DownloadItem::TARGET_DISPOSITION_PROMPT, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, path);