| Index: chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
|
| diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
|
| index e8474db05fcc253855bbe04c2b52b9c134769905..b990296093917bd6d48a615b1c736787e66730f2 100644
|
| --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
|
| +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
|
| @@ -8,13 +8,16 @@
|
|
|
| #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h"
|
|
|
| +#include <set>
|
| #include <string>
|
| #include <utility>
|
|
|
| +#include "base/stl_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/plugins/plugin_data_remover_helper.h"
|
| #include "chrome/browser/plugins/plugin_prefs.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -27,6 +30,7 @@
|
| #include "extensions/common/extension.h"
|
|
|
| using content::BrowserThread;
|
| +using content::BrowsingDataType;
|
|
|
| namespace extension_browsing_data_api_constants {
|
|
|
| @@ -69,51 +73,55 @@ const char kDeleteProhibitedError[] = "Browsing history and downloads are not "
|
| } // namespace extension_browsing_data_api_constants
|
|
|
| namespace {
|
| -int MaskForKey(const char* key) {
|
| +
|
| +// TODO(msramek): This function could be simplified to three lines if we ensured
|
| +// that extension API keys are the same as names specified in BrowsingDataType.
|
| +const BrowsingDataType* TypeForKey(const char* key) {
|
| if (strcmp(key, extension_browsing_data_api_constants::kAppCacheKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_APPCACHE;
|
| + return &kBrowsingDataTypeAppCache;
|
| if (strcmp(key, extension_browsing_data_api_constants::kCacheKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_CACHE;
|
| + return &kBrowsingDataTypeCache;
|
| if (strcmp(key, extension_browsing_data_api_constants::kCookiesKey) == 0) {
|
| - return BrowsingDataRemover::REMOVE_COOKIES;
|
| + return &kBrowsingDataTypeCookies;
|
| }
|
| if (strcmp(key, extension_browsing_data_api_constants::kDownloadsKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_DOWNLOADS;
|
| + return &kBrowsingDataTypeDownloads;
|
| if (strcmp(key, extension_browsing_data_api_constants::kFileSystemsKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_FILE_SYSTEMS;
|
| + return &kBrowsingDataTypeFileSystems;
|
| if (strcmp(key, extension_browsing_data_api_constants::kFormDataKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_FORM_DATA;
|
| + return &kBrowsingDataTypeFormData;
|
| if (strcmp(key, extension_browsing_data_api_constants::kHistoryKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_HISTORY;
|
| + return &kBrowsingDataTypeHistory;
|
| if (strcmp(key, extension_browsing_data_api_constants::kIndexedDBKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_INDEXEDDB;
|
| + return &kBrowsingDataTypeIndexedDB;
|
| if (strcmp(key, extension_browsing_data_api_constants::kLocalStorageKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_LOCAL_STORAGE;
|
| + return &kBrowsingDataTypeLocalStorage;
|
| if (strcmp(key,
|
| extension_browsing_data_api_constants::kChannelIDsKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_CHANNEL_IDS;
|
| + return &kBrowsingDataTypeChannelIDs;
|
| if (strcmp(key, extension_browsing_data_api_constants::kPasswordsKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_PASSWORDS;
|
| + return &kBrowsingDataTypePasswords;
|
| if (strcmp(key, extension_browsing_data_api_constants::kPluginDataKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_PLUGIN_DATA;
|
| + return &kBrowsingDataTypePluginData;
|
| if (strcmp(key, extension_browsing_data_api_constants::kServiceWorkersKey) ==
|
| 0)
|
| - return BrowsingDataRemover::REMOVE_SERVICE_WORKERS;
|
| + return &kBrowsingDataTypeServiceWorkers;
|
| if (strcmp(key, extension_browsing_data_api_constants::kCacheStorageKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_CACHE_STORAGE;
|
| + return &kBrowsingDataTypeCacheStorage;
|
| if (strcmp(key, extension_browsing_data_api_constants::kWebSQLKey) == 0)
|
| - return BrowsingDataRemover::REMOVE_WEBSQL;
|
| + return &kBrowsingDataTypeWebSQL;
|
|
|
| - return 0;
|
| + return nullptr;
|
| }
|
|
|
| // Returns false if any of the selected data types are not allowed to be
|
| // deleted.
|
| -bool IsRemovalPermitted(int removal_mask, PrefService* prefs) {
|
| +bool IsRemovalPermitted(const std::set<const BrowsingDataType*>& removal_mask,
|
| + PrefService* prefs) {
|
| // Enterprise policy or user preference might prohibit deleting browser or
|
| // download history.
|
| - if ((removal_mask & BrowsingDataRemover::REMOVE_HISTORY) ||
|
| - (removal_mask & BrowsingDataRemover::REMOVE_DOWNLOADS)) {
|
| + if (base::ContainsValue(removal_mask, &kBrowsingDataTypeHistory) ||
|
| + base::ContainsValue(removal_mask, &kBrowsingDataTypeDownloads)) {
|
| return prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory);
|
| }
|
| return true;
|
| @@ -227,7 +235,9 @@ void BrowsingDataSettingsFunction::SetDetails(
|
| base::DictionaryValue* permitted_dict,
|
| const char* data_type,
|
| bool is_selected) {
|
| - bool is_permitted = IsRemovalPermitted(MaskForKey(data_type), prefs_);
|
| + const std::set<const BrowsingDataType*> removal_mask = {
|
| + TypeForKey(data_type)};
|
| + bool is_permitted = IsRemovalPermitted(removal_mask, prefs_);
|
| selected_dict->SetBoolean(data_type, is_selected && is_permitted);
|
| permitted_dict->SetBoolean(data_type, is_permitted);
|
| }
|
| @@ -270,6 +280,7 @@ bool BrowsingDataRemoverFunction::RunAsync() {
|
| base::Time::UnixEpoch() :
|
| base::Time::FromDoubleT(ms_since_epoch / 1000.0);
|
|
|
| + removal_mask_.clear();
|
| EXTENSION_FUNCTION_VALIDATE(GetRemovalMask(&removal_mask_));
|
|
|
| // Check for prohibited data types.
|
| @@ -278,7 +289,7 @@ bool BrowsingDataRemoverFunction::RunAsync() {
|
| return false;
|
| }
|
|
|
| - if (removal_mask_ & BrowsingDataRemover::REMOVE_PLUGIN_DATA) {
|
| + if (base::ContainsValue(removal_mask_, &kBrowsingDataTypePluginData)) {
|
| // If we're being asked to remove plugin data, check whether it's actually
|
| // supported.
|
| BrowserThread::PostTask(
|
| @@ -301,7 +312,7 @@ BrowsingDataRemoverFunction::~BrowsingDataRemoverFunction() {}
|
| void BrowsingDataRemoverFunction::CheckRemovingPluginDataSupported(
|
| scoped_refptr<PluginPrefs> plugin_prefs) {
|
| if (!PluginDataRemoverHelper::IsSupported(plugin_prefs.get()))
|
| - removal_mask_ &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA;
|
| + removal_mask_.erase(&kBrowsingDataTypePluginData);
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| @@ -378,93 +389,108 @@ bool BrowsingDataRemoverFunction::ParseOriginTypeMask(
|
| // Parses the |dataToRemove| argument to generate the removal mask.
|
| // Returns false if parse was not successful, i.e. if 'dataToRemove' is not
|
| // present or any data-type keys don't have supported (boolean) values.
|
| -bool BrowsingDataRemoveFunction::GetRemovalMask(int* removal_mask) {
|
| +bool BrowsingDataRemoveFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| base::DictionaryValue* data_to_remove;
|
| if (!args_->GetDictionary(1, &data_to_remove))
|
| return false;
|
|
|
| - *removal_mask = 0;
|
| + removal_mask->clear();
|
| for (base::DictionaryValue::Iterator i(*data_to_remove);
|
| !i.IsAtEnd();
|
| i.Advance()) {
|
| bool selected = false;
|
| if (!i.value().GetAsBoolean(&selected))
|
| return false;
|
| - if (selected)
|
| - *removal_mask |= MaskForKey(i.key().c_str());
|
| + const BrowsingDataType* data_type = TypeForKey(i.key().c_str());
|
| + if (data_type && selected)
|
| + removal_mask->insert(data_type);
|
| }
|
|
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveAppcacheFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_APPCACHE;
|
| +bool BrowsingDataRemoveAppcacheFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeAppCache);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveCacheFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_CACHE;
|
| +bool BrowsingDataRemoveCacheFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeCache);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveCookiesFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_COOKIES |
|
| - BrowsingDataRemover::REMOVE_CHANNEL_IDS;
|
| +bool BrowsingDataRemoveCookiesFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeCookies);
|
| + removal_mask->insert(&kBrowsingDataTypeChannelIDs);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveDownloadsFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_DOWNLOADS;
|
| +bool BrowsingDataRemoveDownloadsFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeDownloads);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveFileSystemsFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_FILE_SYSTEMS;
|
| +bool BrowsingDataRemoveFileSystemsFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeFileSystems);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveFormDataFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_FORM_DATA;
|
| +bool BrowsingDataRemoveFormDataFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeFormData);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveHistoryFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_HISTORY;
|
| +bool BrowsingDataRemoveHistoryFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeHistory);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveIndexedDBFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_INDEXEDDB;
|
| +bool BrowsingDataRemoveIndexedDBFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeIndexedDB);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveLocalStorageFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_LOCAL_STORAGE;
|
| +bool BrowsingDataRemoveLocalStorageFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeLocalStorage);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemovePluginDataFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_PLUGIN_DATA;
|
| +bool BrowsingDataRemovePluginDataFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypePluginData);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemovePasswordsFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_PASSWORDS;
|
| +bool BrowsingDataRemovePasswordsFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypePasswords);
|
| return true;
|
| }
|
|
|
| bool BrowsingDataRemoveServiceWorkersFunction::GetRemovalMask(
|
| - int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_SERVICE_WORKERS;
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeServiceWorkers);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveCacheStorageFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_CACHE_STORAGE;
|
| +bool BrowsingDataRemoveCacheStorageFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeCacheStorage);
|
| return true;
|
| }
|
|
|
| -bool BrowsingDataRemoveWebSQLFunction::GetRemovalMask(int* removal_mask) {
|
| - *removal_mask = BrowsingDataRemover::REMOVE_WEBSQL;
|
| +bool BrowsingDataRemoveWebSQLFunction::GetRemovalMask(
|
| + std::set<const BrowsingDataType*>* removal_mask) {
|
| + removal_mask->insert(&kBrowsingDataTypeWebSQL);
|
| return true;
|
| }
|
|
|