| Index: chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
 | 
| diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
 | 
| index 10efc181e6f5a1ba97de01b749ee94a4f69d15c5..a7022b025adafbcb7db3fb042c5ffea052e6545b 100644
 | 
| --- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
 | 
| +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
 | 
| @@ -7,12 +7,14 @@
 | 
|  
 | 
|  #include "base/json/json_string_value_serializer.h"
 | 
|  #include "base/memory/ref_counted.h"
 | 
| +#include "base/stl_util.h"
 | 
|  #include "base/strings/pattern.h"
 | 
|  #include "base/strings/string_util.h"
 | 
|  #include "base/values.h"
 | 
|  #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/extensions/api/browsing_data/browsing_data_api.h"
 | 
|  #include "chrome/browser/extensions/extension_function_test_utils.h"
 | 
|  #include "chrome/browser/profiles/profile.h"
 | 
| @@ -25,6 +27,7 @@
 | 
|  
 | 
|  using extension_function_test_utils::RunFunctionAndReturnError;
 | 
|  using extension_function_test_utils::RunFunctionAndReturnSingleResult;
 | 
| +using content::BrowsingDataType;
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| @@ -50,7 +53,7 @@ class ExtensionBrowsingDataTest : public InProcessBrowserTest {
 | 
|      return remover_->GetLastUsedBeginTime();
 | 
|    }
 | 
|  
 | 
| -  int GetRemovalMask() {
 | 
| +  const std::set<const BrowsingDataType*>& GetRemovalMask() {
 | 
|      return remover_->GetLastUsedRemovalMask();
 | 
|    }
 | 
|  
 | 
| @@ -71,9 +74,17 @@ class ExtensionBrowsingDataTest : public InProcessBrowserTest {
 | 
|      return result ? mask_value : 0;
 | 
|    }
 | 
|  
 | 
| +  const BrowsingDataType* GetAsMask(const base::DictionaryValue* dict,
 | 
| +                                    std::string path,
 | 
| +                                    const BrowsingDataType* mask_value) {
 | 
| +    bool result;
 | 
| +    EXPECT_TRUE(dict->GetBoolean(path, &result)) << "for " << path;
 | 
| +    return result ? mask_value : nullptr;
 | 
| +  }
 | 
| +
 | 
|    void RunBrowsingDataRemoveFunctionAndCompareRemovalMask(
 | 
|        const std::string& data_types,
 | 
| -      int expected_mask) {
 | 
| +      const std::set<const BrowsingDataType*>& expected_mask) {
 | 
|      scoped_refptr<BrowsingDataRemoveFunction> function =
 | 
|          new BrowsingDataRemoveFunction();
 | 
|      SCOPED_TRACE(data_types);
 | 
| @@ -87,7 +98,7 @@ class ExtensionBrowsingDataTest : public InProcessBrowserTest {
 | 
|  
 | 
|    void RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
|        const std::string& key,
 | 
| -      int expected_mask) {
 | 
| +      const std::set<const BrowsingDataType*>& expected_mask) {
 | 
|      RunBrowsingDataRemoveFunctionAndCompareRemovalMask(
 | 
|          std::string("{\"") + key + "\": true}", expected_mask);
 | 
|    }
 | 
| @@ -105,8 +116,9 @@ class ExtensionBrowsingDataTest : public InProcessBrowserTest {
 | 
|      EXPECT_EQ(expected_mask, GetOriginTypeMask());
 | 
|    }
 | 
|  
 | 
| -  template<class ShortcutFunction>
 | 
| -  void RunAndCompareRemovalMask(int expected_mask) {
 | 
| +  template <class ShortcutFunction>
 | 
| +  void RunAndCompareRemovalMask(
 | 
| +      const std::set<const BrowsingDataType*>& expected_mask) {
 | 
|      scoped_refptr<ShortcutFunction> function =
 | 
|          new ShortcutFunction();
 | 
|      SCOPED_TRACE(ShortcutFunction::function_name());
 | 
| @@ -148,27 +160,36 @@ class ExtensionBrowsingDataTest : public InProcessBrowserTest {
 | 
|      EXPECT_LE(expected_since, since + 10.0 * 1000.0);
 | 
|    }
 | 
|  
 | 
| -  void SetPrefsAndVerifySettings(int data_type_flags,
 | 
| -                                 int expected_origin_type_mask,
 | 
| -                                 int expected_removal_mask) {
 | 
| +  void SetPrefsAndVerifySettings(
 | 
| +      const std::set<const BrowsingDataType*>& data_type_flags,
 | 
| +      int expected_origin_type_mask,
 | 
| +      const std::set<const BrowsingDataType*>& expected_removal_mask) {
 | 
|      PrefService* prefs = browser()->profile()->GetPrefs();
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeleteCache,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_CACHE));
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeleteCookies,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_COOKIES));
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeleteBrowsingHistory,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_HISTORY));
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeleteFormData,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_FORM_DATA));
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeleteDownloadHistory,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_DOWNLOADS));
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeleteHostedAppsData,
 | 
