Index: chrome/browser/browsing_data/browsing_data_remover.cc |
diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc |
index 4f41816acf8f53878debeae4744c75ea5201a23f..dec339ac34e6fb5b68cc8758f72784f354994ba6 100644 |
--- a/chrome/browser/browsing_data/browsing_data_remover.cc |
+++ b/chrome/browser/browsing_data/browsing_data_remover.cc |
@@ -67,6 +67,7 @@ |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_context_getter.h" |
#include "storage/browser/quota/special_storage_policy.h" |
+#include "url/origin.h" |
#if defined(OS_ANDROID) |
#include "chrome/browser/precache/precache_manager_factory.h" |
@@ -232,7 +233,6 @@ BrowsingDataRemover::BrowsingDataRemover(Profile* profile, |
waiting_for_clear_webrtc_logs_(false), |
#endif |
remove_mask_(0), |
- remove_origin_(GURL()), |
origin_type_mask_(0), |
storage_partition_for_testing_(NULL) { |
DCHECK(profile); |
@@ -259,13 +259,13 @@ void BrowsingDataRemover::Remove(int remove_mask, int origin_type_mask) { |
} |
void BrowsingDataRemover::RemoveImpl(int remove_mask, |
- const GURL& origin, |
+ const GURL& remove_url, |
int origin_type_mask) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
set_removing(true); |
remove_mask_ = remove_mask; |
- remove_origin_ = origin; |
origin_type_mask_ = origin_type_mask; |
+ url::Origin remove_origin(remove_url); |
PrefService* prefs = profile_->GetPrefs(); |
bool may_delete_history = prefs->GetBoolean( |
@@ -302,8 +302,8 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, |
profile_, ServiceAccessType::EXPLICIT_ACCESS); |
if (history_service) { |
std::set<GURL> restrict_urls; |
- if (!remove_origin_.is_empty()) |
- restrict_urls.insert(remove_origin_); |
+ if (!remove_url.is_empty()) |
+ restrict_urls.insert(remove_url); |
content::RecordAction(UserMetricsAction("ClearBrowsingData_History")); |
waiting_for_clear_history_ = true; |
@@ -367,8 +367,8 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, |
keywords_model->Load(); |
waiting_for_clear_keyword_data_ = true; |
} else if (keywords_model) { |
- keywords_model->RemoveAutoGeneratedForOriginBetween(remove_origin_, |
- delete_begin_, delete_end_); |
+ keywords_model->RemoveAutoGeneratedForOriginBetween( |
+ remove_url, delete_begin_, delete_end_); |
} |
// The PrerenderManager keeps history of prerendered pages, so clear that. |
@@ -385,7 +385,7 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, |
// If the caller is removing history for all hosts, then clear ancillary |
// historical information. |
- if (remove_origin_.is_empty()) { |
+ if (remove_url.is_empty()) { |
// We also delete the list of recently closed tabs. Since these expire, |
// they can't be more than a day old, so we can simply clear them all. |
TabRestoreService* tab_service = |
@@ -468,7 +468,11 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); |
content::DownloadManager* download_manager = |
BrowserContext::GetDownloadManager(profile_); |
- download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_); |
+ if (remove_origin.unique()) |
+ download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_); |
+ else |
+ download_manager->RemoveDownloadsByOriginAndTime( |
+ remove_origin, delete_begin_, delete_end_); |
DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager( |
download_manager); |
download_prefs->SetSaveFilePath(download_prefs->DownloadPath()); |
@@ -708,11 +712,8 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, |
} |
storage_partition->ClearData( |
- storage_partition_remove_mask, |
- quota_storage_remove_mask, |
- remove_origin_, |
- base::Bind(&DoesOriginMatchMask, origin_type_mask_), |
- delete_begin_, |
+ storage_partition_remove_mask, quota_storage_remove_mask, remove_url, |
+ base::Bind(&DoesOriginMatchMask, origin_type_mask_), delete_begin_, |
delete_end_, |
base::Bind(&BrowsingDataRemover::OnClearedStoragePartitionData, |
base::Unretained(this))); |