Index: chrome/browser/browsing_data/browsing_data_remover_impl.cc |
diff --git a/chrome/browser/browsing_data/browsing_data_remover_impl.cc b/chrome/browser/browsing_data/browsing_data_remover_impl.cc |
index dd3a924c22ca7cd1b62fe8b9a5a4e2d848e91ae6..f58b19bda5acf5e05cfbffc3573e6e9a9d40cd51 100644 |
--- a/chrome/browser/browsing_data/browsing_data_remover_impl.cc |
+++ b/chrome/browser/browsing_data/browsing_data_remover_impl.cc |
@@ -15,6 +15,7 @@ |
#include "base/logging.h" |
#include "base/memory/ptr_util.h" |
#include "base/metrics/histogram_macros.h" |
+#include "base/stl_util.h" |
#include "chrome/browser/browsing_data/browsing_data_helper.h" |
#include "chrome/browser/browsing_data/browsing_data_remover_delegate.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -46,6 +47,7 @@ |
using base::UserMetricsAction; |
using content::BrowserContext; |
using content::BrowserThread; |
+using content::BrowsingDataType; |
using content::BrowsingDataFilterBuilder; |
using content::DOMStorageContext; |
@@ -117,6 +119,16 @@ void ClearChannelIDsOnIOThread( |
base::RetainedRef(std::move(rq_context)), callback)); |
} |
+bool IsFilterable(const std::set<const BrowsingDataType*>& remove_mask) { |
+ for (const BrowsingDataType* data_type : remove_mask) { |
+ DCHECK(data_type); |
+ if (!data_type->filterable) |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
} // namespace |
BrowsingDataRemoverImpl::CompletionInhibitor* |
@@ -152,7 +164,6 @@ void BrowsingDataRemoverImpl::SubTask::CompletionCallback() { |
BrowsingDataRemoverImpl::BrowsingDataRemoverImpl( |
content::BrowserContext* browser_context) |
: browser_context_(browser_context), |
- remove_mask_(-1), |
origin_type_mask_(-1), |
is_removing_(false), |
sub_task_forward_callback_( |
@@ -204,10 +215,11 @@ BrowsingDataRemoverImpl::GetEmbedderDelegate() const { |
return embedder_delegate_.get(); |
} |
-void BrowsingDataRemoverImpl::Remove(const base::Time& delete_begin, |
- const base::Time& delete_end, |
- int remove_mask, |
- int origin_type_mask) { |
+void BrowsingDataRemoverImpl::Remove( |
+ const base::Time& delete_begin, |
+ const base::Time& delete_end, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
+ int origin_type_mask) { |
RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
std::unique_ptr<BrowsingDataFilterBuilder>(), nullptr); |
} |
@@ -215,7 +227,7 @@ void BrowsingDataRemoverImpl::Remove(const base::Time& delete_begin, |
void BrowsingDataRemoverImpl::RemoveAndReply( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- int remove_mask, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
int origin_type_mask, |
Observer* observer) { |
DCHECK(observer); |
@@ -226,10 +238,10 @@ void BrowsingDataRemoverImpl::RemoveAndReply( |
void BrowsingDataRemoverImpl::RemoveWithFilter( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- int remove_mask, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
int origin_type_mask, |
std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { |
- DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |
+ DCHECK(IsFilterable(remove_mask)); |
DCHECK(filter_builder); |
RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
std::move(filter_builder), nullptr); |
@@ -238,11 +250,11 @@ void BrowsingDataRemoverImpl::RemoveWithFilter( |
void BrowsingDataRemoverImpl::RemoveWithFilterAndReply( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- int remove_mask, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
int origin_type_mask, |
std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
Observer* observer) { |
- DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |
+ DCHECK(IsFilterable(remove_mask)); |
DCHECK(filter_builder); |
DCHECK(observer); |
RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
@@ -252,7 +264,7 @@ void BrowsingDataRemoverImpl::RemoveWithFilterAndReply( |
void BrowsingDataRemoverImpl::RemoveInternal( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- int remove_mask, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
int origin_type_mask, |
std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
Observer* observer) { |
@@ -299,7 +311,7 @@ void BrowsingDataRemoverImpl::RunNextTask() { |
void BrowsingDataRemoverImpl::RemoveImpl( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- int remove_mask, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
const BrowsingDataFilterBuilder& filter_builder, |
int origin_type_mask) { |
// =============== README before adding more storage backends =============== |
@@ -345,11 +357,13 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
// Record the combined deletion of cookies and cache. |
CookieOrCacheDeletionChoice choice = NEITHER_COOKIES_NOR_CACHE; |
- if (remove_mask & REMOVE_COOKIES && |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCookies) && |
origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
- choice = remove_mask & REMOVE_CACHE ? BOTH_COOKIES_AND_CACHE |
- : ONLY_COOKIES; |
- } else if (remove_mask & REMOVE_CACHE) { |
+ choice = base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCache) |
+ ? BOTH_COOKIES_AND_CACHE |
+ : ONLY_COOKIES; |
+ } else if (base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeCache)) { |
choice = ONLY_CACHE; |
} |
@@ -372,8 +386,10 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
filter_builder.BuildGeneralFilter(); |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_DOWNLOADS |
- if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) { |
+ // kBrowsingDataTypeDownloads |
+ if ((base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeDownloads)) && |
+ may_delete_history) { |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); |
content::DownloadManager* download_manager = |
BrowserContext::GetDownloadManager(browser_context_); |
@@ -382,10 +398,10 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_CHANNEL_IDS |
+ // kBrowsingDataTypeChannelIDs |
// Channel IDs are not separated for protected and unprotected web |
// origins. We check the origin_type_mask_ to prevent unintended deletion. |
- if (remove_mask & REMOVE_CHANNEL_IDS && |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeChannelIDs) && |
origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
content::RecordAction( |
UserMetricsAction("ClearBrowsingData_ChannelIDs")); |
@@ -411,36 +427,40 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
// don't accidentally remove the cookies that are associated with the |
// UNPROTECTED_WEB origin. This is necessary because cookies are not separated |
// between UNPROTECTED_WEB and PROTECTED_WEB. |
- if (remove_mask & REMOVE_COOKIES && |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCookies) && |
origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_COOKIES; |
} |
- if (remove_mask & REMOVE_LOCAL_STORAGE) { |
+ if (base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeLocalStorage)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; |
} |
- if (remove_mask & REMOVE_INDEXEDDB) { |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeIndexedDB)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_INDEXEDDB; |
} |
- if (remove_mask & REMOVE_WEBSQL) { |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeWebSQL)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_WEBSQL; |
} |
- if (remove_mask & REMOVE_APPCACHE) { |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeAppCache)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_APPCACHE; |
} |
- if (remove_mask & REMOVE_SERVICE_WORKERS) { |
+ if (base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeServiceWorkers)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS; |
} |
- if (remove_mask & REMOVE_CACHE_STORAGE) { |
+ if (base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeCacheStorage)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_CACHE_STORAGE; |
} |
- if (remove_mask & REMOVE_FILE_SYSTEMS) { |
+ if (base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeFileSystems)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS; |
} |
@@ -448,7 +468,8 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
// Content Decryption Modules used by Encrypted Media store licenses in a |
// private filesystem. These are different than content licenses used by |
// Flash (which are deleted father down in this method). |
- if (remove_mask & REMOVE_MEDIA_LICENSES) { |
+ if (base::ContainsValue(remove_mask, |
+ &content::kBrowsingDataTypeMediaLicenses)) { |
storage_partition_remove_mask |= |
content::StoragePartition::REMOVE_DATA_MASK_PLUGIN_PRIVATE_DATA; |
} |
@@ -493,8 +514,8 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // CACHE |
- if (remove_mask & REMOVE_CACHE) { |
+ // kBrowsingDataTypeCache |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCache)) { |
// Tell the renderers to clear their cache. |
web_cache::WebCacheManager::GetInstance()->ClearCache(); |
@@ -523,7 +544,7 @@ void BrowsingDataRemoverImpl::RemoveImpl( |
////////////////////////////////////////////////////////////////////////////// |
// Auth cache. |
- if (remove_mask & REMOVE_COOKIES) { |
+ if (base::ContainsValue(remove_mask, &content::kBrowsingDataTypeCookies)) { |
scoped_refptr<net::URLRequestContextGetter> request_context = |
BrowserContext::GetDefaultStoragePartition(browser_context_) |
->GetURLRequestContext(); |
@@ -573,7 +594,8 @@ const base::Time& BrowsingDataRemoverImpl::GetLastUsedEndTime() { |
return delete_end_; |
} |
-int BrowsingDataRemoverImpl::GetLastUsedRemovalMask() { |
+const std::set<const BrowsingDataType*>& |
+BrowsingDataRemoverImpl::GetLastUsedRemovalMask() { |
return remove_mask_; |
} |
@@ -584,7 +606,7 @@ int BrowsingDataRemoverImpl::GetLastUsedOriginTypeMask() { |
BrowsingDataRemoverImpl::RemovalTask::RemovalTask( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- int remove_mask, |
+ const std::set<const BrowsingDataType*>& remove_mask, |
int origin_type_mask, |
std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
Observer* observer) |