| -        !!(data_type_flags &
 | 
| -           BrowsingDataRemover::REMOVE_HOSTED_APP_DATA_TESTONLY));
 | 
| -    prefs->SetBoolean(browsing_data::prefs::kDeletePasswords,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_PASSWORDS));
 | 
| -    prefs->SetBoolean(prefs::kClearPluginLSODataEnabled,
 | 
| -        !!(data_type_flags & BrowsingDataRemover::REMOVE_PLUGIN_DATA));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeleteCache,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypeCache));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeleteCookies,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypeCookies));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeleteBrowsingHistory,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypeHistory));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeleteFormData,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypeFormData));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeleteDownloadHistory,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypeDownloads));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeleteHostedAppsData,
 | 
| +        base::ContainsValue(data_type_flags,
 | 
| +                            &kBrowsingDataTypeHostedAppDataTestOnly));
 | 
| +    prefs->SetBoolean(
 | 
| +        browsing_data::prefs::kDeletePasswords,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypePasswords));
 | 
| +    prefs->SetBoolean(
 | 
| +        prefs::kClearPluginLSODataEnabled,
 | 
| +        base::ContainsValue(data_type_flags, &kBrowsingDataTypePluginData));
 | 
|  
 | 
|      scoped_refptr<BrowsingDataSettingsFunction> function =
 | 
|          new BrowsingDataSettingsFunction();
 | 
| @@ -192,36 +213,41 @@ class ExtensionBrowsingDataTest : public InProcessBrowserTest {
 | 
|  
 | 
|      base::DictionaryValue* data_to_remove;
 | 
|      EXPECT_TRUE(result->GetDictionary("dataToRemove", &data_to_remove));
 | 
| -    int removal_mask =
 | 
| -        GetAsMask(data_to_remove, "appcache",
 | 
| -                  BrowsingDataRemover::REMOVE_APPCACHE) |
 | 
| -        GetAsMask(data_to_remove, "cache", BrowsingDataRemover::REMOVE_CACHE) |
 | 
| -        GetAsMask(data_to_remove, "cookies",
 | 
| -                  BrowsingDataRemover::REMOVE_COOKIES) |
 | 
| -        GetAsMask(data_to_remove, "downloads",
 | 
| -                  BrowsingDataRemover::REMOVE_DOWNLOADS) |
 | 
| -        GetAsMask(data_to_remove, "fileSystems",
 | 
| -                  BrowsingDataRemover::REMOVE_FILE_SYSTEMS) |
 | 
| -        GetAsMask(data_to_remove, "formData",
 | 
| -                  BrowsingDataRemover::REMOVE_FORM_DATA) |
 | 
| -        GetAsMask(data_to_remove, "history",
 | 
| -                  BrowsingDataRemover::REMOVE_HISTORY) |
 | 
| -        GetAsMask(data_to_remove, "indexedDB",
 | 
| -                  BrowsingDataRemover::REMOVE_INDEXEDDB) |
 | 
| -        GetAsMask(data_to_remove, "localStorage",
 | 
| -                  BrowsingDataRemover::REMOVE_LOCAL_STORAGE) |
 | 
| -        GetAsMask(data_to_remove, "pluginData",
 | 
| -                  BrowsingDataRemover::REMOVE_PLUGIN_DATA) |
 | 
| -        GetAsMask(data_to_remove, "passwords",
 | 
| -                  BrowsingDataRemover::REMOVE_PASSWORDS) |
 | 
| -        GetAsMask(data_to_remove, "serviceWorkers",
 | 
| -                  BrowsingDataRemover::REMOVE_SERVICE_WORKERS) |
 | 
| -        GetAsMask(data_to_remove, "cacheStorage",
 | 
| -                  BrowsingDataRemover::REMOVE_CACHE_STORAGE) |
 | 
| -        GetAsMask(data_to_remove, "webSQL",
 | 
| -                  BrowsingDataRemover::REMOVE_WEBSQL) |
 | 
| -        GetAsMask(data_to_remove, "serverBoundCertificates",
 | 
| -                  BrowsingDataRemover::REMOVE_CHANNEL_IDS);
 | 
| +
 | 
| +    std::set<const BrowsingDataType*> removal_mask;
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "appcache", &kBrowsingDataTypeAppCache));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "cache", &kBrowsingDataTypeCache));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "cookies", &kBrowsingDataTypeCookies));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "downloads", &kBrowsingDataTypeDownloads));
 | 
