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 d8350d970077cd728a41973a0c22cc18204d4d52..3b4bd9f5d8f19805c8e96b08e1d782b2dc1ca32b 100644 |
--- a/chrome/browser/browsing_data/browsing_data_remover.cc |
+++ b/chrome/browser/browsing_data/browsing_data_remover.cc |
@@ -75,6 +75,7 @@ |
#include "net/url_request/url_request_context_getter.h" |
#include "storage/browser/quota/special_storage_policy.h" |
#include "url/origin.h" |
+#include "url/origin_filter.h" |
#if BUILDFLAG(ANDROID_JAVA_UI) |
#include "chrome/browser/android/offline_pages/offline_page_model_factory.h" |
@@ -343,7 +344,17 @@ void BrowsingDataRemover::RemoveImpl(const TimeRange& time_range, |
delete_end_ = time_range.end; |
remove_mask_ = remove_mask; |
origin_type_mask_ = origin_type_mask; |
- url::Origin remove_origin(remove_url); |
+ |
+ scoped_ptr<url::OriginFilter> filter = url::OriginFilter::Empty(); |
+ if (!remove_url.is_empty()) { |
+ // Make sure that only URLs representing origins, with no extra components, |
+ // are passed to this class. |
+ DCHECK_EQ(remove_url, remove_url.GetOrigin()); |
+ |
+ std::vector<url::Origin> whitelist; |
+ whitelist.push_back(url::Origin(remove_url)); |
+ filter = url::OriginFilter::AsWhitelist(whitelist); |
+ } |
PrefService* prefs = profile_->GetPrefs(); |
bool may_delete_history = prefs->GetBoolean( |
@@ -379,6 +390,14 @@ void BrowsingDataRemover::RemoveImpl(const TimeRange& time_range, |
HistoryServiceFactory::GetForProfile( |
profile_, ServiceAccessType::EXPLICIT_ACCESS); |
if (history_service) { |
+ // Selective history deletion is currently done through HistoryUI -> |
+ // HistoryBackend -> HistoryService, and that is for individual URLs, |
+ // not origins. The code below is currently unused, as the only callsite |
+ // supplying |remove_url| is the unittest. |
+ // TODO(msramek): Investigate whether history deletion, especially in the |
+ // case of web history, understands an origin parameter as the deletion |
+ // of all URLs from that origin, or just the URL with empty path. |
+ // TODO(msramek): Replace |remove_url| with OriginFilter. |
std::set<GURL> restrict_urls; |
if (!remove_url.is_empty()) |
restrict_urls.insert(remove_url); |
@@ -559,11 +578,8 @@ void BrowsingDataRemover::RemoveImpl(const TimeRange& time_range, |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); |
content::DownloadManager* download_manager = |
BrowserContext::GetDownloadManager(profile_); |
- if (remove_origin.unique()) |
- download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_); |
- else |
- download_manager->RemoveDownloadsByOriginAndTime( |
- remove_origin, delete_begin_, delete_end_); |
+ download_manager->RemoveDownloadsByOriginAndTime( |
+ filter.get(), delete_begin_, delete_end_); |
DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager( |
download_manager); |
download_prefs->SetSaveFilePath(download_prefs->DownloadPath()); |