| 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());
|
|
|