| +    removal_mask.insert(GetAsMask(data_to_remove, "fileSystems",
 | 
| +                                  &kBrowsingDataTypeFileSystems));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "formData", &kBrowsingDataTypeFormData));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "history", &kBrowsingDataTypeHistory));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "indexedDB", &kBrowsingDataTypeIndexedDB));
 | 
| +    removal_mask.insert(GetAsMask(data_to_remove, "localStorage",
 | 
| +                                  &kBrowsingDataTypeLocalStorage));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "pluginData", &kBrowsingDataTypePluginData));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "passwords", &kBrowsingDataTypePasswords));
 | 
| +    removal_mask.insert(GetAsMask(data_to_remove, "serviceWorkers",
 | 
| +                                  &kBrowsingDataTypeServiceWorkers));
 | 
| +    removal_mask.insert(GetAsMask(data_to_remove, "cacheStorage",
 | 
| +                                  &kBrowsingDataTypeCacheStorage));
 | 
| +    removal_mask.insert(
 | 
| +        GetAsMask(data_to_remove, "webSQL", &kBrowsingDataTypeWebSQL));
 | 
| +    removal_mask.insert(GetAsMask(data_to_remove, "serverBoundCertificates",
 | 
| +                                  &kBrowsingDataTypeChannelIDs));
 | 
| +
 | 
| +    // GetAsMask() adds a nullptr for excluded types.
 | 
| +    removal_mask.erase(nullptr);
 | 
|  
 | 
|      EXPECT_EQ(expected_removal_mask, removal_mask);
 | 
|    }
 | 
| @@ -289,25 +315,26 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, RemoveBrowsingDataAll) {
 | 
|                                                     browser()));
 | 
|  
 | 
|    EXPECT_EQ(base::Time::FromDoubleT(1.0), GetBeginTime());
 | 
| -  EXPECT_EQ(
 | 
| -      (BrowsingDataRemover::REMOVE_SITE_DATA |
 | 
| -       BrowsingDataRemover::REMOVE_CACHE |
 | 
| -       BrowsingDataRemover::REMOVE_DOWNLOADS |
 | 
| -       BrowsingDataRemover::REMOVE_FORM_DATA |
 | 
| -       BrowsingDataRemover::REMOVE_HISTORY |
 | 
| -       BrowsingDataRemover::REMOVE_PASSWORDS) &
 | 
| -          // TODO(benwells): implement clearing of site usage data via the
 | 
| -          // browsing data API. https://crbug.com/500801.
 | 
| -          ~BrowsingDataRemover::REMOVE_SITE_USAGE_DATA &
 | 
| -          // TODO(dmurph): implement clearing of durable storage permission
 | 
| -          // via the browsing data API. https://crbug.com/500801.
 | 
| -          ~BrowsingDataRemover::REMOVE_DURABLE_PERMISSION &
 | 
| -          // We can't remove plugin data inside a test profile.
 | 
| -          ~BrowsingDataRemover::REMOVE_PLUGIN_DATA &
 | 
| -          // TODO(ramyasharma): implement clearing of external protocol data
 | 
| -          // via the browsing data API. https://crbug.com/692850.
 | 
| -          ~BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA,
 | 
| -      GetRemovalMask());
 | 
