summaryrefslogtreecommitdiff
path: root/chromium/components/content_settings
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-05 14:08:31 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-11 07:46:53 +0000
commit6a4cabb866f66d4128a97cdc6d9d08ce074f1247 (patch)
treeab00f70a5e89278d6a0d16ff0c42578dc4d84a2d /chromium/components/content_settings
parente733310db58160074f574c429d48f8308c0afe17 (diff)
downloadqtwebengine-chromium-6a4cabb866f66d4128a97cdc6d9d08ce074f1247.tar.gz
BASELINE: Update Chromium to 57.0.2987.144
Change-Id: I29db402ff696c71a04c4dbaec822c2e53efe0267 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'chromium/components/content_settings')
-rw-r--r--chromium/components/content_settings/core/browser/BUILD.gn8
-rw-r--r--chromium/components/content_settings/core/browser/DEPS1
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc64
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_default_provider.cc5
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_global_value_map.cc72
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_global_value_map.h (renamed from chromium/components/content_settings/core/browser/content_settings_binary_value_map.h)37
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_info.h10
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_policy_provider.cc20
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_pref.cc2
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_pref.h8
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_pref_provider.h1
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_provider.h1
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_registry.cc51
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc2
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_utils.cc38
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_utils.h7
-rw-r--r--chromium/components/content_settings/core/browser/content_settings_utils_unittest.cc83
-rw-r--r--chromium/components/content_settings/core/browser/cookie_settings.cc92
-rw-r--r--chromium/components/content_settings/core/browser/cookie_settings.h24
-rw-r--r--chromium/components/content_settings/core/browser/cookie_settings_unittest.cc9
-rw-r--r--chromium/components/content_settings/core/browser/host_content_settings_map.cc154
-rw-r--r--chromium/components/content_settings/core/browser/host_content_settings_map.h25
-rw-r--r--chromium/components/content_settings/core/browser/website_settings_info.cc2
-rw-r--r--chromium/components/content_settings/core/common/BUILD.gn9
-rw-r--r--chromium/components/content_settings/core/common/DEPS1
-rw-r--r--chromium/components/content_settings/core/common/OWNERS5
-rw-r--r--chromium/components/content_settings/core/common/content_settings.cc2
-rw-r--r--chromium/components/content_settings/core/common/content_settings.h3
-rw-r--r--chromium/components/content_settings/core/common/content_settings.mojom72
-rw-r--r--chromium/components/content_settings/core/common/content_settings.typemap27
-rw-r--r--chromium/components/content_settings/core/common/content_settings_pattern.h9
-rw-r--r--chromium/components/content_settings/core/common/content_settings_struct_traits.cc104
-rw-r--r--chromium/components/content_settings/core/common/content_settings_struct_traits.h142
-rw-r--r--chromium/components/content_settings/core/common/content_settings_types.h1
-rw-r--r--chromium/components/content_settings/core/common/pref_names.cc7
-rw-r--r--chromium/components/content_settings/core/common/pref_names.h3
36 files changed, 776 insertions, 325 deletions
diff --git a/chromium/components/content_settings/core/browser/BUILD.gn b/chromium/components/content_settings/core/browser/BUILD.gn
index 15d412ac5d8..3e4fa6688f5 100644
--- a/chromium/components/content_settings/core/browser/BUILD.gn
+++ b/chromium/components/content_settings/core/browser/BUILD.gn
@@ -3,15 +3,16 @@
# found in the LICENSE file.
import("//build/config/features.gni")
+import("//ppapi/features/features.gni")
static_library("browser") {
sources = [
- "content_settings_binary_value_map.cc",
- "content_settings_binary_value_map.h",
"content_settings_default_provider.cc",
"content_settings_default_provider.h",
"content_settings_details.cc",
"content_settings_details.h",
+ "content_settings_global_value_map.cc",
+ "content_settings_global_value_map.h",
"content_settings_info.cc",
"content_settings_info.h",
"content_settings_observable_provider.cc",
@@ -82,8 +83,9 @@ source_set("unit_tests") {
"//base/test:test_support",
"//components/content_settings/core/common",
"//components/content_settings/core/test:test_support",
- "//components/pref_registry:test_support",
+ "//components/pref_registry:pref_registry",
"//components/prefs",
+ "//components/sync_preferences:test_support",
"//extensions/features",
"//testing/gtest",
"//url",
diff --git a/chromium/components/content_settings/core/browser/DEPS b/chromium/components/content_settings/core/browser/DEPS
index dc52ba406c1..eddae7bcb63 100644
--- a/chromium/components/content_settings/core/browser/DEPS
+++ b/chromium/components/content_settings/core/browser/DEPS
@@ -3,6 +3,7 @@ include_rules = [
"+components/content_settings/core/test",
"+components/keyed_service/core",
"+components/pref_registry",
+ "+components/sync_preferences",
"+components/url_formatter",
"+extensions/features",
"+net/base",
diff --git a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc b/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc
deleted file mode 100644
index ddfb7326c12..00000000000
--- a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/content_settings/core/browser/content_settings_binary_value_map.h"
-
-#include <utility>
-
-#include "base/synchronization/lock.h"
-#include "components/content_settings/core/browser/content_settings_rule.h"
-#include "components/content_settings/core/common/content_settings.h"
-
-namespace content_settings {
-
-namespace {
-
-class RuleIteratorBinary : public RuleIterator {
- public:
- RuleIteratorBinary(bool is_enabled, std::unique_ptr<base::AutoLock> auto_lock)
- : is_done_(is_enabled), auto_lock_(std::move(auto_lock)) {}
-
- bool HasNext() const override { return !is_done_; }
-
- Rule Next() override {
- DCHECK(HasNext());
- is_done_ = true;
- return Rule(ContentSettingsPattern::Wildcard(),
- ContentSettingsPattern::Wildcard(),
- new base::FundamentalValue(CONTENT_SETTING_BLOCK));
- }
-
- private:
- bool is_done_;
- std::unique_ptr<base::AutoLock> auto_lock_;
-};
-
-} // namespace
-
-BinaryValueMap::BinaryValueMap() {}
-
-BinaryValueMap::~BinaryValueMap() {}
-
-std::unique_ptr<RuleIterator> BinaryValueMap::GetRuleIterator(
- ContentSettingsType content_type,
- const ResourceIdentifier& resource_identifier,
- std::unique_ptr<base::AutoLock> auto_lock) const {
- if (!resource_identifier.empty())
- return nullptr;
- return std::unique_ptr<RuleIterator>(new RuleIteratorBinary(
- IsContentSettingEnabled(content_type), std::move(auto_lock)));
-}
-
-void BinaryValueMap::SetContentSettingDisabled(ContentSettingsType content_type,
- bool is_disabled) {
- is_enabled_[content_type] = !is_disabled;
-}
-
-bool BinaryValueMap::IsContentSettingEnabled(
- ContentSettingsType content_type) const {
- auto it = is_enabled_.find(content_type);
- return it == is_enabled_.end() || it->second;
-}
-
-} // namespace content_settings
diff --git a/chromium/components/content_settings/core/browser/content_settings_default_provider.cc b/chromium/components/content_settings/core/browser/content_settings_default_provider.cc
index f68ac5a5654..261fedb9d6b 100644
--- a/chromium/components/content_settings/core/browser/content_settings_default_provider.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_default_provider.cc
@@ -177,11 +177,6 @@ DefaultProvider::DefaultProvider(PrefService* prefs, bool incognito)
GetPrefName(CONTENT_SETTINGS_TYPE_MIDI_SYSEX))),
CONTENT_SETTING_NUM_SETTINGS);
UMA_HISTOGRAM_ENUMERATION(
- "ContentSettings.DefaultKeygenSetting",
- IntToContentSetting(prefs_->GetInteger(
- GetPrefName(CONTENT_SETTINGS_TYPE_KEYGEN))),
- CONTENT_SETTING_NUM_SETTINGS);
- UMA_HISTOGRAM_ENUMERATION(
"ContentSettings.DefaultWebBluetoothGuardSetting",
IntToContentSetting(prefs_->GetInteger(
GetPrefName(CONTENT_SETTINGS_TYPE_BLUETOOTH_GUARD))),
diff --git a/chromium/components/content_settings/core/browser/content_settings_global_value_map.cc b/chromium/components/content_settings/core/browser/content_settings_global_value_map.cc
new file mode 100644
index 00000000000..94744fd7574
--- /dev/null
+++ b/chromium/components/content_settings/core/browser/content_settings_global_value_map.cc
@@ -0,0 +1,72 @@
+// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/content_settings/core/browser/content_settings_global_value_map.h"
+
+#include <utility>
+
+#include "base/memory/ptr_util.h"
+#include "base/synchronization/lock.h"
+#include "components/content_settings/core/browser/content_settings_rule.h"
+#include "components/content_settings/core/common/content_settings.h"
+
+namespace content_settings {
+
+namespace {
+
+class RuleIteratorSimple : public RuleIterator {
+ public:
+ RuleIteratorSimple(ContentSetting setting) : setting_(setting) {}
+
+ bool HasNext() const override { return !is_done_; }
+
+ Rule Next() override {
+ DCHECK(HasNext());
+ is_done_ = true;
+ return Rule(ContentSettingsPattern::Wildcard(),
+ ContentSettingsPattern::Wildcard(),
+ new base::FundamentalValue(setting_));
+ }
+
+ private:
+ const ContentSetting setting_;
+ bool is_done_ = false;
+
+ DISALLOW_COPY_AND_ASSIGN(RuleIteratorSimple);
+};
+
+} // namespace
+
+GlobalValueMap::GlobalValueMap() {}
+
+GlobalValueMap::~GlobalValueMap() {}
+
+std::unique_ptr<RuleIterator> GlobalValueMap::GetRuleIterator(
+ ContentSettingsType content_type,
+ const ResourceIdentifier& resource_identifier) const {
+ if (!resource_identifier.empty())
+ return nullptr;
+
+ auto it = settings_.find(content_type);
+ if (it == settings_.end())
+ return nullptr;
+
+ return base::MakeUnique<RuleIteratorSimple>(it->second);
+}
+
+void GlobalValueMap::SetContentSetting(ContentSettingsType content_type,
+ ContentSetting setting) {
+ if (setting == CONTENT_SETTING_DEFAULT)
+ settings_.erase(content_type);
+ else
+ settings_[content_type] = setting;
+}
+
+ContentSetting GlobalValueMap::GetContentSetting(
+ ContentSettingsType content_type) const {
+ auto it = settings_.find(content_type);
+ return it == settings_.end() ? CONTENT_SETTING_DEFAULT : it->second;
+}
+
+} // namespace content_settings
diff --git a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.h b/chromium/components/content_settings/core/browser/content_settings_global_value_map.h
index dbce8982bc1..99407a1ab08 100644
--- a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.h
+++ b/chromium/components/content_settings/core/browser/content_settings_global_value_map.h
@@ -2,43 +2,42 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_BINARY_VALUE_MAP_H_
-#define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_BINARY_VALUE_MAP_H_
+#ifndef COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_GLOBAL_VALUE_MAP_H_
+#define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_GLOBAL_VALUE_MAP_H_
#include <map>
#include "components/content_settings/core/browser/content_settings_provider.h"
#include "components/content_settings/core/common/content_settings_types.h"
-namespace base {
-class AutoLock;
-} // namespace base
-
namespace content_settings {
class RuleIterator;
-// A simplified value map that can be used to disable or enable the entire
-// Content Setting. The default behaviour is enabling the Content Setting if
-// it is not set explicitly.
-class BinaryValueMap {
+// A simplified value map that sets global content settings, i.e. applying to
+// all sites.
+// Note that this class does not do any synchronization. As content settings are
+// accessed from multiple threads, it's the responsibility of the client to
+// prevent concurrent access.
+class GlobalValueMap {
public:
- BinaryValueMap();
- ~BinaryValueMap();
+ GlobalValueMap();
+ ~GlobalValueMap();
// Returns nullptr to indicate the RuleIterator is empty.
std::unique_ptr<RuleIterator> GetRuleIterator(
ContentSettingsType content_type,
- const ResourceIdentifier& resource_identifier,
- std::unique_ptr<base::AutoLock> lock) const;
- void SetContentSettingDisabled(ContentSettingsType content_type,
- bool disabled);
- bool IsContentSettingEnabled(ContentSettingsType content_type) const;
+ const ResourceIdentifier& resource_identifier) const;
+ void SetContentSetting(ContentSettingsType content_type,
+ ContentSetting setting);
+ ContentSetting GetContentSetting(ContentSettingsType content_type) const;
private:
- std::map<ContentSettingsType, bool> is_enabled_;
+ std::map<ContentSettingsType, ContentSetting> settings_;
+
+ DISALLOW_COPY_AND_ASSIGN(GlobalValueMap);
};
} // namespace content_settings
-#endif // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_BINARY_VALUE_MAP_H_
+#endif // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_GLOBAL_VALUE_MAP_H_
diff --git a/chromium/components/content_settings/core/browser/content_settings_info.h b/chromium/components/content_settings/core/browser/content_settings_info.h
index b7018dfff52..d1eb3a58248 100644
--- a/chromium/components/content_settings/core/browser/content_settings_info.h
+++ b/chromium/components/content_settings/core/browser/content_settings_info.h
@@ -21,12 +21,14 @@ class ContentSettingsInfo {
enum IncognitoBehavior {
// Content setting will be inherited from regular to incognito profiles
// as usual.
+ // TODO(dullweber): Remove as soon as INHERIT_IF_LESS_PERMISSIVE was tested.
INHERIT_IN_INCOGNITO,
- // Content setting will only partially inherit from regular to incognito
- // profiles: BLOCK will inherit as usual, but ALLOW will become ASK.
- // This is unusual, so seek privacy review before using this.
- INHERIT_IN_INCOGNITO_EXCEPT_ALLOW
+ // Content settings can be inherited if the setting is less permissive
+ // than the initial default value of the content setting. Example: A setting
+ // with an initial value of ASK will be inherited if it is set to BLOCK or
+ // ASK but ALLOW will become ASK in incognito mode.
+ INHERIT_IF_LESS_PERMISSIVE
};
// This object does not take ownership of |website_settings_info|.
diff --git a/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc b/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc
index 78a12a27a91..81a059b6e0d 100644
--- a/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc
@@ -55,11 +55,7 @@ const PrefsForManagedContentSettingsMapEntry
{prefs::kManagedPopupsAllowedForUrls, CONTENT_SETTINGS_TYPE_POPUPS,
CONTENT_SETTING_ALLOW},
{prefs::kManagedPopupsBlockedForUrls, CONTENT_SETTINGS_TYPE_POPUPS,
- CONTENT_SETTING_BLOCK},
- {prefs::kManagedKeygenAllowedForUrls,
- CONTENT_SETTINGS_TYPE_KEYGEN, CONTENT_SETTING_ALLOW},
- {prefs::kManagedKeygenBlockedForUrls,
- CONTENT_SETTINGS_TYPE_KEYGEN, CONTENT_SETTING_BLOCK}};
+ CONTENT_SETTING_BLOCK}};
} // namespace
@@ -89,7 +85,6 @@ const PolicyProvider::PrefsForManagedDefaultMapEntry
prefs::kManagedDefaultNotificationsSetting},
{CONTENT_SETTINGS_TYPE_PLUGINS, prefs::kManagedDefaultPluginsSetting},
{CONTENT_SETTINGS_TYPE_POPUPS, prefs::kManagedDefaultPopupsSetting},
- {CONTENT_SETTINGS_TYPE_KEYGEN, prefs::kManagedDefaultKeygenSetting},
{CONTENT_SETTINGS_TYPE_BLUETOOTH_GUARD,
prefs::kManagedDefaultWebBluetoothGuardSetting},
};
@@ -111,8 +106,6 @@ void PolicyProvider::RegisterProfilePrefs(
registry->RegisterListPref(prefs::kManagedPluginsBlockedForUrls);
registry->RegisterListPref(prefs::kManagedPopupsAllowedForUrls);
registry->RegisterListPref(prefs::kManagedPopupsBlockedForUrls);
- registry->RegisterListPref(prefs::kManagedKeygenAllowedForUrls);
- registry->RegisterListPref(prefs::kManagedKeygenBlockedForUrls);
// Preferences for default content setting policies. If a policy is not set of
// the corresponding preferences below is set to CONTENT_SETTING_DEFAULT.
registry->RegisterIntegerPref(prefs::kManagedDefaultCookiesSetting,
@@ -131,8 +124,6 @@ void PolicyProvider::RegisterProfilePrefs(
CONTENT_SETTING_DEFAULT);
registry->RegisterIntegerPref(prefs::kManagedDefaultPopupsSetting,
CONTENT_SETTING_DEFAULT);
- registry->RegisterIntegerPref(prefs::kManagedDefaultKeygenSetting,
- CONTENT_SETTING_DEFAULT);
registry->RegisterIntegerPref(prefs::kManagedDefaultWebBluetoothGuardSetting,
CONTENT_SETTING_DEFAULT);
}
@@ -162,8 +153,6 @@ PolicyProvider::PolicyProvider(PrefService* prefs) : prefs_(prefs) {
pref_change_registrar_.Add(prefs::kManagedPluginsBlockedForUrls, callback);
pref_change_registrar_.Add(prefs::kManagedPopupsAllowedForUrls, callback);
pref_change_registrar_.Add(prefs::kManagedPopupsBlockedForUrls, callback);
- pref_change_registrar_.Add(prefs::kManagedKeygenAllowedForUrls, callback);
- pref_change_registrar_.Add(prefs::kManagedKeygenBlockedForUrls, callback);
// The following preferences are only used to indicate if a default content
// setting is managed and to hold the managed default setting value. If the
// value for any of the following preferences is set then the corresponding
@@ -182,7 +171,6 @@ PolicyProvider::PolicyProvider(PrefService* prefs) : prefs_(prefs) {
prefs::kManagedDefaultMediaStreamSetting, callback);
pref_change_registrar_.Add(prefs::kManagedDefaultPluginsSetting, callback);
pref_change_registrar_.Add(prefs::kManagedDefaultPopupsSetting, callback);
- pref_change_registrar_.Add(prefs::kManagedDefaultKeygenSetting, callback);
pref_change_registrar_.Add(prefs::kManagedDefaultWebBluetoothGuardSetting,
callback);
}
@@ -300,7 +288,7 @@ void PolicyProvider::GetAutoSelectCertificateSettingsFromPreferences(
std::unique_ptr<base::Value> value = base::JSONReader::Read(
pattern_filter_json, base::JSON_ALLOW_TRAILING_COMMAS);
- if (!value || !value->IsType(base::Value::TYPE_DICTIONARY)) {
+ if (!value || !value->IsType(base::Value::Type::DICTIONARY)) {
VLOG(1) << "Ignoring invalid certificate auto select setting. Reason:"
" Invalid JSON object: " << pattern_filter_json;
continue;
@@ -428,9 +416,7 @@ void PolicyProvider::OnPreferenceChanged(const std::string& name) {
name == prefs::kManagedPluginsAllowedForUrls ||
name == prefs::kManagedPluginsBlockedForUrls ||
name == prefs::kManagedPopupsAllowedForUrls ||
- name == prefs::kManagedPopupsBlockedForUrls ||
- name == prefs::kManagedKeygenAllowedForUrls ||
- name == prefs::kManagedKeygenBlockedForUrls) {
+ name == prefs::kManagedPopupsBlockedForUrls) {
ReadManagedContentSettings(true);
ReadManagedDefaultSettings();
}
diff --git a/chromium/components/content_settings/core/browser/content_settings_pref.cc b/chromium/components/content_settings/core/browser/content_settings_pref.cc
index e19199368aa..0306c586032 100644
--- a/chromium/components/content_settings/core/browser/content_settings_pref.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_pref.cc
@@ -50,7 +50,7 @@ bool IsValueAllowedForType(const base::Value* value, ContentSettingsType type) {
// TODO(raymes): We should permit different types of base::Value for
// website settings.
- return value->GetType() == base::Value::TYPE_DICTIONARY;
+ return value->GetType() == base::Value::Type::DICTIONARY;
}
} // namespace
diff --git a/chromium/components/content_settings/core/browser/content_settings_pref.h b/chromium/components/content_settings/core/browser/content_settings_pref.h
index aa2ab178e3d..d06fe01e28b 100644
--- a/chromium/components/content_settings/core/browser/content_settings_pref.h
+++ b/chromium/components/content_settings/core/browser/content_settings_pref.h
@@ -27,10 +27,6 @@ class Clock;
class DictionaryValue;
}
-namespace user_prefs {
-class PrefRegistrySyncable;
-}
-
namespace content_settings {
class RuleIterator;
@@ -78,10 +74,6 @@ class ContentSettingsPref {
bool TryLockForTesting() const;
private:
- // TODO(msramek): Currently only needed in the unittest to get the
- // corresponding pref name. Remove once pref names are in WebsiteSettingsInfo.
- friend class DeadlockCheckerObserver;
-
// Reads all content settings exceptions from the preference and loads them
// into the |value_map_|. The |value_map_| is cleared first.
void ReadContentSettingsFromPref();
diff --git a/chromium/components/content_settings/core/browser/content_settings_pref_provider.h b/chromium/components/content_settings/core/browser/content_settings_pref_provider.h
index 16c88610fa3..0c08dfc1657 100644
--- a/chromium/components/content_settings/core/browser/content_settings_pref_provider.h
+++ b/chromium/components/content_settings/core/browser/content_settings_pref_provider.h
@@ -20,7 +20,6 @@ class PrefService;
namespace base {
class Clock;
-class DictionaryValue;
}
namespace user_prefs {
diff --git a/chromium/components/content_settings/core/browser/content_settings_provider.h b/chromium/components/content_settings/core/browser/content_settings_provider.h
index 057ed81ba7e..3ee28c7d929 100644
--- a/chromium/components/content_settings/core/browser/content_settings_provider.h
+++ b/chromium/components/content_settings/core/browser/content_settings_provider.h
@@ -18,7 +18,6 @@ class ContentSettingsPattern;
namespace content_settings {
-struct Rule;
class RuleIterator;
class ProviderInterface {
diff --git a/chromium/components/content_settings/core/browser/content_settings_registry.cc b/chromium/components/content_settings/core/browser/content_settings_registry.cc
index b147dca2b92..917c6cc3348 100644
--- a/chromium/components/content_settings/core/browser/content_settings_registry.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_registry.cc
@@ -125,7 +125,7 @@ void ContentSettingsRegistry::Init() {
CONTENT_SETTING_SESSION_ONLY),
WebsiteSettingsInfo::REQUESTING_DOMAIN_ONLY_SCOPE,
WebsiteSettingsRegistry::ALL_PLATFORMS,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_IMAGES, "images", CONTENT_SETTING_ALLOW,
WebsiteSettingsInfo::SYNCABLE,
@@ -134,7 +134,7 @@ void ContentSettingsRegistry::Init() {
ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK),
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_JAVASCRIPT, "javascript",
CONTENT_SETTING_ALLOW, WebsiteSettingsInfo::SYNCABLE,
@@ -144,7 +144,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_PLUGINS, "plugins",
CONTENT_SETTING_DETECT_IMPORTANT_CONTENT,
@@ -155,7 +155,7 @@ void ContentSettingsRegistry::Init() {
CONTENT_SETTING_DETECT_IMPORTANT_CONTENT),
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_POPUPS, "popups", CONTENT_SETTING_BLOCK,
WebsiteSettingsInfo::SYNCABLE,
@@ -164,7 +164,7 @@ void ContentSettingsRegistry::Init() {
ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK),
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::ALL_PLATFORMS,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_GEOLOCATION, "geolocation",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -174,7 +174,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, "notifications",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -186,7 +186,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsRegistry::PLATFORM_ANDROID,
// See also NotificationPermissionContext::DecidePermission which
// implements additional incognito exceptions.
- ContentSettingsInfo::INHERIT_IN_INCOGNITO_EXCEPT_ALLOW);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, "media-stream-mic",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -196,7 +196,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, "media-stream-camera",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -206,7 +206,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_PPAPI_BROKER, "ppapi-broker",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -215,7 +215,7 @@ void ContentSettingsRegistry::Init() {
CONTENT_SETTING_ASK),
WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, "automatic-downloads",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::SYNCABLE,
@@ -226,7 +226,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, "midi-sysex", CONTENT_SETTING_ASK,
WebsiteSettingsInfo::SYNCABLE, WhitelistedSchemes(),
@@ -235,7 +235,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER,
"protected-media-identifier", CONTENT_SETTING_ASK,
@@ -245,7 +245,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE,
WebsiteSettingsRegistry::PLATFORM_ANDROID |
WebsiteSettingsRegistry::PLATFORM_CHROMEOS,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_DURABLE_STORAGE, "durable-storage",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -254,15 +254,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
-
- Register(CONTENT_SETTINGS_TYPE_KEYGEN, "keygen", CONTENT_SETTING_BLOCK,
- WebsiteSettingsInfo::SYNCABLE, WhitelistedSchemes(),
- ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK),
- WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
- WebsiteSettingsRegistry::DESKTOP |
- WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC, "background-sync",
CONTENT_SETTING_ALLOW, WebsiteSettingsInfo::UNSYNCABLE,
@@ -271,7 +263,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_AUTOPLAY, "autoplay", CONTENT_SETTING_ALLOW,
WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(),
@@ -279,7 +271,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
// Content settings that aren't used to store any data. TODO(raymes): use a
// different mechanism rather than content settings to represent these.
@@ -290,14 +282,14 @@ void ContentSettingsRegistry::Init() {
WhitelistedSchemes(), ValidSettings(),
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, "mixed-script",
CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE,
WhitelistedSchemes(), ValidSettings(),
WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::DESKTOP,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
Register(CONTENT_SETTINGS_TYPE_BLUETOOTH_GUARD, "bluetooth-guard",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
@@ -306,7 +298,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE,
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
- ContentSettingsInfo::INHERIT_IN_INCOGNITO);
+ ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE);
}
void ContentSettingsRegistry::Register(
@@ -321,11 +313,6 @@ void ContentSettingsRegistry::Register(
ContentSettingsInfo::IncognitoBehavior incognito_behavior) {
// Ensure that nothing has been registered yet for the given type.
DCHECK(!website_settings_registry_->Get(type));
- DCHECK(incognito_behavior !=
- ContentSettingsInfo::INHERIT_IN_INCOGNITO_EXCEPT_ALLOW ||
- base::ContainsKey(valid_settings, CONTENT_SETTING_ASK))
- << "If INHERIT_IN_INCOGNITO_EXCEPT_ALLOW is set, ASK must be listed as a "
- "valid setting.";
std::unique_ptr<base::Value> default_value(
new base::FundamentalValue(static_cast<int>(initial_default_value)));
const WebsiteSettingsInfo* website_settings_info =
diff --git a/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc b/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc
index bf595c44e03..d63d180e0bf 100644
--- a/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc
@@ -71,7 +71,7 @@ TEST_F(ContentSettingsRegistryTest, Properties) {
// Check the other properties are populated correctly.
EXPECT_TRUE(info->IsSettingValid(CONTENT_SETTING_SESSION_ONLY));
EXPECT_FALSE(info->IsSettingValid(CONTENT_SETTING_ASK));
- EXPECT_EQ(ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ EXPECT_EQ(ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE,
info->incognito_behavior());
// Check the WebsiteSettingsInfo is populated correctly.
diff --git a/chromium/components/content_settings/core/browser/content_settings_utils.cc b/chromium/components/content_settings/core/browser/content_settings_utils.cc
index 176c866beeb..9458bf5007e 100644
--- a/chromium/components/content_settings/core/browser/content_settings_utils.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_utils.cc
@@ -37,6 +37,25 @@ static_assert(arraysize(kContentSettingsStringMapping) ==
"kContentSettingsToFromString should have "
"CONTENT_SETTING_NUM_SETTINGS elements");
+// Content settings sorted from most to least permissive. The order is chosen
+// to check if a permission grants more rights than another. This is intuitive
+// for ALLOW, ASK and BLOCK. SESSION_ONLY and DETECT_IMPORTANT_CONTENT are never
+// used in the same setting so their respective order is not important but both
+// belong between ALLOW and ASK. DEFAULT should never be used and is therefore
+// not part of this array.
+const ContentSetting kContentSettingOrder[] = {
+ CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_SESSION_ONLY,
+ CONTENT_SETTING_DETECT_IMPORTANT_CONTENT,
+ CONTENT_SETTING_ASK,
+ CONTENT_SETTING_BLOCK
+};
+
+static_assert(arraysize(kContentSettingOrder) ==
+ CONTENT_SETTING_NUM_SETTINGS - 1,
+ "kContentSettingOrder should have CONTENT_SETTING_NUM_SETTINGS-1"
+ "entries");
+
} // namespace
namespace content_settings {
@@ -96,10 +115,8 @@ PatternPair ParsePatternString(const std::string& pattern_str) {
}
PatternPair pattern_pair;
- pattern_pair.first =
- ContentSettingsPattern::FromString(pattern_str_list[0]);
- pattern_pair.second =
- ContentSettingsPattern::FromString(pattern_str_list[1]);
+ pattern_pair.first = ContentSettingsPattern::FromString(pattern_str_list[0]);
+ pattern_pair.second = ContentSettingsPattern::FromString(pattern_str_list[1]);
return pattern_pair;
}
@@ -158,4 +175,17 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
&(rules->autoplay_rules));
}
+bool IsMorePermissive(ContentSetting a, ContentSetting b) {
+ // Check whether |a| or |b| is reached first in kContentSettingOrder.
+ // If |a| is first, it means that |a| is more permissive than |b|.
+ for (ContentSetting setting : kContentSettingOrder) {
+ if (setting == b)
+ return false;
+ if (setting == a)
+ return true;
+ }
+ NOTREACHED();
+ return true;
+}
+
} // namespace content_settings
diff --git a/chromium/components/content_settings/core/browser/content_settings_utils.h b/chromium/components/content_settings/core/browser/content_settings_utils.h
index e3d5a4a171a..fdcaf0bc6fa 100644
--- a/chromium/components/content_settings/core/browser/content_settings_utils.h
+++ b/chromium/components/content_settings/core/browser/content_settings_utils.h
@@ -18,14 +18,10 @@ namespace base {
class Value;
}
-class GURL;
class HostContentSettingsMap;
namespace content_settings {
-class ProviderInterface;
-class RuleIterator;
-
typedef std::pair<ContentSettingsPattern, ContentSettingsPattern> PatternPair;
// Helper class to iterate over only the values in a map.
@@ -86,6 +82,9 @@ std::unique_ptr<base::Value> ContentSettingToValue(ContentSetting setting);
void GetRendererContentSettingRules(const HostContentSettingsMap* map,
RendererContentSettingRules* rules);
+// Returns true if setting |a| is more permissive than setting |b|.
+bool IsMorePermissive(ContentSetting a, ContentSetting b);
+
} // namespace content_settings
#endif // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_UTILS_H_
diff --git a/chromium/components/content_settings/core/browser/content_settings_utils_unittest.cc b/chromium/components/content_settings/core/browser/content_settings_utils_unittest.cc
index f51e46148e2..f38264b8b9a 100644
--- a/chromium/components/content_settings/core/browser/content_settings_utils_unittest.cc
+++ b/chromium/components/content_settings/core/browser/content_settings_utils_unittest.cc
@@ -12,6 +12,8 @@
#include "components/content_settings/core/test/content_settings_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace content_settings {
+
namespace {
const char* const kContentSettingNames[] = {
@@ -28,36 +30,34 @@ static_assert(arraysize(kContentSettingNames) == CONTENT_SETTING_NUM_SETTINGS,
} // namespace
TEST(ContentSettingsUtilsTest, ParsePatternString) {
- content_settings::PatternPair pattern_pair;
+ PatternPair pattern_pair;
- pattern_pair = content_settings::ParsePatternString(std::string());
+ pattern_pair = ParsePatternString(std::string());
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
- pattern_pair = content_settings::ParsePatternString(",");
+ pattern_pair = ParsePatternString(",");
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
- pattern_pair = content_settings::ParsePatternString("http://www.foo.com");
+ pattern_pair = ParsePatternString("http://www.foo.com");
EXPECT_TRUE(pattern_pair.first.IsValid());
EXPECT_EQ(pattern_pair.second, ContentSettingsPattern::Wildcard());
// This inconsistency is to recover from some broken code.
- pattern_pair = content_settings::ParsePatternString("http://www.foo.com,");
+ pattern_pair = ParsePatternString("http://www.foo.com,");
EXPECT_TRUE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
- pattern_pair = content_settings::ParsePatternString(
- "http://www.foo.com,http://www.bar.com");
+ pattern_pair = ParsePatternString("http://www.foo.com,http://www.bar.com");
EXPECT_TRUE(pattern_pair.first.IsValid());
EXPECT_TRUE(pattern_pair.second.IsValid());
- pattern_pair = content_settings::ParsePatternString(
- "http://www.foo.com,http://www.bar.com,");
+ pattern_pair = ParsePatternString("http://www.foo.com,http://www.bar.com,");
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
- pattern_pair = content_settings::ParsePatternString(
+ pattern_pair = ParsePatternString(
"http://www.foo.com,http://www.bar.com,http://www.error.com");
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
@@ -65,22 +65,77 @@ TEST(ContentSettingsUtilsTest, ParsePatternString) {
TEST(ContentSettingsUtilsTest, ContentSettingsStringMap) {
std::string setting_string =
- content_settings::ContentSettingToString(CONTENT_SETTING_NUM_SETTINGS);
+ ContentSettingToString(CONTENT_SETTING_NUM_SETTINGS);
EXPECT_TRUE(setting_string.empty());
for (size_t i = 0; i < arraysize(kContentSettingNames); ++i) {
ContentSetting setting = static_cast<ContentSetting>(i);
- setting_string = content_settings::ContentSettingToString(setting);
+ setting_string = ContentSettingToString(setting);
EXPECT_EQ(kContentSettingNames[i], setting_string);
ContentSetting converted_setting;
if (i == 0) {
- EXPECT_FALSE(content_settings::ContentSettingFromString(
+ EXPECT_FALSE(ContentSettingFromString(
kContentSettingNames[i], &converted_setting));
} else {
- EXPECT_TRUE(content_settings::ContentSettingFromString(
+ EXPECT_TRUE(ContentSettingFromString(
kContentSettingNames[i], &converted_setting));
}
EXPECT_EQ(setting, converted_setting);
}
}
+
+TEST(ContentSettingsUtilsTest, IsMorePermissive) {
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK));
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_ALLOW, CONTENT_SETTING_ASK));
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_ALLOW, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_ALLOW, CONTENT_SETTING_SESSION_ONLY));
+
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ASK));
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_BLOCK));
+
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_ASK));
+ EXPECT_TRUE(IsMorePermissive(
+ CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_BLOCK));
+
+ EXPECT_TRUE(IsMorePermissive(CONTENT_SETTING_ASK, CONTENT_SETTING_BLOCK));
+
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_BLOCK, CONTENT_SETTING_ALLOW));
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_BLOCK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_BLOCK, CONTENT_SETTING_SESSION_ONLY));
+ EXPECT_FALSE(IsMorePermissive(CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK));
+
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_ASK, CONTENT_SETTING_ALLOW));
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_ASK, CONTENT_SETTING_SESSION_ONLY));
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_ASK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
+
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ALLOW));
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_ALLOW));
+
+ EXPECT_FALSE(IsMorePermissive(
+ CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW));
+
+ // Check that all possible ContentSettings except CONTENT_SETTING_DEFAULT are
+ // handled.
+ for (int i = 1; i < CONTENT_SETTING_NUM_SETTINGS; ++i) {
+ auto s = static_cast<ContentSetting>(i);
+ EXPECT_FALSE(IsMorePermissive(s, s));
+ }
+}
+
+} // namespace content_settings \ No newline at end of file
diff --git a/chromium/components/content_settings/core/browser/cookie_settings.cc b/chromium/components/content_settings/core/browser/cookie_settings.cc
index b5db52bd258..9f616f4bbc9 100644
--- a/chromium/components/content_settings/core/browser/cookie_settings.cc
+++ b/chromium/components/content_settings/core/browser/cookie_settings.cc
@@ -58,18 +58,36 @@ ContentSetting CookieSettings::GetDefaultCookieSetting(
bool CookieSettings::IsReadingCookieAllowed(const GURL& url,
const GURL& first_party_url) const {
- ContentSetting setting = GetCookieSetting(url, first_party_url, false, NULL);
- return IsAllowed(setting);
+ ContentSetting reading_setting;
+ GetCookieSetting(url, first_party_url, nullptr, &reading_setting,
+ nullptr /* setting_cookie */);
+ return IsAllowed(reading_setting);
}
bool CookieSettings::IsSettingCookieAllowed(const GURL& url,
const GURL& first_party_url) const {
- ContentSetting setting = GetCookieSetting(url, first_party_url, true, NULL);
- return IsAllowed(setting);
+ ContentSetting setting_setting;
+ GetCookieSetting(url, first_party_url, nullptr, nullptr /* reading_cookie */,
+ &setting_setting);
+ return IsAllowed(setting_setting);
+}
+
+void CookieSettings::GetReadingAndSettingCookieAllowed(
+ const GURL& url,
+ const GURL& first_party_url,
+ bool* reading_cookie_allowed,
+ bool* setting_cookie_allowed) const {
+ ContentSetting reading_setting;
+ ContentSetting setting_setting;
+ GetCookieSetting(url, first_party_url, nullptr, &reading_setting,
+ &setting_setting);
+ *reading_cookie_allowed = IsAllowed(reading_setting);
+ *setting_cookie_allowed = IsAllowed(setting_setting);
}
bool CookieSettings::IsCookieSessionOnly(const GURL& origin) const {
- ContentSetting setting = GetCookieSetting(origin, origin, true, NULL);
+ ContentSetting setting;
+ GetCookieSetting(origin, origin, nullptr, nullptr, &setting);
DCHECK(IsValidSetting(setting));
return (setting == CONTENT_SETTING_SESSION_ONLY);
}
@@ -122,18 +140,29 @@ void CookieSettings::ShutdownOnUIThread() {
pref_change_registrar_.RemoveAll();
}
-ContentSetting CookieSettings::GetCookieSetting(const GURL& url,
- const GURL& first_party_url,
- bool setting_cookie,
- SettingSource* source) const {
+void CookieSettings::GetCookieSetting(const GURL& url,
+ const GURL& first_party_url,
+ content_settings::SettingSource* source,
+ ContentSetting* reading_cookie,
+ ContentSetting* setting_cookie) const {
// Auto-allow in extensions or for WebUI embedded in a secure origin.
- if (url.SchemeIsCryptographic() && first_party_url.SchemeIs(kChromeUIScheme))
- return CONTENT_SETTING_ALLOW;
+ if (first_party_url.SchemeIs(kChromeUIScheme) &&
+ url.SchemeIsCryptographic()) {
+ if (reading_cookie)
+ *reading_cookie = CONTENT_SETTING_ALLOW;
+ if (setting_cookie)
+ *setting_cookie = CONTENT_SETTING_ALLOW;
+ return;
+ }
#if BUILDFLAG(ENABLE_EXTENSIONS)
- if (url.SchemeIs(kExtensionScheme) &&
- first_party_url.SchemeIs(kExtensionScheme)) {
- return CONTENT_SETTING_ALLOW;
+ if (url.SchemeIs(extension_scheme_) &&
+ first_party_url.SchemeIs(extension_scheme_)) {
+ if (reading_cookie)
+ *reading_cookie = CONTENT_SETTING_ALLOW;
+ if (setting_cookie)
+ *setting_cookie = CONTENT_SETTING_ALLOW;
+ return;
}
#endif
@@ -147,26 +176,27 @@ ContentSetting CookieSettings::GetCookieSetting(const GURL& url,
*source = info.source;
// If no explicit exception has been made and third-party cookies are blocked
- // by default, apply that rule.
- if (info.primary_pattern.MatchesAllHosts() &&
- info.secondary_pattern.MatchesAllHosts() &&
- ShouldBlockThirdPartyCookies() &&
- !first_party_url.SchemeIs(extension_scheme_)) {
- net::StaticCookiePolicy policy(
- net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES);
- int rv;
- if (setting_cookie)
- rv = policy.CanSetCookie(url, first_party_url);
- else
- rv = policy.CanGetCookies(url, first_party_url);
- DCHECK_NE(net::ERR_IO_PENDING, rv);
- if (rv != net::OK)
- return CONTENT_SETTING_BLOCK;
- }
+ // by default, apply CONTENT_SETTING_BLOCKED.
+ bool block_third = info.primary_pattern.MatchesAllHosts() &&
+ info.secondary_pattern.MatchesAllHosts() &&
+ ShouldBlockThirdPartyCookies() &&
+ !first_party_url.SchemeIs(extension_scheme_);
+ net::StaticCookiePolicy policy(
+ net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES);
// We should always have a value, at least from the default provider.
DCHECK(value.get());
- return ValueToContentSetting(value.get());
+ ContentSetting setting = ValueToContentSetting(value.get());
+ if (reading_cookie) {
+ bool block =
+ block_third && policy.CanGetCookies(url, first_party_url) != net::OK;
+ *reading_cookie = block ? CONTENT_SETTING_BLOCK : setting;
+ }
+ if (setting_cookie) {
+ bool block =
+ block_third && policy.CanSetCookie(url, first_party_url) != net::OK;
+ *setting_cookie = block ? CONTENT_SETTING_BLOCK : setting;
+ }
}
CookieSettings::~CookieSettings() {
diff --git a/chromium/components/content_settings/core/browser/cookie_settings.h b/chromium/components/content_settings/core/browser/cookie_settings.h
index 26ffa8068ba..b1653f37a5a 100644
--- a/chromium/components/content_settings/core/browser/cookie_settings.h
+++ b/chromium/components/content_settings/core/browser/cookie_settings.h
@@ -17,7 +17,6 @@
#include "components/keyed_service/core/refcounted_keyed_service.h"
#include "components/prefs/pref_change_registrar.h"
-class ContentSettingsPattern;
class GURL;
class PrefService;
@@ -37,7 +36,7 @@ class CookieSettings : public RefcountedKeyedService {
// Returns the default content setting (CONTENT_SETTING_ALLOW,
// CONTENT_SETTING_BLOCK, or CONTENT_SETTING_SESSION_ONLY) for cookies. If
- // |provider_id| is not NULL, the id of the provider which provided the
+ // |provider_id| is not nullptr, the id of the provider which provided the
// default setting is assigned to it.
//
// This may be called on any thread.
@@ -57,6 +56,15 @@ class CookieSettings : public RefcountedKeyedService {
bool IsSettingCookieAllowed(const GURL& url,
const GURL& first_party_url) const;
+ // Gets the results from IsReadingCookieAllowed and IsSettingCookieAllowed in
+ // a performance efficient way.
+ //
+ // This may be called on any thread.
+ void GetReadingAndSettingCookieAllowed(const GURL& url,
+ const GURL& first_party_url,
+ bool* reading_cookie_allowed,
+ bool* setting_cookie_allowed) const;
+
// Returns true if the cookie set by a page identified by |url| should be
// session only. Querying this only makes sense if |IsSettingCookieAllowed|
// has returned true.
@@ -66,7 +74,7 @@ class CookieSettings : public RefcountedKeyedService {
// Returns all patterns with a non-default cookie setting, mapped to their
// actual settings, in the precedence order of the setting rules. |settings|
- // must be a non-NULL outparam.
+ // must be a non-nullptr outparam.
//
// This may be called on any thread.
void GetCookieSettings(ContentSettingsForOneType* settings) const;
@@ -95,11 +103,11 @@ class CookieSettings : public RefcountedKeyedService {
void ShutdownOnUIThread() override;
// A helper for applying third party cookie blocking rules.
- ContentSetting GetCookieSetting(
- const GURL& url,
- const GURL& first_party_url,
- bool setting_cookie,
- content_settings::SettingSource* source) const;
+ void GetCookieSetting(const GURL& url,
+ const GURL& first_party_url,
+ content_settings::SettingSource* source,
+ ContentSetting* reading_cookie,
+ ContentSetting* setting_cookie) const;
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
diff --git a/chromium/components/content_settings/core/browser/cookie_settings_unittest.cc b/chromium/components/content_settings/core/browser/cookie_settings_unittest.cc
index 79a2f7383c8..2299b95802a 100644
--- a/chromium/components/content_settings/core/browser/cookie_settings_unittest.cc
+++ b/chromium/components/content_settings/core/browser/cookie_settings_unittest.cc
@@ -4,10 +4,11 @@
#include "components/content_settings/core/browser/cookie_settings.h"
+#include "base/message_loop/message_loop.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/content_settings/core/common/pref_names.h"
-#include "components/pref_registry/testing_pref_service_syncable.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
#include "extensions/features/features.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -38,7 +39,11 @@ class CookieSettingsTest : public testing::Test {
~CookieSettingsTest() override { settings_map_->ShutdownOnUIThread(); }
protected:
- user_prefs::TestingPrefServiceSyncable prefs_;
+ // There must be a valid ThreadTaskRunnerHandle in HostContentSettingsMap's
+ // scope.
+ base::MessageLoop message_loop_;
+
+ sync_preferences::TestingPrefServiceSyncable prefs_;
scoped_refptr<HostContentSettingsMap> settings_map_;
scoped_refptr<CookieSettings> cookie_settings_;
const GURL kBlockedSite;
diff --git a/chromium/components/content_settings/core/browser/host_content_settings_map.cc b/chromium/components/content_settings/core/browser/host_content_settings_map.cc
index 1f29b5b4d15..4ebb241f384 100644
--- a/chromium/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/chromium/components/content_settings/core/browser/host_content_settings_map.cc
@@ -14,6 +14,7 @@
#include "base/metrics/histogram_macros.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/thread_task_runner_handle.h"
#include "base/time/clock.h"
#include "build/build_config.h"
#include "components/content_settings/core/browser/content_settings_default_provider.h"
@@ -36,6 +37,7 @@
#include "url/gurl.h"
using content_settings::WebsiteSettingsInfo;
+using content_settings::ContentSettingsInfo;
namespace {
@@ -97,30 +99,37 @@ std::unique_ptr<base::Value> ProcessIncognitoInheritanceBehavior(
ContentSettingsType content_type,
std::unique_ptr<base::Value> value) {
// Website setting inheritance can be completely disallowed.
- const content_settings::WebsiteSettingsInfo* website_settings_info =
+ const WebsiteSettingsInfo* website_settings_info =
content_settings::WebsiteSettingsRegistry::GetInstance()->Get(
content_type);
if (website_settings_info &&
website_settings_info->incognito_behavior() ==
- content_settings::WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO) {
+ WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO) {
return nullptr;
}
- // Content setting inheritance can be disabled for CONTENT_SETTING_ALLOW.
- const content_settings::ContentSettingsInfo* content_settings_info =
+ // Content setting inheritance can be for settings, that are more permissive
+ // than the initial value of a content setting.
+ const ContentSettingsInfo* content_settings_info =
content_settings::ContentSettingsRegistry::GetInstance()->Get(
content_type);
if (content_settings_info) {
- if (content_settings_info->incognito_behavior() !=
- content_settings::ContentSettingsInfo::
- INHERIT_IN_INCOGNITO_EXCEPT_ALLOW)
- return value;
- ContentSetting setting =
- content_settings::ValueToContentSetting(value.get());
- if (setting != CONTENT_SETTING_ALLOW)
- return value;
- DCHECK(content_settings_info->IsSettingValid(CONTENT_SETTING_ASK));
- return content_settings::ContentSettingToValue(CONTENT_SETTING_ASK);
+ ContentSettingsInfo::IncognitoBehavior behaviour =
+ content_settings_info->incognito_behavior();
+ switch (behaviour) {
+ case ContentSettingsInfo::INHERIT_IN_INCOGNITO:
+ return value;
+ case ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE:
+ ContentSetting setting =
+ content_settings::ValueToContentSetting(value.get());
+ const base::Value* initial_value = content_settings_info
+ ->website_settings_info()->initial_default_value();
+ ContentSetting initial_setting =
+ content_settings::ValueToContentSetting(initial_value);
+ if (content_settings::IsMorePermissive(setting, initial_setting))
+ return content_settings::ContentSettingToValue(initial_setting);
+ return value;
+ }
}
return value;
@@ -153,12 +162,24 @@ content_settings::PatternPair GetPatternsFromScopingType(
return patterns;
}
+content_settings::PatternPair GetPatternsForContentSettingsType(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType type) {
+ const WebsiteSettingsInfo* website_settings_info =
+ content_settings::WebsiteSettingsRegistry::GetInstance()->Get(type);
+ DCHECK(website_settings_info);
+ content_settings::PatternPair patterns = GetPatternsFromScopingType(
+ website_settings_info->scoping_type(), primary_url, secondary_url);
+ return patterns;
+}
+
} // namespace
HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
bool is_incognito_profile,
bool is_guest_profile)
- :
+ : RefcountedKeyedService(base::ThreadTaskRunnerHandle::Get()),
#ifndef NDEBUG
used_from_thread_id_(base::PlatformThread::CurrentId()),
#endif
@@ -189,7 +210,6 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
default_provider->AddObserver(this);
content_settings_providers_[DEFAULT_PROVIDER] = std::move(default_provider);
- MigrateKeygenSettings();
MigrateDomainScopedSettings(false);
RecordExceptionMetrics();
}
@@ -341,11 +361,8 @@ void HostContentSettingsMap::SetWebsiteSettingDefaultScope(
ContentSettingsType content_type,
const std::string& resource_identifier,
std::unique_ptr<base::Value> value) {
- const WebsiteSettingsInfo* info =
- content_settings::WebsiteSettingsRegistry::GetInstance()->Get(
- content_type);
- content_settings::PatternPair patterns = GetPatternsFromScopingType(
- info->scoping_type(), primary_url, secondary_url);
+ content_settings::PatternPair patterns = GetPatternsForContentSettingsType(
+ primary_url, secondary_url, content_type);
ContentSettingsPattern primary_pattern = patterns.first;
ContentSettingsPattern secondary_pattern = patterns.second;
if (!primary_pattern.IsValid() || !secondary_pattern.IsValid())
@@ -377,11 +394,34 @@ void HostContentSettingsMap::SetWebsiteSettingCustomScope(
NOTREACHED();
}
+bool HostContentSettingsMap::CanSetNarrowestContentSetting(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType type) const {
+ content_settings::PatternPair patterns =
+ GetNarrowestPatterns(primary_url, secondary_url, type);
+ return patterns.first.IsValid() && patterns.second.IsValid();
+}
+
void HostContentSettingsMap::SetNarrowestContentSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type,
ContentSetting setting) {
+ content_settings::PatternPair patterns =
+ GetNarrowestPatterns(primary_url, secondary_url, type);
+
+ if (!patterns.first.IsValid() || !patterns.second.IsValid())
+ return;
+
+ SetContentSettingCustomScope(patterns.first, patterns.second, type,
+ std::string(), setting);
+}
+
+content_settings::PatternPair HostContentSettingsMap::GetNarrowestPatterns (
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType type) const {
// Permission settings are specified via rules. There exists always at least
// one rule for the default setting. Get the rule that currently defines
// the permission for the given permission |type|. Then test whether the
@@ -391,31 +431,29 @@ void HostContentSettingsMap::SetNarrowestContentSetting(
content_settings::SettingInfo info;
std::unique_ptr<base::Value> v = GetWebsiteSettingInternal(
primary_url, secondary_url, type, std::string(), &info);
- DCHECK_EQ(content_settings::SETTING_SOURCE_USER, info.source);
-
- const WebsiteSettingsInfo* website_settings_info =
- content_settings::WebsiteSettingsRegistry::GetInstance()->Get(type);
- content_settings::PatternPair patterns = GetPatternsFromScopingType(
- website_settings_info->scoping_type(), primary_url, secondary_url);
+ if (info.source != content_settings::SETTING_SOURCE_USER) {
+ // Return an invalid pattern if the current setting is not a user setting
+ // and thus can't be changed.
+ return content_settings::PatternPair();
+ }
- ContentSettingsPattern narrow_primary = patterns.first;
- ContentSettingsPattern narrow_secondary = patterns.second;
+ content_settings::PatternPair patterns = GetPatternsForContentSettingsType(
+ primary_url, secondary_url, type);
ContentSettingsPattern::Relation r1 =
info.primary_pattern.Compare(patterns.first);
if (r1 == ContentSettingsPattern::PREDECESSOR) {
- narrow_primary = info.primary_pattern;
+ patterns.first = info.primary_pattern;
} else if (r1 == ContentSettingsPattern::IDENTITY) {
ContentSettingsPattern::Relation r2 =
info.secondary_pattern.Compare(patterns.second);
DCHECK(r2 != ContentSettingsPattern::DISJOINT_ORDER_POST &&
r2 != ContentSettingsPattern::DISJOINT_ORDER_PRE);
if (r2 == ContentSettingsPattern::PREDECESSOR)
- narrow_secondary = info.secondary_pattern;
+ patterns.second = info.secondary_pattern;
}
- SetContentSettingCustomScope(narrow_primary, narrow_secondary, type,
- std::string(), setting);
+ return patterns;
}
void HostContentSettingsMap::SetContentSettingCustomScope(
@@ -450,15 +488,9 @@ void HostContentSettingsMap::SetContentSettingDefaultScope(
ContentSettingsType content_type,
const std::string& resource_identifier,
ContentSetting setting) {
- using content_settings::ContentSettingsInfo;
- const ContentSettingsInfo* info =
- content_settings::ContentSettingsRegistry::GetInstance()->Get(
- content_type);
- DCHECK(info);
+ content_settings::PatternPair patterns = GetPatternsForContentSettingsType(
+ primary_url, secondary_url, content_type);
- content_settings::PatternPair patterns =
- GetPatternsFromScopingType(info->website_settings_info()->scoping_type(),
- primary_url, secondary_url);
ContentSettingsPattern primary_pattern = patterns.first;
ContentSettingsPattern secondary_pattern = patterns.second;
if (!primary_pattern.IsValid() || !secondary_pattern.IsValid())
@@ -468,45 +500,6 @@ void HostContentSettingsMap::SetContentSettingDefaultScope(
resource_identifier, setting);
}
-void HostContentSettingsMap::MigrateKeygenSettings() {
- const content_settings::ContentSettingsInfo* info =
- content_settings::ContentSettingsRegistry::GetInstance()->Get(
- CONTENT_SETTINGS_TYPE_KEYGEN);
- if (info) {
- ContentSettingsForOneType settings;
- GetSettingsForOneType(CONTENT_SETTINGS_TYPE_KEYGEN, std::string(),
- &settings);
-
- for (const ContentSettingPatternSource& setting_entry : settings) {
- // Migrate user preference settings only.
- if (setting_entry.source != "preference")
- continue;
- // Migrate old-format settings only.
- if (setting_entry.secondary_pattern !=
- ContentSettingsPattern::Wildcard()) {
- GURL url(setting_entry.primary_pattern.ToString());
- // Pull out the value of the old-format setting. Only do this if the
- // patterns are as we expect them to be, otherwise the setting will just
- // be removed for safety.
- ContentSetting content_setting = CONTENT_SETTING_DEFAULT;
- if (setting_entry.primary_pattern == setting_entry.secondary_pattern &&
- url.is_valid()) {
- content_setting = GetContentSetting(
- url, url, CONTENT_SETTINGS_TYPE_KEYGEN, std::string());
- }
- // Remove the old pattern.
- SetContentSettingCustomScope(setting_entry.primary_pattern,
- setting_entry.secondary_pattern,
- CONTENT_SETTINGS_TYPE_KEYGEN,
- std::string(), CONTENT_SETTING_DEFAULT);
- // Set the new pattern.
- SetContentSettingDefaultScope(url, GURL(), CONTENT_SETTINGS_TYPE_KEYGEN,
- std::string(), content_setting);
- }
- }
- }
-}
-
void HostContentSettingsMap::MigrateDomainScopedSettings(bool after_sync) {
DomainToOriginMigrationStatus status =
static_cast<DomainToOriginMigrationStatus>(
@@ -795,6 +788,7 @@ void HostContentSettingsMap::OnContentSettingChanged(
}
HostContentSettingsMap::~HostContentSettingsMap() {
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(!prefs_);
}
diff --git a/chromium/components/content_settings/core/browser/host_content_settings_map.h b/chromium/components/content_settings/core/browser/host_content_settings_map.h
index b3eea7fff6e..b74865acb39 100644
--- a/chromium/components/content_settings/core/browser/host_content_settings_map.h
+++ b/chromium/components/content_settings/core/browser/host_content_settings_map.h
@@ -26,7 +26,6 @@
#include "components/keyed_service/core/refcounted_keyed_service.h"
#include "components/prefs/pref_change_registrar.h"
-class ExtensionService;
class GURL;
class PrefService;
@@ -39,6 +38,7 @@ namespace content_settings {
class ObservableProvider;
class ProviderInterface;
class PrefProvider;
+class RuleIterator;
class TestUtils;
}
@@ -196,6 +196,13 @@ class HostContentSettingsMap : public content_settings::Observer,
const std::string& resource_identifier,
std::unique_ptr<base::Value> value);
+ // Check if a call to SetNarrowestContentSetting would succeed or if it would
+ // fail because of an invalid pattern.
+ bool CanSetNarrowestContentSetting(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType type) const;
+
// Sets the most specific rule that currently defines the setting for the
// given content type. TODO(raymes): Remove this once all content settings
// are scoped to origin scope. There is no scope more narrow than origin
@@ -307,7 +314,6 @@ class HostContentSettingsMap : public content_settings::Observer,
DomainToOriginMigrationStatus);
FRIEND_TEST_ALL_PREFIXES(HostContentSettingsMapTest,
MigrateDomainScopedSettings);
- FRIEND_TEST_ALL_PREFIXES(HostContentSettingsMapTest, MigrateKeygenSettings);
friend class content_settings::TestUtils;
@@ -323,16 +329,6 @@ class HostContentSettingsMap : public content_settings::Observer,
ContentSettingsType content_type,
ProviderType* provider_type) const;
- // Migrate Keygen settings which only use a primary pattern. Settings which
- // only used a primary pattern were inconsistent in what they did with the
- // secondary pattern. Some stored a ContentSettingsPattern::Wildcard() whereas
- // others stored the same pattern twice. This function migrates all such
- // settings to use ContentSettingsPattern::Wildcard(). This allows us to make
- // the scoping code consistent across different settings.
- // TODO(lshang): Remove this when clients have migrated (~M53). We should
- // leave in some code to remove old-format settings for a long time.
- void MigrateKeygenSettings();
-
// Collect UMA data of exceptions.
void RecordExceptionMetrics();
@@ -364,6 +360,11 @@ class HostContentSettingsMap : public content_settings::Observer,
const std::string& resource_identifier,
content_settings::SettingInfo* info) const;
+ content_settings::PatternPair GetNarrowestPatterns(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType type) const;
+
static std::unique_ptr<base::Value> GetContentSettingValueAndPatterns(
const content_settings::ProviderInterface* provider,
const GURL& primary_url,
diff --git a/chromium/components/content_settings/core/browser/website_settings_info.cc b/chromium/components/content_settings/core/browser/website_settings_info.cc
index 8ee4a329a27..e7932081bac 100644
--- a/chromium/components/content_settings/core/browser/website_settings_info.cc
+++ b/chromium/components/content_settings/core/browser/website_settings_info.cc
@@ -48,7 +48,7 @@ WebsiteSettingsInfo::WebsiteSettingsInfo(
// TODO(raymes): We should migrate the underlying pref to be a dictionary
// rather than an int.
DCHECK(!initial_default_value_ ||
- initial_default_value_->IsType(base::Value::TYPE_INTEGER));
+ initial_default_value_->IsType(base::Value::Type::INTEGER));
}
WebsiteSettingsInfo::~WebsiteSettingsInfo() {}
diff --git a/chromium/components/content_settings/core/common/BUILD.gn b/chromium/components/content_settings/core/common/BUILD.gn
index a73d49ed145..42404221620 100644
--- a/chromium/components/content_settings/core/common/BUILD.gn
+++ b/chromium/components/content_settings/core/common/BUILD.gn
@@ -2,6 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//mojo/public/tools/bindings/mojom.gni")
+
static_library("common") {
sources = [
"content_settings.cc",
@@ -19,6 +21,7 @@ static_library("common") {
deps = [
"//base",
+ "//mojo/public/cpp/bindings:struct_traits",
"//net",
"//url",
]
@@ -39,3 +42,9 @@ source_set("unit_tests") {
"//url",
]
}
+
+mojom("mojo_bindings") {
+ sources = [
+ "content_settings.mojom",
+ ]
+}
diff --git a/chromium/components/content_settings/core/common/DEPS b/chromium/components/content_settings/core/common/DEPS
index 201d8c82fc0..4e501b277a1 100644
--- a/chromium/components/content_settings/core/common/DEPS
+++ b/chromium/components/content_settings/core/common/DEPS
@@ -1,4 +1,5 @@
include_rules = [
+ "+mojo/public/cpp/bindings",
"+net/base",
"+testing",
"+url",
diff --git a/chromium/components/content_settings/core/common/OWNERS b/chromium/components/content_settings/core/common/OWNERS
new file mode 100644
index 00000000000..ac44cd00686
--- /dev/null
+++ b/chromium/components/content_settings/core/common/OWNERS
@@ -0,0 +1,5 @@
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
+
+per-file *_struct_traits*.*=set noparent
+per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/chromium/components/content_settings/core/common/content_settings.cc b/chromium/components/content_settings/core/common/content_settings.cc
index 5e38200208a..5139efc6c54 100644
--- a/chromium/components/content_settings/core/common/content_settings.cc
+++ b/chromium/components/content_settings/core/common/content_settings.cc
@@ -52,7 +52,7 @@ ContentSettingsType kHistogramOrder[] = {
CONTENT_SETTINGS_TYPE_APP_BANNER,
CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT,
CONTENT_SETTINGS_TYPE_DURABLE_STORAGE,
- CONTENT_SETTINGS_TYPE_KEYGEN,
+ CONTENT_SETTINGS_TYPE_DEFAULT, // KEYGEN (removed)
CONTENT_SETTINGS_TYPE_BLUETOOTH_GUARD,
CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC,
CONTENT_SETTINGS_TYPE_AUTOPLAY,
diff --git a/chromium/components/content_settings/core/common/content_settings.h b/chromium/components/content_settings/core/common/content_settings.h
index 3179ef324bf..c441e280eaa 100644
--- a/chromium/components/content_settings/core/common/content_settings.h
+++ b/chromium/components/content_settings/core/common/content_settings.h
@@ -18,6 +18,9 @@
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.preferences.website
// GENERATED_JAVA_CLASS_NAME_OVERRIDE: ContentSettingValues
+//
+// TODO(nigeltao): migrate the Java users of this enum to the mojom-generated
+// enum.
enum ContentSetting {
CONTENT_SETTING_DEFAULT = 0,
CONTENT_SETTING_ALLOW,
diff --git a/chromium/components/content_settings/core/common/content_settings.mojom b/chromium/components/content_settings/core/common/content_settings.mojom
new file mode 100644
index 00000000000..5c4c5d92a92
--- /dev/null
+++ b/chromium/components/content_settings/core/common/content_settings.mojom
@@ -0,0 +1,72 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module content_settings.mojom;
+
+// This mirrors the C++ type in content_settings_pattern.h.
+struct PatternParts {
+ // Lowercase string of the URL scheme to match. This string is empty if the
+ // |is_scheme_wildcard| flag is set.
+ string scheme;
+
+ // True if the scheme wildcard is set.
+ bool is_scheme_wildcard;
+
+ // Normalized string that is either of the following:
+ // - IPv4 or IPv6
+ // - hostname
+ // - domain
+ // - empty string if the |is_host_wildcard flag is set.
+ string host;
+
+ // True if the domain wildcard is set.
+ bool has_domain_wildcard;
+
+ // String with the port to match. This string is empty if the
+ // |is_port_wildcard| flag is set.
+ string port;
+
+ // True if the port wildcard is set.
+ bool is_port_wildcard;
+
+ // TODO(markusheintz): Needed for legacy reasons. Remove. Path
+ // specification. Only used for content settings pattern with a "file"
+ // scheme part.
+ string path;
+
+ // True if the path wildcard is set.
+ bool is_path_wildcard;
+};
+
+// This mirrors the C++ type in content_settings_pattern.h.
+struct ContentSettingsPattern {
+ PatternParts parts;
+ bool is_valid;
+};
+
+// This mirrors the C++ type in content_settings.h.
+enum ContentSetting {
+ DEFAULT = 0,
+ ALLOW,
+ BLOCK,
+ ASK,
+ SESSION_ONLY,
+ DETECT_IMPORTANT_CONTENT
+};
+
+// This mirrors the C++ type in content_settings.h.
+struct ContentSettingPatternSource {
+ ContentSettingsPattern primary_pattern;
+ ContentSettingsPattern secondary_pattern;
+ ContentSetting setting;
+ string source;
+ bool incognito;
+};
+
+// This mirrors the C++ type in content_settings.h.
+struct RendererContentSettingRules {
+ array<ContentSettingPatternSource> image_rules;
+ array<ContentSettingPatternSource> script_rules;
+ array<ContentSettingPatternSource> autoplay_rules;
+};
diff --git a/chromium/components/content_settings/core/common/content_settings.typemap b/chromium/components/content_settings/core/common/content_settings.typemap
new file mode 100644
index 00000000000..200cd73767d
--- /dev/null
+++ b/chromium/components/content_settings/core/common/content_settings.typemap
@@ -0,0 +1,27 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+deps = [
+ "//components/content_settings/core/common",
+ "//mojo/public/cpp/bindings",
+]
+mojom = "//components/content_settings/core/common/content_settings.mojom"
+public_deps = [
+ "//components/content_settings/core/common",
+]
+public_headers = [
+ "//components/content_settings/core/common/content_settings.h",
+ "//components/content_settings/core/common/content_settings_pattern.h",
+]
+sources = [
+ "//components/content_settings/core/common/content_settings_struct_traits.cc",
+]
+traits_headers = [ "//components/content_settings/core/common/content_settings_struct_traits.h" ]
+type_mappings = [
+ "content_settings.mojom.PatternParts=::ContentSettingsPattern::PatternParts",
+ "content_settings.mojom.ContentSettingsPattern=::ContentSettingsPattern",
+ "content_settings.mojom.ContentSetting=::ContentSetting",
+ "content_settings.mojom.ContentSettingPatternSource=::ContentSettingPatternSource",
+ "content_settings.mojom.RendererContentSettingRules=::RendererContentSettingRules",
+]
diff --git a/chromium/components/content_settings/core/common/content_settings_pattern.h b/chromium/components/content_settings/core/common/content_settings_pattern.h
index f0432f59930..7d6fc8d00dd 100644
--- a/chromium/components/content_settings/core/common/content_settings_pattern.h
+++ b/chromium/components/content_settings/core/common/content_settings_pattern.h
@@ -10,11 +10,16 @@
#include <string>
#include "base/gtest_prod_util.h"
+#include "mojo/public/cpp/bindings/struct_traits.h"
class GURL;
namespace content_settings {
class PatternParser;
+
+namespace mojom {
+class ContentSettingsPatternDataView;
+}
}
// A pattern used in content setting rules. See |IsValid| for a description of
@@ -216,7 +221,9 @@ class ContentSettingsPattern {
private:
friend class content_settings::PatternParser;
- friend class ContentSettingsPatternSerializer;
+ friend struct mojo::StructTraits<
+ content_settings::mojom::ContentSettingsPatternDataView,
+ ContentSettingsPattern>;
FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns);
class Builder;
diff --git a/chromium/components/content_settings/core/common/content_settings_struct_traits.cc b/chromium/components/content_settings/core/common/content_settings_struct_traits.cc
new file mode 100644
index 00000000000..11ad9c92ed6
--- /dev/null
+++ b/chromium/components/content_settings/core/common/content_settings_struct_traits.cc
@@ -0,0 +1,104 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/content_settings/core/common/content_settings_struct_traits.h"
+
+namespace mojo {
+
+// static
+bool StructTraits<content_settings::mojom::PatternPartsDataView,
+ ContentSettingsPattern::PatternParts>::
+ Read(content_settings::mojom::PatternPartsDataView data,
+ ContentSettingsPattern::PatternParts* out) {
+ out->is_scheme_wildcard = data.is_scheme_wildcard();
+ out->has_domain_wildcard = data.has_domain_wildcard();
+ out->is_port_wildcard = data.is_port_wildcard();
+ out->is_path_wildcard = data.is_path_wildcard();
+ return data.ReadScheme(&out->scheme) && data.ReadHost(&out->host) &&
+ data.ReadPort(&out->port) && data.ReadPath(&out->path);
+}
+
+// static
+bool StructTraits<content_settings::mojom::ContentSettingsPatternDataView,
+ ContentSettingsPattern>::
+ Read(content_settings::mojom::ContentSettingsPatternDataView data,
+ ContentSettingsPattern* out) {
+ out->is_valid_ = data.is_valid();
+ return data.ReadParts(&out->parts_);
+}
+
+// static
+content_settings::mojom::ContentSetting
+EnumTraits<content_settings::mojom::ContentSetting, ContentSetting>::ToMojom(
+ ContentSetting setting) {
+ switch (setting) {
+ case CONTENT_SETTING_DEFAULT:
+ return content_settings::mojom::ContentSetting::DEFAULT;
+ case CONTENT_SETTING_ALLOW:
+ return content_settings::mojom::ContentSetting::ALLOW;
+ case CONTENT_SETTING_BLOCK:
+ return content_settings::mojom::ContentSetting::BLOCK;
+ case CONTENT_SETTING_ASK:
+ return content_settings::mojom::ContentSetting::ASK;
+ case CONTENT_SETTING_SESSION_ONLY:
+ return content_settings::mojom::ContentSetting::SESSION_ONLY;
+ case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT:
+ return content_settings::mojom::ContentSetting::DETECT_IMPORTANT_CONTENT;
+ case CONTENT_SETTING_NUM_SETTINGS:
+ // CONTENT_SETTING_NUM_SETTINGS is a dummy enum value.
+ break;
+ }
+ NOTREACHED();
+ return content_settings::mojom::ContentSetting::DEFAULT;
+}
+
+// static
+bool EnumTraits<content_settings::mojom::ContentSetting, ContentSetting>::
+ FromMojom(content_settings::mojom::ContentSetting setting,
+ ContentSetting* out) {
+ switch (setting) {
+ case content_settings::mojom::ContentSetting::DEFAULT:
+ *out = CONTENT_SETTING_DEFAULT;
+ return true;
+ case content_settings::mojom::ContentSetting::ALLOW:
+ *out = CONTENT_SETTING_ALLOW;
+ return true;
+ case content_settings::mojom::ContentSetting::BLOCK:
+ *out = CONTENT_SETTING_BLOCK;
+ return true;
+ case content_settings::mojom::ContentSetting::ASK:
+ *out = CONTENT_SETTING_ASK;
+ return true;
+ case content_settings::mojom::ContentSetting::SESSION_ONLY:
+ *out = CONTENT_SETTING_SESSION_ONLY;
+ return true;
+ case content_settings::mojom::ContentSetting::DETECT_IMPORTANT_CONTENT:
+ *out = CONTENT_SETTING_DETECT_IMPORTANT_CONTENT;
+ return true;
+ }
+ return false;
+}
+
+// static
+bool StructTraits<content_settings::mojom::ContentSettingPatternSourceDataView,
+ ContentSettingPatternSource>::
+ Read(content_settings::mojom::ContentSettingPatternSourceDataView data,
+ ContentSettingPatternSource* out) {
+ out->incognito = data.incognito();
+ return data.ReadPrimaryPattern(&out->primary_pattern) &&
+ data.ReadSecondaryPattern(&out->secondary_pattern) &&
+ data.ReadSetting(&out->setting) && data.ReadSource(&out->source);
+}
+
+// static
+bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
+ RendererContentSettingRules>::
+ Read(content_settings::mojom::RendererContentSettingRulesDataView data,
+ RendererContentSettingRules* out) {
+ return data.ReadImageRules(&out->image_rules) &&
+ data.ReadScriptRules(&out->script_rules) &&
+ data.ReadAutoplayRules(&out->autoplay_rules);
+}
+
+} // namespace mojo
diff --git a/chromium/components/content_settings/core/common/content_settings_struct_traits.h b/chromium/components/content_settings/core/common/content_settings_struct_traits.h
new file mode 100644
index 00000000000..10c78efeafd
--- /dev/null
+++ b/chromium/components/content_settings/core/common/content_settings_struct_traits.h
@@ -0,0 +1,142 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_STRUCT_TRAITS_H
+#define COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_STRUCT_TRAITS_H
+
+#include <string>
+
+#include "components/content_settings/core/common/content_settings.h"
+#include "components/content_settings/core/common/content_settings.mojom.h"
+#include "mojo/public/cpp/bindings/enum_traits.h"
+#include "mojo/public/cpp/bindings/struct_traits.h"
+
+namespace mojo {
+
+template <>
+struct StructTraits<content_settings::mojom::PatternPartsDataView,
+ ContentSettingsPattern::PatternParts> {
+ static const std::string& scheme(
+ const ContentSettingsPattern::PatternParts& r) {
+ return r.scheme;
+ }
+
+ static bool is_scheme_wildcard(
+ const ContentSettingsPattern::PatternParts& r) {
+ return r.is_scheme_wildcard;
+ }
+
+ static const std::string& host(
+ const ContentSettingsPattern::PatternParts& r) {
+ return r.host;
+ }
+
+ static bool has_domain_wildcard(
+ const ContentSettingsPattern::PatternParts& r) {
+ return r.has_domain_wildcard;
+ }
+
+ static const std::string& port(
+ const ContentSettingsPattern::PatternParts& r) {
+ return r.port;
+ }
+
+ static bool is_port_wildcard(const ContentSettingsPattern::PatternParts& r) {
+ return r.is_port_wildcard;
+ }
+
+ static const std::string& path(
+ const ContentSettingsPattern::PatternParts& r) {
+ return r.path;
+ }
+
+ static bool is_path_wildcard(const ContentSettingsPattern::PatternParts& r) {
+ return r.is_path_wildcard;
+ }
+
+ static bool Read(content_settings::mojom::PatternPartsDataView data,
+ ContentSettingsPattern::PatternParts* out);
+};
+
+template <>
+struct StructTraits<content_settings::mojom::ContentSettingsPatternDataView,
+ ContentSettingsPattern> {
+ static const ContentSettingsPattern::PatternParts& parts(
+ const ContentSettingsPattern& r) {
+ return r.parts_;
+ }
+
+ static bool is_valid(const ContentSettingsPattern& r) { return r.is_valid_; }
+
+ static bool Read(content_settings::mojom::ContentSettingsPatternDataView data,
+ ContentSettingsPattern* out);
+};
+
+template <>
+struct EnumTraits<content_settings::mojom::ContentSetting, ContentSetting> {
+ static content_settings::mojom::ContentSetting ToMojom(
+ ContentSetting setting);
+
+ static bool FromMojom(content_settings::mojom::ContentSetting setting,
+ ContentSetting* out);
+};
+
+template <>
+struct StructTraits<
+ content_settings::mojom::ContentSettingPatternSourceDataView,
+ ContentSettingPatternSource> {
+ static const ContentSettingsPattern& primary_pattern(
+ const ContentSettingPatternSource& r) {
+ return r.primary_pattern;
+ }
+
+ static const ContentSettingsPattern& secondary_pattern(
+ const ContentSettingPatternSource& r) {
+ return r.secondary_pattern;
+ }
+
+ static ContentSetting setting(const ContentSettingPatternSource& r) {
+ return r.setting;
+ }
+
+ static const std::string& source(const ContentSettingPatternSource& r) {
+ return r.source;
+ }
+
+ static bool incognito(const ContentSettingPatternSource& r) {
+ return r.incognito;
+ }
+
+ static bool Read(
+ content_settings::mojom::ContentSettingPatternSourceDataView data,
+ ContentSettingPatternSource* out);
+};
+
+template <>
+struct StructTraits<
+ content_settings::mojom::RendererContentSettingRulesDataView,
+ RendererContentSettingRules> {
+ static const std::vector<ContentSettingPatternSource>& image_rules(
+ const RendererContentSettingRules& r) {
+ return r.image_rules;
+ }
+
+ static const std::vector<ContentSettingPatternSource>& script_rules(
+ const RendererContentSettingRules& r) {
+ return r.script_rules;
+ }
+
+ static const std::vector<ContentSettingPatternSource>& autoplay_rules(
+ const RendererContentSettingRules& r) {
+ return r.autoplay_rules;
+ }
+
+ static bool Read(
+ content_settings::mojom::RendererContentSettingRulesDataView data,
+ RendererContentSettingRules* out);
+};
+
+} // namespace mojo
+
+#endif // COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_STRUCT_TRAITS_H
diff --git a/chromium/components/content_settings/core/common/content_settings_types.h b/chromium/components/content_settings/core/common/content_settings_types.h
index f4c8d73964d..f6814643385 100644
--- a/chromium/components/content_settings/core/common/content_settings_types.h
+++ b/chromium/components/content_settings/core/common/content_settings_types.h
@@ -40,7 +40,6 @@ enum ContentSettingsType {
CONTENT_SETTINGS_TYPE_DURABLE_STORAGE,
CONTENT_SETTINGS_TYPE_USB_CHOOSER_DATA,
CONTENT_SETTINGS_TYPE_BLUETOOTH_GUARD,
- CONTENT_SETTINGS_TYPE_KEYGEN,
CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC,
CONTENT_SETTINGS_TYPE_AUTOPLAY,
CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
diff --git a/chromium/components/content_settings/core/common/pref_names.cc b/chromium/components/content_settings/core/common/pref_names.cc
index 36a7e628b32..08bb3112b88 100644
--- a/chromium/components/content_settings/core/common/pref_names.cc
+++ b/chromium/components/content_settings/core/common/pref_names.cc
@@ -42,8 +42,6 @@ const char kManagedDefaultPluginsSetting[] =
"profile.managed_default_content_settings.plugins";
const char kManagedDefaultPopupsSetting[] =
"profile.managed_default_content_settings.popups";
-const char kManagedDefaultKeygenSetting[] =
- "profile.managed_default_content_settings.keygen";
const char kManagedDefaultWebBluetoothGuardSetting[] =
"profile.managed_default_content_settings.web_bluetooth_guard";
@@ -77,9 +75,4 @@ const char kManagedPopupsAllowedForUrls[] =
"profile.managed_popups_allowed_for_urls";
const char kManagedPopupsBlockedForUrls[] =
"profile.managed_popups_blocked_for_urls";
-const char kManagedKeygenAllowedForUrls[] =
- "profile.managed_keygen_allowed_for_urls";
-const char kManagedKeygenBlockedForUrls[] =
- "profile.managed_keygen_blocked_for_urls";
-
} // namespace prefs
diff --git a/chromium/components/content_settings/core/common/pref_names.h b/chromium/components/content_settings/core/common/pref_names.h
index 9ddbd4c882d..daf1b6cf1ad 100644
--- a/chromium/components/content_settings/core/common/pref_names.h
+++ b/chromium/components/content_settings/core/common/pref_names.h
@@ -26,7 +26,6 @@ extern const char kManagedDefaultPopupsSetting[];
extern const char kManagedDefaultGeolocationSetting[];
extern const char kManagedDefaultNotificationsSetting[];
extern const char kManagedDefaultMediaStreamSetting[];
-extern const char kManagedDefaultKeygenSetting[];
extern const char kManagedDefaultWebBluetoothGuardSetting[];
extern const char kManagedCookiesAllowedForUrls[];
@@ -43,8 +42,6 @@ extern const char kManagedPopupsBlockedForUrls[];
extern const char kManagedNotificationsAllowedForUrls[];
extern const char kManagedNotificationsBlockedForUrls[];
extern const char kManagedAutoSelectCertificateForUrls[];
-extern const char kManagedKeygenAllowedForUrls[];
-extern const char kManagedKeygenBlockedForUrls[];
} // namespace prefs