Fix an issue that chrome crashes on startup after resuming a download in reduced mode
We should only check whether a download can open when really opening it.
This CL also fixes an issue that in_progress_downloads_ having a nullptr
during the ImportInProgressDownloads() call.
BUG=972202
(cherry picked from commit 2171e53c69d145f28c55872d19ec5ba0a36bf5f9)
Change-Id: I508654db93c61ddff2919b7dc7fdf3a0a7e65638
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1648906
Auto-Submit: Min Qin <qinmin@chromium.org>
Reviewed-by: David Trainor <dtrainor@chromium.org>
Commit-Queue: David Trainor <dtrainor@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#667703}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1653084
Reviewed-by: Min Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#238}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc
index 98e20781b63..858f432 100644
--- a/chrome/browser/download/chrome_download_manager_delegate.cc
+++ b/chrome/browser/download/chrome_download_manager_delegate.cc
@@ -658,6 +658,8 @@
if (!download->CanOpenDownload())
return;
+ if (!IsMostRecentDownloadItemAtFilePath(download))
+ return;
MaybeSendDangerousDownloadOpenedReport(download,
false /* show_download_in_folder */);
diff --git a/components/download/internal/common/download_item_impl.cc b/components/download/internal/common/download_item_impl.cc
index f95cfee..6d07b66 100644
--- a/components/download/internal/common/download_item_impl.cc
+++ b/components/download/internal/common/download_item_impl.cc
@@ -997,8 +997,7 @@
// they aren't owned by the download system.
const bool is_complete = GetState() == DownloadItem::COMPLETE;
return (!IsDone() || is_complete) && !IsTemporary() &&
- !file_externally_removed_ &&
- delegate_->IsMostRecentDownloadItemAtFilePath(this);
+ !file_externally_removed_;
}
bool DownloadItemImpl::ShouldOpenFileBasedOnExtension() {
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index bfbc2ea..96b59e3e 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -1140,8 +1140,9 @@
}
void DownloadManagerImpl::ImportInProgressDownloads(uint32_t id) {
- for (auto& download : in_progress_downloads_) {
- auto item = std::move(download);
+ auto download = in_progress_downloads_.begin();
+ while (download != in_progress_downloads_.end()) {
+ auto item = std::move(*download);
// If the in-progress download doesn't have an ID, generate new IDs for it.
if (item->GetId() == download::DownloadItem::kInvalidId) {
item->SetDownloadId(id++);
@@ -1151,10 +1152,9 @@
}
item->SetDelegate(this);
DownloadItemUtils::AttachInfo(item.get(), GetBrowserContext(), nullptr);
+ download = in_progress_downloads_.erase(download);
OnDownloadCreated(std::move(item));
}
- in_progress_downloads_.clear();
-
OnDownloadManagerInitialized();
}