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 ce39612f65fec16ac9b6887d8034575d3c119ba1..02300f573b17059d5c25cad1c33c3e68b2b085f9 100644 |
--- a/content/browser/download/download_manager_impl.cc |
+++ b/content/browser/download/download_manager_impl.cc |
@@ -474,6 +474,13 @@ void DownloadManagerImpl::OnFileExistenceChecked(uint32 download_id, |
} |
} |
+bool DownloadManagerImpl::IsRestrictedUrl( |
+ const GURL& url, const std::set<GURL>& restricted_urls) { |
+ DCHECK(!restricted_urls.empty()); |
+ |
+ return restricted_urls.find(url.GetOrigin()) != restricted_urls.end(); |
+} |
+ |
BrowserContext* DownloadManagerImpl::GetBrowserContext() const { |
return browser_context_; |
} |
@@ -565,8 +572,10 @@ void DownloadManagerImpl::DownloadRemoved(DownloadItemImpl* download) { |
delete download; |
} |
-int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
- base::Time remove_end) { |
+int DownloadManagerImpl::RemoveDownloadsBetween( |
+ const std::set<GURL>& restricted_urls, |
+ base::Time remove_begin, |
+ base::Time remove_end) { |
int count = 0; |
DownloadMap::const_iterator it = downloads_.begin(); |
while (it != downloads_.end()) { |
@@ -575,7 +584,9 @@ int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
// Increment done here to protect against invalidation below. |
++it; |
- if (download->GetStartTime() >= remove_begin && |
+ if ((restricted_urls.empty() || IsRestrictedUrl(download->GetURL(), |
+ restricted_urls)) && |
+ download->GetStartTime() >= remove_begin && |
(remove_end.is_null() || download->GetStartTime() < remove_end) && |
(download->GetState() != DownloadItem::IN_PROGRESS)) { |
// Erases the download from downloads_. |
@@ -587,12 +598,13 @@ int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
} |
int DownloadManagerImpl::RemoveDownloads(base::Time remove_begin) { |
- return RemoveDownloadsBetween(remove_begin, base::Time()); |
+ return RemoveDownloadsBetween(std::set<GURL>(), remove_begin, base::Time()); |
} |
int DownloadManagerImpl::RemoveAllDownloads() { |
// The null times make the date range unbounded. |
- int num_deleted = RemoveDownloadsBetween(base::Time(), base::Time()); |
+ int num_deleted = RemoveDownloadsBetween( |
+ std::set<GURL>(), base::Time(), base::Time()); |
RecordClearAllSize(num_deleted); |
return num_deleted; |
} |