| Index: chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
 | 
| diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
 | 
| index 100ad55244bcfc23a55f34f2d6b031a37abcdbfe..17a19c465799981e4dd43f67f2c46b892f12a784 100644
 | 
| --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
 | 
| +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
 | 
| @@ -18,6 +18,7 @@
 | 
|  #include "components/browsing_data/core/browsing_data_utils.h"
 | 
|  #include "components/offline_pages/core/offline_page_model.h"
 | 
|  #include "components/search_engines/template_url_service.h"
 | 
| +#include "extensions/features/features.h"
 | 
|  #include "media/media_features.h"
 | 
|  #include "ppapi/features/features.h"
 | 
|  
 | 
| @@ -46,6 +47,102 @@ class ChromeBrowsingDataRemoverDelegate : public BrowsingDataRemoverDelegate
 | 
|  #endif
 | 
|  {
 | 
|   public:
 | 
| +  // This is an extension of BrowsingDataRemover::RemoveDataMask which includes
 | 
| +  // all datatypes therefrom and adds additional Chrome-specific ones.
 | 
| +  // TODO(crbug.com/668114): Extend this to uint64_t to ensure that we won't
 | 
| +  // run out of space anytime soon.
 | 
| +  enum DataType {
 | 
| +    // Embedder can start adding datatypes after the last platform datatype.
 | 
| +    DATA_TYPE_EMBEDDER_BEGIN = BrowsingDataRemover::DATA_TYPE_CONTENT_END << 1,
 | 
| +
 | 
| +    // Chrome-specific datatypes.
 | 
| +    DATA_TYPE_HISTORY = DATA_TYPE_EMBEDDER_BEGIN,
 | 
| +    DATA_TYPE_FORM_DATA = DATA_TYPE_EMBEDDER_BEGIN << 1,
 | 
| +    DATA_TYPE_PASSWORDS = DATA_TYPE_EMBEDDER_BEGIN << 2,
 | 
| +    DATA_TYPE_PLUGIN_DATA = DATA_TYPE_EMBEDDER_BEGIN << 3,
 | 
| +#if defined(OS_ANDROID)
 | 
| +    DATA_TYPE_WEB_APP_DATA = DATA_TYPE_EMBEDDER_BEGIN << 4,
 | 
| +#endif
 | 
| +    DATA_TYPE_SITE_USAGE_DATA = DATA_TYPE_EMBEDDER_BEGIN << 5,
 | 
| +    DATA_TYPE_DURABLE_PERMISSION = DATA_TYPE_EMBEDDER_BEGIN << 6,
 | 
| +    DATA_TYPE_EXTERNAL_PROTOCOL_DATA = DATA_TYPE_EMBEDDER_BEGIN << 7,
 | 
| +    DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY = DATA_TYPE_EMBEDDER_BEGIN << 8,
 | 
| +
 | 
| +    // Group datatypes.
 | 
| +
 | 
| +    // "Site data" includes storage backend accessible to websites and some
 | 
| +    // additional metadata kept by the browser (e.g. site usage data).
 | 
| +    DATA_TYPE_SITE_DATA = BrowsingDataRemover::DATA_TYPE_APP_CACHE |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_COOKIES |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_FILE_SYSTEMS |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_INDEXED_DB |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_WEB_SQL |
 | 
| +                          BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS |
 | 
| +                          DATA_TYPE_PLUGIN_DATA |
 | 
| +#if defined(OS_ANDROID)
 | 
| +                          DATA_TYPE_WEB_APP_DATA |
 | 
| +#endif
 | 
| +                          DATA_TYPE_SITE_USAGE_DATA |
 | 
| +                          DATA_TYPE_DURABLE_PERMISSION |
 | 
| +                          DATA_TYPE_EXTERNAL_PROTOCOL_DATA,
 | 
| +
 | 
| +    // Datatypes protected by Important Sites.
 | 
| +    IMPORTANT_SITES_DATA_TYPES =
 | 
| +        DATA_TYPE_SITE_DATA | BrowsingDataRemover::DATA_TYPE_CACHE,
 | 
| +
 | 
| +    // Datatypes that can be deleted partially per URL / origin / domain,
 | 
| +    // whichever makes sense.
 | 
| +    FILTERABLE_DATA_TYPES = DATA_TYPE_SITE_DATA |
 | 
| +                            BrowsingDataRemover::DATA_TYPE_CACHE |
 | 
| +                            BrowsingDataRemover::DATA_TYPE_DOWNLOADS,
 | 
| +
 | 
| +    // Includes all the available remove options. Meant to be used by clients
 | 
| +    // that wish to wipe as much data as possible from a Profile, to make it
 | 
| +    // look like a new Profile.
 | 
| +    ALL_DATA_TYPES = DATA_TYPE_SITE_DATA |
 | 
| +                     BrowsingDataRemover::DATA_TYPE_CACHE |
 | 
| +                     BrowsingDataRemover::DATA_TYPE_DOWNLOADS |
 | 
| +                     DATA_TYPE_FORM_DATA |
 | 
| +                     DATA_TYPE_HISTORY |
 | 
| +                     DATA_TYPE_PASSWORDS |
 | 
| +                     BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES,
 | 
| +
 | 
| +    // Includes all available remove options. Meant to be used when the Profile
 | 
| +    // is scheduled to be deleted, and all possible data should be wiped from
 | 
| +    // disk as soon as possible.
 | 
| +    WIPE_PROFILE = ALL_DATA_TYPES | BrowsingDataRemover::DATA_TYPE_NO_CHECKS,
 | 
| +  };
 | 
| +
 | 
| +  // This is an extension of BrowsingDataRemover::OriginType which includes all
 | 
| +  // origin types therefrom and adds additional Chrome-specific ones.
 | 
| +  enum OriginType {
 | 
| +    // Embedder can start adding origin types after the last
 | 
| +    // platform origin type.
 | 
| +    ORIGIN_TYPE_EMBEDDER_BEGIN = BrowsingDataRemover::ORIGIN_TYPE_CONTENT_END
 | 
| +                                 << 1,
 | 
| +
 | 
| +#if BUILDFLAG(ENABLE_EXTENSIONS)
 | 
| +    // Packaged apps and extensions (chrome-extension://*).
 | 
| +    ORIGIN_TYPE_EXTENSION = ORIGIN_TYPE_EMBEDDER_BEGIN,
 | 
| +#endif
 | 
| +
 | 
| +    // All origin types.
 | 
| +    ALL_ORIGIN_TYPES = BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
 | 
| +#if BUILDFLAG(ENABLE_EXTENSIONS)
 | 
| +                       ORIGIN_TYPE_EXTENSION |
 | 
| +#endif
 | 
| +                       BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
 | 
| +  };
 | 
| +
 | 
| +  // Important sites protect a small set of sites from the deletion of certain
 | 
| +  // datatypes. Therefore, those datatypes must be filterable by
 | 
| +  // url/origin/domain.
 | 
| +  static_assert((IMPORTANT_SITES_DATA_TYPES & ~FILTERABLE_DATA_TYPES) == 0,
 | 
| +                "All important sites datatypes must be filterable.");
 | 
| +
 | 
|    // Used to track the deletion of a single data storage backend.
 | 
|    class SubTask {
 | 
|     public:
 | 
| @@ -75,7 +172,11 @@ class ChromeBrowsingDataRemoverDelegate : public BrowsingDataRemoverDelegate
 | 
|    ChromeBrowsingDataRemoverDelegate(content::BrowserContext* browser_context);
 | 
|    ~ChromeBrowsingDataRemoverDelegate() override;
 | 
|  
 | 
| -  // Removes Chrome-specific data.
 | 
| +  // BrowsingDataRemoverDelegate:
 | 
| +  bool DoesOriginMatchEmbedderMask(
 | 
| +      int origin_type_mask,
 | 
| +      const GURL& origin,
 | 
| +      storage::SpecialStoragePolicy* special_storage_policy) const override;
 | 
|    void RemoveEmbedderData(
 | 
|        const base::Time& delete_begin,
 | 
|        const base::Time& delete_end,
 | 
| 
 |