| +  std::set<const BrowsingDataType*> expected_mask =
 | 
| +      BrowsingDataTypeSetSiteData();
 | 
| +  expected_mask.insert(&kBrowsingDataTypeCache);
 | 
| +  expected_mask.insert(&kBrowsingDataTypeDownloads);
 | 
| +  expected_mask.insert(&kBrowsingDataTypeFormData);
 | 
| +  expected_mask.insert(&kBrowsingDataTypeHistory);
 | 
| +  expected_mask.insert(&kBrowsingDataTypePasswords);
 | 
| +  // TODO(benwells): implement clearing of site usage data via the
 | 
| +  // browsing data API. https://crbug.com/500801.
 | 
| +  expected_mask.erase(&kBrowsingDataTypeSiteUsageData);
 | 
| +  // TODO(dmurph): implement clearing of durable storage permission
 | 
| +  // via the browsing data API. https://crbug.com/500801.
 | 
| +  expected_mask.erase(&kBrowsingDataTypeDurablePermission);
 | 
| +  // We can't remove plugin data inside a test profile.
 | 
| +  expected_mask.erase(&kBrowsingDataTypePluginData);
 | 
| +  // TODO(ramyasharma): implement clearing of external protocol data
 | 
| +  // via the browsing data API. https://crbug.com/692850.
 | 
| +  expected_mask.erase(&kBrowsingDataTypeExternalProtocolData);
 | 
| +
 | 
| +  EXPECT_EQ(expected_mask, GetRemovalMask());
 | 
|  }
 | 
|  
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, BrowsingDataOriginTypeMask) {
 | 
| @@ -339,45 +366,43 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, BrowsingDataOriginTypeMask) {
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest,
 | 
|                         BrowsingDataRemovalMask) {
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "appcache", BrowsingDataRemover::REMOVE_APPCACHE);
 | 
| +      "appcache", {&kBrowsingDataTypeAppCache});
 | 
| +  RunBrowsingDataRemoveWithKeyAndCompareRemovalMask("cache",
 | 
| +                                                    {&kBrowsingDataTypeCache});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "cache", BrowsingDataRemover::REMOVE_CACHE);
 | 
| +      "cookies", {&kBrowsingDataTypeCookies});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "cookies", BrowsingDataRemover::REMOVE_COOKIES);
 | 
| +      "downloads", {&kBrowsingDataTypeDownloads});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "downloads", BrowsingDataRemover::REMOVE_DOWNLOADS);
 | 
| +      "fileSystems", {&kBrowsingDataTypeFileSystems});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "fileSystems", BrowsingDataRemover::REMOVE_FILE_SYSTEMS);
 | 
| +      "formData", {&kBrowsingDataTypeFormData});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "formData", BrowsingDataRemover::REMOVE_FORM_DATA);
 | 
| +      "history", {&kBrowsingDataTypeHistory});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "history", BrowsingDataRemover::REMOVE_HISTORY);
 | 
| +      "indexedDB", {&kBrowsingDataTypeIndexedDB});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "indexedDB", BrowsingDataRemover::REMOVE_INDEXEDDB);
 | 
| +      "localStorage", {&kBrowsingDataTypeLocalStorage});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "localStorage", BrowsingDataRemover::REMOVE_LOCAL_STORAGE);
 | 
| +      "serverBoundCertificates", {&kBrowsingDataTypeChannelIDs});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "serverBoundCertificates",
 | 
| -      BrowsingDataRemover::REMOVE_CHANNEL_IDS);
 | 
| -  RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "passwords", BrowsingDataRemover::REMOVE_PASSWORDS);
 | 
| +      "passwords", {&kBrowsingDataTypePasswords});
 | 
