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..3f9a38444442e56ff182806f232c497a0cfd7b78 100644 |
--- a/content/browser/download/download_manager_impl.cc |
+++ b/content/browser/download/download_manager_impl.cc |
@@ -44,6 +44,7 @@ |
#include "net/base/request_priority.h" |
#include "net/base/upload_bytes_element_reader.h" |
#include "net/url_request/url_request_context.h" |
+#include "url/origin.h" |
namespace content { |
namespace { |
@@ -565,8 +566,26 @@ void DownloadManagerImpl::DownloadRemoved(DownloadItemImpl* download) { |
delete download; |
} |
-int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
- base::Time remove_end) { |
+namespace { |
+ |
+bool RemoveDownloadBetween(base::Time remove_begin, |
+ base::Time remove_end, |
+ const DownloadItemImpl* download_item) { |
+ return download_item->GetStartTime() >= remove_begin && |
+ (remove_end.is_null() || download_item->GetStartTime() < remove_end); |
+} |
+ |
+bool RemoveDownloadByOriginAndTime(const url::Origin& origin, |
+ base::Time remove_begin, |
+ base::Time remove_end, |
+ const DownloadItemImpl* download_item) { |
+ return origin.IsSameOriginWith(url::Origin(download_item->GetURL())) && |
+ RemoveDownloadBetween(remove_begin, remove_end, download_item); |
+} |
+ |
+} // namespace |
+ |
+int DownloadManagerImpl::RemoveDownloads(const DownloadRemover& remover) { |
int count = 0; |
DownloadMap::const_iterator it = downloads_.begin(); |
while (it != downloads_.end()) { |
@@ -575,10 +594,8 @@ int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
// Increment done here to protect against invalidation below. |
++it; |
- if (download->GetStartTime() >= remove_begin && |
- (remove_end.is_null() || download->GetStartTime() < remove_end) && |
- (download->GetState() != DownloadItem::IN_PROGRESS)) { |
- // Erases the download from downloads_. |
+ if (download->GetState() != DownloadItem::IN_PROGRESS && |
+ remover.Run(download)) { |
download->Remove(); |
count++; |
} |
@@ -586,6 +603,21 @@ int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
return count; |
} |
+int DownloadManagerImpl::RemoveDownloadsByOriginAndTime( |
+ const url::Origin& origin, |
+ base::Time remove_begin, |
+ base::Time remove_end) { |
+ return RemoveDownloads(base::Bind(&RemoveDownloadByOriginAndTime, |
+ base::ConstRef(origin), remove_begin, |
+ remove_end)); |
+} |
+ |
+int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
+ base::Time remove_end) { |
+ return RemoveDownloads( |
+ base::Bind(&RemoveDownloadBetween, remove_begin, remove_end)); |
+} |
+ |
int DownloadManagerImpl::RemoveDownloads(base::Time remove_begin) { |
return RemoveDownloadsBetween(remove_begin, base::Time()); |
} |