Index: chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc |
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc |
index 432895607f0cf6427243efe08ffe882ecd74acbe..da8bcc159800098073c968bcc60874a7f06261d3 100644 |
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc |
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc |
@@ -74,6 +74,7 @@ |
#include "net/http/http_transaction_factory.h" |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_context_getter.h" |
+#include "url/url_util.h" |
#if defined(OS_ANDROID) |
#include "chrome/browser/android/offline_pages/offline_page_model_factory.h" |
@@ -87,6 +88,7 @@ |
#if BUILDFLAG(ENABLE_EXTENSIONS) |
#include "chrome/browser/extensions/activity_log/activity_log.h" |
#include "extensions/browser/extension_prefs.h" |
+#include "extensions/common/constants.h" |
#endif |
#if BUILDFLAG(ENABLE_SESSION_SERVICE) |
@@ -308,6 +310,29 @@ ChromeBrowsingDataRemoverDelegate::~ChromeBrowsingDataRemoverDelegate() { |
template_url_sub_.reset(); |
} |
+bool ChromeBrowsingDataRemoverDelegate::DoesOriginMatchEmbedderMask( |
+ int origin_type_mask, |
+ const GURL& origin, |
+ storage::SpecialStoragePolicy* policy) const { |
+ DCHECK_EQ(0, origin_type_mask & (ORIGIN_TYPE_EMBEDDER_BEGIN - 1)) |
+ << "|origin_type_mask| can only contain origin types defined in " |
+ << "the embedder."; |
+ |
+#if BUILDFLAG(ENABLE_EXTENSIONS) |
+ // Packaged apps and extensions match iff EXTENSION. |
+ if ((origin.GetOrigin().scheme() == extensions::kExtensionScheme) && |
+ (origin_type_mask & ORIGIN_TYPE_EXTENSION)) { |
+ return true; |
+ } |
+ origin_type_mask &= ~ORIGIN_TYPE_EXTENSION; |
+#endif |
+ |
+ DCHECK(!origin_type_mask) << |
+ "DoesOriginMatchEmbedderMask must handle all origin types."; |
+ |
+ return false; |
+} |
+ |
void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
@@ -315,6 +340,33 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
const BrowsingDataFilterBuilder& filter_builder, |
int origin_type_mask, |
const base::Closure& callback) { |
+ DCHECK(((remove_mask & ~FILTERABLE_DATA_TYPES) == 0) || |
+ filter_builder.IsEmptyBlacklist()); |
+ |
+ if (origin_type_mask & ORIGIN_TYPE_UNPROTECTED_WEB) { |
+ content::RecordAction( |
+ UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb")); |
+ } |
+ if (origin_type_mask & ORIGIN_TYPE_PROTECTED_WEB) { |
+ content::RecordAction( |
+ UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb")); |
+ } |
+#if BUILDFLAG(ENABLE_EXTENSIONS) |
+ if (origin_type_mask & ORIGIN_TYPE_EXTENSION) { |
+ content::RecordAction( |
+ UserMetricsAction("ClearBrowsingData_MaskContainsExtension")); |
+ } |
+#endif |
+ // If this fires, we added a new BrowsingDataHelper::OriginTypeMask without |
+ // updating the user metrics above. |
+ static_assert( |
+ ALL_ORIGIN_TYPES == (ORIGIN_TYPE_UNPROTECTED_WEB | |
+#if BUILDFLAG(ENABLE_EXTENSIONS) |
+ ORIGIN_TYPE_EXTENSION | |
+#endif |
+ ORIGIN_TYPE_PROTECTED_WEB), |
+ "OriginTypeMask has been updated without updating user metrics"); |
+ |
////////////////////////////////////////////////////////////////////////////// |
// INITIALIZATION |
synchronous_clear_operations_.Start(); |
@@ -341,13 +393,13 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
// All the UI entry points into the BrowsingDataRemoverImpl should be |
// disabled, but this will fire if something was missed or added. |
DCHECK(may_delete_history || |
- (remove_mask & BrowsingDataRemover::REMOVE_NOCHECKS) || |
- (!(remove_mask & BrowsingDataRemover::REMOVE_HISTORY) && |
- !(remove_mask & BrowsingDataRemover::REMOVE_DOWNLOADS))); |
+ (remove_mask & DATA_TYPE_NO_CHECKS) || |
+ (!(remove_mask & DATA_TYPE_HISTORY) && |
+ !(remove_mask & DATA_TYPE_DOWNLOADS))); |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_HISTORY |
- if ((remove_mask & BrowsingDataRemover::REMOVE_HISTORY) && |
+ // DATA_TYPE_HISTORY |
+ if ((remove_mask & DATA_TYPE_HISTORY) && |
may_delete_history) { |
history::HistoryService* history_service = |
HistoryServiceFactory::GetForProfile( |
@@ -572,8 +624,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_DOWNLOADS |
- if ((remove_mask & BrowsingDataRemover::REMOVE_DOWNLOADS) && |
+ // DATA_TYPE_DOWNLOADS |
+ if ((remove_mask & DATA_TYPE_DOWNLOADS) && |
may_delete_history) { |
DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager( |
BrowserContext::GetDownloadManager(profile_)); |
@@ -581,14 +633,14 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_COOKIES |
- // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set, |
- // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB |
+ // DATA_TYPE_COOKIES |
+ // We ignore the DATA_TYPE_COOKIES request if UNPROTECTED_WEB is not set, |
+ // so that callers who request DATA_TYPE_SITE_DATA with PROTECTED_WEB |
// 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 & BrowsingDataRemover::REMOVE_COOKIES && |
- origin_type_mask & BrowsingDataHelper::UNPROTECTED_WEB) { |
+ if (remove_mask & DATA_TYPE_COOKIES && |
+ origin_type_mask & ORIGIN_TYPE_UNPROTECTED_WEB) { |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Cookies")); |
// Clear the safebrowsing cookies only if time period is for "all time". It |
@@ -631,8 +683,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_DURABLE_PERMISSION |
- if (remove_mask & BrowsingDataRemover::REMOVE_DURABLE_PERMISSION) { |
+ // DATA_TYPE_DURABLE_PERMISSION |
+ if (remove_mask & DATA_TYPE_DURABLE_PERMISSION) { |
HostContentSettingsMapFactory::GetForProfile(profile_) |
->ClearSettingsForOneTypeWithPredicate( |
CONTENT_SETTINGS_TYPE_DURABLE_STORAGE, |
@@ -640,16 +692,16 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_SITE_USAGE_DATA |
- if (remove_mask & BrowsingDataRemover::REMOVE_SITE_USAGE_DATA) { |
+ // DATA_TYPE_SITE_USAGE_DATA |
+ if (remove_mask & DATA_TYPE_SITE_USAGE_DATA) { |
HostContentSettingsMapFactory::GetForProfile(profile_) |
->ClearSettingsForOneTypeWithPredicate( |
CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, |
base::Bind(&WebsiteSettingsFilterAdapter, filter)); |
} |
- if ((remove_mask & BrowsingDataRemover::REMOVE_SITE_USAGE_DATA) || |
- (remove_mask & BrowsingDataRemover::REMOVE_HISTORY)) { |
+ if ((remove_mask & DATA_TYPE_SITE_USAGE_DATA) || |
+ (remove_mask & DATA_TYPE_HISTORY)) { |
HostContentSettingsMapFactory::GetForProfile(profile_) |
->ClearSettingsForOneTypeWithPredicate( |
CONTENT_SETTINGS_TYPE_APP_BANNER, |
@@ -661,7 +713,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
////////////////////////////////////////////////////////////////////////////// |
// Password manager |
- if (remove_mask & BrowsingDataRemover::REMOVE_PASSWORDS) { |
+ if (remove_mask & DATA_TYPE_PASSWORDS) { |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Passwords")); |
password_manager::PasswordStore* password_store = |
PasswordStoreFactory::GetForProfile( |
@@ -685,7 +737,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
clear_http_auth_cache_.GetCompletionCallback()); |
} |
- if (remove_mask & BrowsingDataRemover::REMOVE_COOKIES) { |
+ if (remove_mask & DATA_TYPE_COOKIES) { |
password_manager::PasswordStore* password_store = |
PasswordStoreFactory::GetForProfile(profile_, |
ServiceAccessType::EXPLICIT_ACCESS) |
@@ -698,7 +750,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
} |
- if (remove_mask & BrowsingDataRemover::REMOVE_HISTORY) { |
+ if (remove_mask & DATA_TYPE_HISTORY) { |
password_manager::PasswordStore* password_store = |
PasswordStoreFactory::GetForProfile( |
profile_, ServiceAccessType::EXPLICIT_ACCESS).get(); |
@@ -712,9 +764,9 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_FORM_DATA |
+ // DATA_TYPE_FORM_DATA |
// TODO(dmurph): Support all backends with filter (crbug.com/113621). |
- if (remove_mask & BrowsingDataRemover::REMOVE_FORM_DATA) { |
+ if (remove_mask & DATA_TYPE_FORM_DATA) { |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Autofill")); |
scoped_refptr<autofill::AutofillWebDataService> web_data_service = |
WebDataServiceFactory::GetAutofillWebDataForProfile( |
@@ -740,8 +792,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_CACHE |
- if (remove_mask & BrowsingDataRemover::REMOVE_CACHE) { |
+ // DATA_TYPE_CACHE |
+ if (remove_mask & DATA_TYPE_CACHE) { |
#if !defined(DISABLE_NACL) |
clear_nacl_cache_.Start(); |
@@ -797,7 +849,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
#if defined(OS_ANDROID) |
// For now we're considering offline pages as cache, so if we're removing |
// cache we should remove offline pages as well. |
- if ((remove_mask & BrowsingDataRemover::REMOVE_CACHE)) { |
+ if ((remove_mask & DATA_TYPE_CACHE)) { |
clear_offline_page_data_.Start(); |
offline_pages::OfflinePageModelFactory::GetForBrowserContext(profile_) |
->DeleteCachedPagesByURLPredicate( |
@@ -809,7 +861,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_PLUGINS |
+ // DATA_TYPE_PLUGINS |
// Plugins are known to //content and their bulk deletion is implemented in |
// PluginDataRemover. However, the filtered deletion uses |
// BrowsingDataFlashLSOHelper which (currently) has strong dependencies |
@@ -821,8 +873,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
#if BUILDFLAG(ENABLE_PLUGINS) |
// Plugin is data not separated for protected and unprotected web origins. We |
// check the origin_type_mask_ to prevent unintended deletion. |
- if (remove_mask & BrowsingDataRemover::REMOVE_PLUGIN_DATA && |
- origin_type_mask & BrowsingDataHelper::UNPROTECTED_WEB) { |
+ if (remove_mask & DATA_TYPE_PLUGIN_DATA && |
+ origin_type_mask & ORIGIN_TYPE_UNPROTECTED_WEB) { |
content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData")); |
clear_plugin_data_count_ = 1; |
@@ -849,8 +901,8 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
#endif |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_MEDIA_LICENSES |
- if (remove_mask & BrowsingDataRemover::REMOVE_MEDIA_LICENSES) { |
+ // DATA_TYPE_MEDIA_LICENSES |
+ if (remove_mask & DATA_TYPE_MEDIA_LICENSES) { |
// TODO(jrummell): This UMA should be renamed to indicate it is for Media |
// Licenses. |
content::RecordAction( |
@@ -892,21 +944,21 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
// Remove omnibox zero-suggest cache results. Filtering is not supported. |
// This is not a problem, as deleting more data than necessary will just cause |
// another server round-trip; no data is actually lost. |
- if ((remove_mask & (BrowsingDataRemover::REMOVE_CACHE | |
- BrowsingDataRemover::REMOVE_COOKIES))) { |
+ if ((remove_mask & (DATA_TYPE_CACHE | |
+ DATA_TYPE_COOKIES))) { |
prefs->SetString(omnibox::kZeroSuggestCachedResults, std::string()); |
} |
////////////////////////////////////////////////////////////////////////////// |
// Domain reliability service. |
- if (remove_mask & (BrowsingDataRemover::REMOVE_COOKIES | |
- BrowsingDataRemover::REMOVE_HISTORY)) { |
+ if (remove_mask & (DATA_TYPE_COOKIES | |
+ DATA_TYPE_HISTORY)) { |
domain_reliability::DomainReliabilityService* service = |
domain_reliability::DomainReliabilityServiceFactory:: |
GetForBrowserContext(profile_); |
if (service) { |
domain_reliability::DomainReliabilityClearMode mode; |
- if (remove_mask & BrowsingDataRemover::REMOVE_COOKIES) |
+ if (remove_mask & DATA_TYPE_COOKIES) |
mode = domain_reliability::CLEAR_CONTEXTS; |
else |
mode = domain_reliability::CLEAR_BEACONS; |
@@ -920,16 +972,16 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( |
} |
////////////////////////////////////////////////////////////////////////////// |
- // REMOVE_WEBAPP_DATA |
+ // DATA_TYPE_WEB_APP_DATA |
#if defined(OS_ANDROID) |
// Clear all data associated with registered webapps. |
- if (remove_mask & BrowsingDataRemover::REMOVE_WEBAPP_DATA) |
+ if (remove_mask & DATA_TYPE_WEB_APP_DATA) |
webapp_registry_->UnregisterWebappsForUrls(filter); |
#endif |
////////////////////////////////////////////////////////////////////////////// |
// Remove external protocol data. |
- if (remove_mask & BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA) |
+ if (remove_mask & DATA_TYPE_EXTERNAL_PROTOCOL_DATA) |
ExternalProtocolHandler::ClearData(profile_); |
synchronous_clear_operations_.GetCompletionCallback().Run(); |