| 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;
|
| }
|
|
|