| 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 ca6d7b3f052a5fc8bedaddaeec1246a1e9d81a35..ffcde850268494650f37f5d8312a2ab97c8c0633 100644
|
| --- a/chrome/browser/browsing_data/browsing_data_remover.cc
|
| +++ b/chrome/browser/browsing_data/browsing_data_remover.cc
|
| @@ -18,6 +18,7 @@
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/browsing_data/browsing_data_helper.h"
|
| #include "chrome/browser/browsing_data/browsing_data_remover_factory.h"
|
| +#include "chrome/browser/browsing_data/origin_filter_builder.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
|
| #include "chrome/browser/domain_reliability/service_factory.h"
|
| @@ -343,7 +344,19 @@ void BrowsingDataRemover::RemoveImpl(const TimeRange& time_range,
|
| delete_end_ = time_range.end;
|
| remove_mask_ = remove_mask;
|
| origin_type_mask_ = origin_type_mask;
|
| +
|
| + // TODO(msramek): Replace |remove_origin| with |filter| in all backends.
|
| const url::Origin remove_origin(remove_url);
|
| + OriginFilterBuilder builder(OriginFilterBuilder::BLACKLIST);
|
| + 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());
|
| + builder.ChangeMode(OriginFilterBuilder::WHITELIST)
|
| + ->AddOrigin(url::Origin(remove_origin));
|
| + }
|
| + base::Callback<bool(const GURL& url)> same_origin_filter =
|
| + builder.BuildSameOriginFilter();
|
|
|
| PrefService* prefs = profile_->GetPrefs();
|
| bool may_delete_history = prefs->GetBoolean(
|
| @@ -379,6 +392,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 a GURL->bool predicate.
|
| std::set<GURL> restrict_urls;
|
| if (!remove_url.is_empty())
|
| restrict_urls.insert(remove_url);
|
| @@ -559,12 +580,8 @@ void BrowsingDataRemover::RemoveImpl(const TimeRange& time_range,
|
| content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads"));
|
| content::DownloadManager* download_manager =
|
| BrowserContext::GetDownloadManager(profile_);
|
| - if (remove_url.is_empty()) {
|
| - download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_);
|
| - } else {
|
| - download_manager->RemoveDownloadsByOriginAndTime(
|
| - remove_origin, delete_begin_, delete_end_);
|
| - }
|
| + download_manager->RemoveDownloadsByURLAndTime(
|
| + same_origin_filter, delete_begin_, delete_end_);
|
| DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager(
|
| download_manager);
|
| download_prefs->SetSaveFilePath(download_prefs->DownloadPath());
|
|
|