| Index: chrome/browser/android/preferences/pref_service_bridge.cc
|
| diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc
|
| index 42c432441ab3beb9094ee8c8d2c8e67e660e1724..9c1f13310f32450c440574cb49e32ca595e427a5 100644
|
| --- a/chrome/browser/android/preferences/pref_service_bridge.cc
|
| +++ b/chrome/browser/android/preferences/pref_service_bridge.cc
|
| @@ -7,6 +7,7 @@
|
| #include <jni.h>
|
| #include <stddef.h>
|
|
|
| +#include <algorithm>
|
| #include <memory>
|
| #include <set>
|
| #include <string>
|
| @@ -29,6 +30,7 @@
|
| #include "chrome/browser/browsing_data/browsing_data_helper.h"
|
| #include "chrome/browser/browsing_data/browsing_data_remover.h"
|
| #include "chrome/browser/browsing_data/browsing_data_remover_factory.h"
|
| +#include "chrome/browser/browsing_data/chrome_browsing_data_types.h"
|
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
|
| #include "chrome/browser/engagement/important_sites_util.h"
|
| #include "chrome/browser/history/web_history_service_factory.h"
|
| @@ -619,24 +621,25 @@ static void ClearBrowsingData(
|
| std::vector<int> data_types_vector;
|
| base::android::JavaIntArrayToIntVector(env, data_types, &data_types_vector);
|
|
|
| - int remove_mask = 0;
|
| + std::set<const content::BrowsingDataType*> remove_mask;
|
| for (const int data_type : data_types_vector) {
|
| switch (static_cast<browsing_data::BrowsingDataType>(data_type)) {
|
| case browsing_data::HISTORY:
|
| - remove_mask |= BrowsingDataRemover::REMOVE_HISTORY;
|
| + remove_mask.insert(&kBrowsingDataTypeHistory);
|
| break;
|
| case browsing_data::CACHE:
|
| - remove_mask |= BrowsingDataRemover::REMOVE_CACHE;
|
| + remove_mask.insert(&kBrowsingDataTypeCache);
|
| break;
|
| case browsing_data::COOKIES:
|
| - remove_mask |= BrowsingDataRemover::REMOVE_COOKIES;
|
| - remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA;
|
| + remove_mask.insert(&kBrowsingDataTypeCookies);
|
| + remove_mask.insert(BrowsingDataTypeSetSiteData().begin(),
|
| + BrowsingDataTypeSetSiteData().end());
|
| break;
|
| case browsing_data::PASSWORDS:
|
| - remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS;
|
| + remove_mask.insert(&kBrowsingDataTypePasswords);
|
| break;
|
| case browsing_data::FORM_DATA:
|
| - remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA;
|
| + remove_mask.insert(&kBrowsingDataTypeFormData);
|
| break;
|
| case browsing_data::BOOKMARKS:
|
| // Bookmarks are deleted separately on the Java side.
|
| @@ -673,10 +676,18 @@ static void ClearBrowsingData(
|
|
|
| // Delete the types protected by Important Sites with a filter,
|
| // and the rest completely.
|
| - int filterable_mask =
|
| - remove_mask & BrowsingDataRemover::IMPORTANT_SITES_DATATYPES;
|
| - int nonfilterable_mask = remove_mask &
|
| - ~BrowsingDataRemover::IMPORTANT_SITES_DATATYPES;
|
| + std::set<const content::BrowsingDataType*> filterable_mask;
|
| + std::set_intersection(
|
| + remove_mask.begin(), remove_mask.end(),
|
| + BrowsingDataTypeSetImportantSites().begin(),
|
| + BrowsingDataTypeSetImportantSites().end(),
|
| + std::inserter(filterable_mask, filterable_mask.begin()));
|
| +
|
| + std::set<const content::BrowsingDataType*> nonfilterable_mask;
|
| + std::set_difference(
|
| + remove_mask.begin(), remove_mask.end(), filterable_mask.begin(),
|
| + filterable_mask.end(),
|
| + std::inserter(nonfilterable_mask, nonfilterable_mask.begin()));
|
|
|
| // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is
|
| // done with both removal tasks.
|
| @@ -687,7 +698,7 @@ static void ClearBrowsingData(
|
| static_cast<browsing_data::TimePeriod>(time_period);
|
| browsing_data::RecordDeletionForPeriod(period);
|
|
|
| - if (filterable_mask) {
|
| + if (!filterable_mask.empty()) {
|
| browsing_data_remover->RemoveWithFilterAndReply(
|
| browsing_data::CalculateBeginDeleteTime(period),
|
| browsing_data::CalculateEndDeleteTime(period),
|
| @@ -698,7 +709,7 @@ static void ClearBrowsingData(
|
| observer->OnBrowsingDataRemoverDone();
|
| }
|
|
|
| - if (nonfilterable_mask) {
|
| + if (!nonfilterable_mask.empty()) {
|
| browsing_data_remover->RemoveAndReply(
|
| browsing_data::CalculateBeginDeleteTime(period),
|
| browsing_data::CalculateEndDeleteTime(period),
|
|
|