|    // We can't remove plugin data inside a test profile.
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "serviceWorkers", BrowsingDataRemover::REMOVE_SERVICE_WORKERS);
 | 
| -  RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "cacheStorage", BrowsingDataRemover::REMOVE_CACHE_STORAGE);
 | 
| +      "serviceWorkers", {&kBrowsingDataTypeServiceWorkers});
 | 
|    RunBrowsingDataRemoveWithKeyAndCompareRemovalMask(
 | 
| -      "webSQL", BrowsingDataRemover::REMOVE_WEBSQL);
 | 
| +      "cacheStorage", {&kBrowsingDataTypeCacheStorage});
 | 
| +  RunBrowsingDataRemoveWithKeyAndCompareRemovalMask("webSQL",
 | 
| +                                                    {&kBrowsingDataTypeWebSQL});
 | 
|  }
 | 
|  
 | 
|  // Test an arbitrary combination of data types.
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest,
 | 
|                         BrowsingDataRemovalMaskCombination) {
 | 
|    RunBrowsingDataRemoveFunctionAndCompareRemovalMask(
 | 
| -       "{\"appcache\": true, \"cookies\": true, \"history\": true}",
 | 
| -       BrowsingDataRemover::REMOVE_APPCACHE |
 | 
| -           BrowsingDataRemover::REMOVE_COOKIES |
 | 
| -           BrowsingDataRemover::REMOVE_HISTORY);
 | 
| +      "{\"appcache\": true, \"cookies\": true, \"history\": true}",
 | 
| +      {&kBrowsingDataTypeAppCache, &kBrowsingDataTypeCookies,
 | 
| +       &kBrowsingDataTypeHistory});
 | 
|  }
 | 
|  
 | 
|  // Make sure the remove() function accepts the format produced by settings().
 | 
| @@ -392,9 +417,9 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest,
 | 
|    prefs->SetBoolean(browsing_data::prefs::kDeleteHostedAppsData, false);
 | 
|    prefs->SetBoolean(browsing_data::prefs::kDeletePasswords, false);
 | 
|    prefs->SetBoolean(prefs::kClearPluginLSODataEnabled, false);
 | 
| -  int expected_mask = BrowsingDataRemover::REMOVE_CACHE |
 | 
| -        BrowsingDataRemover::REMOVE_DOWNLOADS |
 | 
| -        BrowsingDataRemover::REMOVE_HISTORY;
 | 
| +  const std::set<const BrowsingDataType*>& expected_mask = {
 | 
| +      &kBrowsingDataTypeCache, &kBrowsingDataTypeDownloads,
 | 
| +      &kBrowsingDataTypeHistory};
 | 
|    std::string json;
 | 
|    // Scoping for the traces.
 | 
|    {
 | 
| @@ -427,31 +452,30 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest,
 | 
|  
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, ShortcutFunctionRemovalMask) {
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveAppcacheFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_APPCACHE);
 | 
| +      {&kBrowsingDataTypeAppCache});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveCacheFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_CACHE);
 | 
| +      {&kBrowsingDataTypeCache});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveCookiesFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_COOKIES |
 | 
| -      BrowsingDataRemover::REMOVE_CHANNEL_IDS);
 | 
| +      {&kBrowsingDataTypeCookies, &kBrowsingDataTypeChannelIDs});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveDownloadsFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_DOWNLOADS);
 | 
| +      {&kBrowsingDataTypeDownloads});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveFileSystemsFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_FILE_SYSTEMS);
 | 
| +      {&kBrowsingDataTypeFileSystems});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveFormDataFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_FORM_DATA);
 | 
| +      {&kBrowsingDataTypeFormData});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveHistoryFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_HISTORY);
 | 
| +      {&kBrowsingDataTypeHistory});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveIndexedDBFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_INDEXEDDB);
 | 
| +      {&kBrowsingDataTypeIndexedDB});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveLocalStorageFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_LOCAL_STORAGE);
 | 
| +      {&kBrowsingDataTypeLocalStorage});
 | 
|    // We can't remove plugin data inside a test profile.
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemovePasswordsFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_PASSWORDS);
 | 
