Index: components/content_settings/core/browser/content_settings_registry.cc |
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc |
index cfc4f65a4f9888b73769dc935c75397a256e4354..28b46b6264db446c69041a228043857c1ee45a09 100644 |
--- a/components/content_settings/core/browser/content_settings_registry.cc |
+++ b/components/content_settings/core/browser/content_settings_registry.cc |
@@ -19,35 +19,52 @@ namespace content_settings { |
namespace { |
-base::LazyInstance<content_settings::ContentSettingsRegistry> g_instance = |
+base::LazyInstance<ContentSettingsRegistry> g_instance = |
LAZY_INSTANCE_INITIALIZER; |
-// These functions return a vector of schemes in which various permissions will |
-// be whitelisted. |
-const std::vector<std::string>& NoWhitelistedSchemes() { |
- CR_DEFINE_STATIC_LOCAL(std::vector<std::string>, kNoWhitelistedSchemes, ()); |
- return kNoWhitelistedSchemes; |
-} |
- |
-const std::vector<std::string>& WhitelistedForWebUI() { |
- CR_DEFINE_STATIC_LOCAL(std::vector<std::string>, kWhitelistedForWebUI, ()); |
- if (kWhitelistedForWebUI.size() == 0) { |
- kWhitelistedForWebUI.push_back(kChromeDevToolsScheme); |
- kWhitelistedForWebUI.push_back(kChromeUIScheme); |
- } |
- return kWhitelistedForWebUI; |
-} |
- |
-const std::vector<std::string>& WhitelistedForWebUIAndExtensions() { |
- CR_DEFINE_STATIC_LOCAL(std::vector<std::string>, |
- kWhitelistedForWebUIAndExtensions, ()); |
- if (kWhitelistedForWebUIAndExtensions.size() == 0) { |
- kWhitelistedForWebUIAndExtensions = WhitelistedForWebUI(); |
-#if defined(ENABLE_EXTENSIONS) |
- kWhitelistedForWebUIAndExtensions.push_back(kExtensionScheme); |
-#endif |
- } |
- return kWhitelistedForWebUIAndExtensions; |
+// TODO(raymes): These overloaded functions make the registration code clearer. |
+// When initializer lists are available they won't be needed. The initializer |
+// list can be implicitly or explicitly converted to a std::vector. |
+std::vector<std::string> WhitelistedSchemes() { |
+ return std::vector<std::string>(); |
+} |
+ |
+std::vector<std::string> WhitelistedSchemes(const char* scheme1, |
+ const char* scheme2) { |
+ const char* schemes[] = {scheme1, scheme2}; |
+ return std::vector<std::string>(schemes, schemes + arraysize(schemes)); |
+} |
+ |
+std::vector<std::string> WhitelistedSchemes(const char* scheme1, |
+ const char* scheme2, |
+ const char* scheme3) { |
+ const char* schemes[] = {scheme1, scheme2, scheme3}; |
+ return std::vector<std::string>(schemes, schemes + arraysize(schemes)); |
+} |
+ |
+std::set<ContentSetting> ValidSettings() { |
+ return std::set<ContentSetting>(); |
+} |
+ |
+std::set<ContentSetting> ValidSettings(ContentSetting setting1, |
+ ContentSetting setting2) { |
+ ContentSetting settings[] = {setting1, setting2}; |
+ return std::set<ContentSetting>(settings, settings + arraysize(settings)); |
+} |
+ |
+std::set<ContentSetting> ValidSettings(ContentSetting setting1, |
+ ContentSetting setting2, |
+ ContentSetting setting3) { |
+ ContentSetting settings[] = {setting1, setting2, setting3}; |
+ return std::set<ContentSetting>(settings, settings + arraysize(settings)); |
+} |
+ |
+std::set<ContentSetting> ValidSettings(ContentSetting setting1, |
+ ContentSetting setting2, |
+ ContentSetting setting3, |
+ ContentSetting setting4) { |
+ ContentSetting settings[] = {setting1, setting2, setting3, setting4}; |
+ return std::set<ContentSetting>(settings, settings + arraysize(settings)); |
} |
ContentSetting GetDefaultPluginsContentSetting() { |
@@ -108,54 +125,108 @@ void ContentSettingsRegistry::Init() { |
// WARNING: The string names of the permissions passed in below are used to |
// generate preference names and should never be changed! |
- // Content settings (those with allow/block/ask/etc. values). |
Register(CONTENT_SETTINGS_TYPE_COOKIES, "cookies", CONTENT_SETTING_ALLOW, |
- WebsiteSettingsInfo::SYNCABLE, WhitelistedForWebUI()); |
+ WebsiteSettingsInfo::SYNCABLE, |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_SESSION_ONLY)); |
+ |
Register(CONTENT_SETTINGS_TYPE_IMAGES, "images", CONTENT_SETTING_ALLOW, |
- WebsiteSettingsInfo::SYNCABLE, WhitelistedForWebUIAndExtensions()); |
+ WebsiteSettingsInfo::SYNCABLE, |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, |
+ kExtensionScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_JAVASCRIPT, "javascript", |
CONTENT_SETTING_ALLOW, WebsiteSettingsInfo::SYNCABLE, |
- WhitelistedForWebUIAndExtensions()); |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, |
+ kExtensionScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_PLUGINS, "plugins", |
- GetDefaultPluginsContentSetting(), |
- WebsiteSettingsInfo::SYNCABLE, WhitelistedForWebUI()); |
+ GetDefaultPluginsContentSetting(), WebsiteSettingsInfo::SYNCABLE, |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK, |
+ CONTENT_SETTING_DETECT_IMPORTANT_CONTENT)); |
+ |
Register(CONTENT_SETTINGS_TYPE_POPUPS, "popups", CONTENT_SETTING_BLOCK, |
- WebsiteSettingsInfo::SYNCABLE, WhitelistedForWebUIAndExtensions()); |
+ WebsiteSettingsInfo::SYNCABLE, |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, |
+ kExtensionScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_GEOLOCATION, "geolocation", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, "notifications", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_FULLSCREEN, "fullscreen", CONTENT_SETTING_ASK, |
- WebsiteSettingsInfo::SYNCABLE, WhitelistedForWebUI()); |
+ WebsiteSettingsInfo::SYNCABLE, |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_MOUSELOCK, "mouselock", CONTENT_SETTING_ASK, |
- WebsiteSettingsInfo::SYNCABLE, WhitelistedForWebUI()); |
+ WebsiteSettingsInfo::SYNCABLE, |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, "media-stream-mic", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, |
- WhitelistedForWebUI()); |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, "media-stream-camera", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, |
- WhitelistedForWebUI()); |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_PPAPI_BROKER, "ppapi-broker", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, |
- WhitelistedForWebUI()); |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, "automatic-downloads", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::SYNCABLE, |
- WhitelistedForWebUIAndExtensions()); |
+ WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, |
+ kExtensionScheme), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, "midi-sysex", CONTENT_SETTING_ASK, |
- WebsiteSettingsInfo::SYNCABLE, NoWhitelistedSchemes()); |
+ WebsiteSettingsInfo::SYNCABLE, WhitelistedSchemes(), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
Register(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, "push-messaging", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::SYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
+ |
#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
Register(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, |
"protected-media-identifier", CONTENT_SETTING_ASK, |
- WebsiteSettingsInfo::UNSYNCABLE, NoWhitelistedSchemes()); |
+ WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK)); |
#endif |
+ |
Register(CONTENT_SETTINGS_TYPE_DURABLE_STORAGE, "durable-storage", |
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), |
+ ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK)); |
// Content settings that aren't used to store any data. TODO(raymes): use a |
// different mechanism rather than content settings to represent these. |
@@ -163,15 +234,16 @@ void ContentSettingsRegistry::Init() { |
// content setting. |
Register(CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, "protocol-handler", |
CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), ValidSettings()); |
+ |
Register(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, "mixed-script", |
CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), ValidSettings()); |
// Deprecated. |
Register(CONTENT_SETTINGS_TYPE_MEDIASTREAM, "media-stream", |
CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE, |
- NoWhitelistedSchemes()); |
+ WhitelistedSchemes(), ValidSettings()); |
} |
void ContentSettingsRegistry::Register( |
@@ -179,7 +251,8 @@ void ContentSettingsRegistry::Register( |
const std::string& name, |
ContentSetting initial_default_value, |
WebsiteSettingsInfo::SyncStatus sync_status, |
- const std::vector<std::string>& whitelisted_schemes) { |
+ const std::vector<std::string>& whitelisted_schemes, |
+ const std::set<ContentSetting>& valid_settings) { |
// Ensure that nothing has been registered yet for the given type. |
DCHECK(!website_settings_registry_->Get(type)); |
scoped_ptr<base::Value> default_value( |
@@ -190,8 +263,8 @@ void ContentSettingsRegistry::Register( |
WebsiteSettingsInfo::NOT_LOSSY); |
DCHECK(!ContainsKey(content_settings_info_, type)); |
content_settings_info_.set( |
- type, make_scoped_ptr(new ContentSettingsInfo(website_settings_info, |
- whitelisted_schemes))); |
+ type, make_scoped_ptr(new ContentSettingsInfo( |
+ website_settings_info, whitelisted_schemes, valid_settings))); |
} |
} // namespace content_settings |