Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Unified Diff: content/browser/download/download_manager_impl.cc

Issue 10704026: Reland DownloadItem::Observer::OnDownloadDestroyed() replaces DownloadItem::REMOVING (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/download/download_manager_impl.cc
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index e0f441b949876d3d7db5aa3a5d29779ef988bc24..53ab80859f5cdaf5241c4b4b9bafaad6ad8bf870 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -298,10 +298,10 @@ void DownloadManagerImpl::Shutdown() {
// Copy downloads_ to separate container so as not to set off checks
// in DownloadItem destruction.
DownloadMap downloads_to_delete;
- downloads_to_delete.swap(downloads_);
active_downloads_.clear();
STLDeleteValues(&downloads_to_delete);
+ downloads_to_delete.swap(downloads_);
Randy Smith (Not in Mondays) 2012/07/11 17:55:37 Is there a reason for moving this line? (I don't
benjhayden 2012/07/13 20:03:17 ~DownloadItemImpl() calls AssertStateConsistent()
// We'll have nothing more to report to the observers after this point.
observers_.Clear();
@@ -615,13 +615,6 @@ void DownloadManagerImpl::OnResponseCompleted(int32 download_id,
}
void DownloadManagerImpl::AssertStateConsistent(DownloadItem* download) const {
- if (download->GetState() == DownloadItem::REMOVING) {
- DCHECK(!ContainsKey(downloads_, download->GetId()));
- DCHECK(!ContainsKey(active_downloads_, download->GetId()));
- return;
- }
-
- // Should be in downloads_ if we're not REMOVING.
CHECK(ContainsKey(downloads_, download->GetId()));
int64 state = download->GetState();
@@ -798,14 +791,15 @@ int DownloadManagerImpl::RemoveDownloadItems(
if (pending_deletes.empty())
return 0;
+ std::vector<int32> deleting_ids;
+
// Delete from internal maps.
for (DownloadVector::const_iterator it = pending_deletes.begin();
it != pending_deletes.end();
++it) {
DownloadItem* download = *it;
DCHECK(download);
- save_page_downloads_.erase(download->GetId());
- downloads_.erase(download->GetId());
+ deleting_ids.push_back(download->GetId());
}
// Tell observers to refresh their views.
@@ -814,6 +808,14 @@ int DownloadManagerImpl::RemoveDownloadItems(
// Delete the download items themselves.
const int num_deleted = static_cast<int>(pending_deletes.size());
STLDeleteContainerPointers(pending_deletes.begin(), pending_deletes.end());
+
+ for (std::vector<int32>::const_iterator it = deleting_ids.begin();
+ it != deleting_ids.end();
+ ++it) {
+ save_page_downloads_.erase(*it);
+ downloads_.erase(*it);
+ }
+
Randy Smith (Not in Mondays) 2012/07/11 17:55:37 Why the shift? This seems more complicated. Simp
benjhayden 2012/07/13 20:03:17 Done.
return num_deleted;
}

Powered by Google App Engine
This is Rietveld 408576698