| +      {&kBrowsingDataTypePasswords});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveServiceWorkersFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_SERVICE_WORKERS);
 | 
| +      {&kBrowsingDataTypeServiceWorkers});
 | 
|    RunAndCompareRemovalMask<BrowsingDataRemoveWebSQLFunction>(
 | 
| -      BrowsingDataRemover::REMOVE_WEBSQL);
 | 
| +      {&kBrowsingDataTypeWebSQL});
 | 
|  }
 | 
|  
 | 
|  // Test the processing of the 'delete since' preference.
 | 
| @@ -464,65 +488,75 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionSince) {
 | 
|  }
 | 
|  
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionEmpty) {
 | 
| -  SetPrefsAndVerifySettings(0, 0, 0);
 | 
| +  std::set<const BrowsingDataType*> empty_mask;
 | 
| +  SetPrefsAndVerifySettings(empty_mask, 0, empty_mask);
 | 
|  }
 | 
|  
 | 
|  // Test straightforward settings, mapped 1:1 to data types.
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionSimple) {
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_CACHE, 0,
 | 
| -                            BrowsingDataRemover::REMOVE_CACHE);
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_HISTORY, 0,
 | 
| -                            BrowsingDataRemover::REMOVE_HISTORY);
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_FORM_DATA, 0,
 | 
| -                            BrowsingDataRemover::REMOVE_FORM_DATA);
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_DOWNLOADS, 0,
 | 
| -                            BrowsingDataRemover::REMOVE_DOWNLOADS);
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_PASSWORDS, 0,
 | 
| -                            BrowsingDataRemover::REMOVE_PASSWORDS);
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypeCache}, 0,
 | 
| +                            {&kBrowsingDataTypeCache});
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypeHistory}, 0,
 | 
| +                            {&kBrowsingDataTypeHistory});
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypeFormData}, 0,
 | 
| +                            {&kBrowsingDataTypeFormData});
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypeDownloads}, 0,
 | 
| +                            {&kBrowsingDataTypeDownloads});
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypePasswords}, 0,
 | 
| +                            {&kBrowsingDataTypePasswords});
 | 
|  }
 | 
|  
 | 
|  // Test cookie and app data settings.
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionSiteData) {
 | 
| -  int site_data_no_durable_or_usage_or_external =
 | 
| -      BrowsingDataRemover::REMOVE_SITE_DATA &
 | 
| -      ~BrowsingDataRemover::REMOVE_SITE_USAGE_DATA &
 | 
| -      ~BrowsingDataRemover::REMOVE_DURABLE_PERMISSION &
 | 
| -      ~BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA;
 | 
| -  int site_data_no_plugins_durable_usage_external =
 | 
| -      site_data_no_durable_or_usage_or_external &
 | 
| -      ~BrowsingDataRemover::REMOVE_PLUGIN_DATA;
 | 
| -
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_COOKIES,
 | 
| -                            UNPROTECTED_WEB,
 | 
| +  std::set<const BrowsingDataType*> site_data_no_durable_or_usage_or_external =
 | 
| +      BrowsingDataTypeSetSiteData();
 | 
| +  site_data_no_durable_or_usage_or_external.erase(
 | 
| +      &kBrowsingDataTypeSiteUsageData);
 | 
| +  site_data_no_durable_or_usage_or_external.erase(
 | 
| +      &kBrowsingDataTypeDurablePermission);
 | 
| +  site_data_no_durable_or_usage_or_external.erase(
 | 
| +      &kBrowsingDataTypeExternalProtocolData);
 | 
| +  std::set<const BrowsingDataType*>
 | 
| +      site_data_no_plugins_durable_usage_external =
 | 
| +          site_data_no_durable_or_usage_or_external;
 | 
| +  site_data_no_plugins_durable_usage_external.erase(
 | 
| +      &kBrowsingDataTypePluginData);
 | 
| +
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypeCookies}, UNPROTECTED_WEB,
 | 
| +                            site_data_no_plugins_durable_usage_external);
 | 
| +  SetPrefsAndVerifySettings({&kBrowsingDataTypeHostedAppDataTestOnly},
 | 
| +                            PROTECTED_WEB,
 | 
|                              site_data_no_plugins_durable_usage_external);
 | 
|    SetPrefsAndVerifySettings(
 | 
| -      BrowsingDataRemover::REMOVE_HOSTED_APP_DATA_TESTONLY, PROTECTED_WEB,
 | 
| -      site_data_no_plugins_durable_usage_external);
 | 
| -  SetPrefsAndVerifySettings(
 | 
| -      BrowsingDataRemover::REMOVE_COOKIES |
 | 
| -          BrowsingDataRemover::REMOVE_HOSTED_APP_DATA_TESTONLY,
 | 
| +      {&kBrowsingDataTypeCookies, &kBrowsingDataTypeHostedAppDataTestOnly},
 | 
|        PROTECTED_WEB | UNPROTECTED_WEB,
 | 
|        site_data_no_plugins_durable_usage_external);
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_COOKIES |
 | 
| -                                BrowsingDataRemover::REMOVE_PLUGIN_DATA,
 | 
| -                            UNPROTECTED_WEB,
 | 
| -                            site_data_no_durable_or_usage_or_external);
 | 
| +  SetPrefsAndVerifySettings(
 | 
| +      {&kBrowsingDataTypeCookies, &kBrowsingDataTypePluginData},
 | 
| +      UNPROTECTED_WEB, site_data_no_durable_or_usage_or_external);
 | 
|  }
 | 
|  
 | 
|  // Test an arbitrary assortment of settings.
 | 
|  IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionAssorted) {
 | 
| -  int site_data_no_plugins_durable_usage_external =
 | 
| -      BrowsingDataRemover::REMOVE_SITE_DATA &
 | 
| -      ~BrowsingDataRemover::REMOVE_DURABLE_PERMISSION &
 | 
| -      ~BrowsingDataRemover::REMOVE_SITE_USAGE_DATA &
 | 
| -      ~BrowsingDataRemover::REMOVE_PLUGIN_DATA &
 | 
| -      ~BrowsingDataRemover::REMOVE_EXTERNAL_PROTOCOL_DATA;
 | 
| -
 | 
| -  SetPrefsAndVerifySettings(BrowsingDataRemover::REMOVE_COOKIES |
 | 
| -                                BrowsingDataRemover::REMOVE_HISTORY |
 | 
| -                                BrowsingDataRemover::REMOVE_DOWNLOADS,
 | 
| -                            UNPROTECTED_WEB,
 | 
| -                            site_data_no_plugins_durable_usage_external |
 | 
| -                                BrowsingDataRemover::REMOVE_HISTORY |
 | 
| -                                BrowsingDataRemover::REMOVE_DOWNLOADS);
 | 
| +  std::set<const BrowsingDataType*>
 | 
| +      site_data_no_plugins_durable_usage_external =
 | 
| +          BrowsingDataTypeSetSiteData();
 | 
| +  site_data_no_plugins_durable_usage_external.erase(
 | 
| +      &kBrowsingDataTypeDurablePermission);
 | 
| +  site_data_no_plugins_durable_usage_external.erase(
 | 
| +      &kBrowsingDataTypeSiteUsageData);
 | 
| +  site_data_no_plugins_durable_usage_external.erase(
 | 
| +      &kBrowsingDataTypePluginData);
 | 
| +  site_data_no_plugins_durable_usage_external.erase(
 | 
| +      &kBrowsingDataTypeExternalProtocolData);
 | 
| +
 | 
| +  std::set<const BrowsingDataType*> expected_mask =
 | 
| +      site_data_no_plugins_durable_usage_external;
 | 
| +  expected_mask.insert(&kBrowsingDataTypeHistory);
 | 
| +  expected_mask.insert(&kBrowsingDataTypeDownloads);
 | 
| +
 | 
| +  SetPrefsAndVerifySettings(
 | 
| +      {&kBrowsingDataTypeCookies, &kBrowsingDataTypeHistory,
 | 
| +       &kBrowsingDataTypeDownloads},
 | 
| +      UNPROTECTED_WEB, expected_mask);
 | 
|  }
 | 
| 
 |