Index: chrome/browser/ui/webui/options/content_settings_handler.cc |
diff --git a/chrome/browser/ui/webui/options/content_settings_handler.cc b/chrome/browser/ui/webui/options/content_settings_handler.cc |
index 365b07d555e39e6e759d593547d098b3ffd0abb5..95231d2fd3579d9d4546a654b3850e21a281fad6 100644 |
--- a/chrome/browser/ui/webui/options/content_settings_handler.cc |
+++ b/chrome/browser/ui/webui/options/content_settings_handler.cc |
@@ -16,6 +16,8 @@ |
#include "chrome/browser/content_settings/content_settings_details.h" |
#include "chrome/browser/content_settings/content_settings_pattern.h" |
#include "chrome/browser/content_settings/content_settings_utils.h" |
+#include "chrome/browser/content_settings/cookie_settings.h" |
+#include "chrome/browser/content_settings/cookie_settings_factory.h" |
#include "chrome/browser/content_settings/host_content_settings_map.h" |
#include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
#include "chrome/browser/notifications/desktop_notification_service.h" |
@@ -61,6 +63,7 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { |
{CONTENT_SETTINGS_TYPE_NOTIFICATIONS, "notifications"}, |
{CONTENT_SETTINGS_TYPE_INTENTS, "intents"}, |
{CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, "auto-select-certificate"}, |
+ {CONTENT_SETTINGS_TYPE_COOKIES_SESSION_ONLY, "cookies-session-only"}, |
}; |
COMPILE_ASSERT(arraysize(kContentSettingsTypeGroupNames) == |
CONTENT_SETTINGS_NUM_TYPES, |
@@ -614,6 +617,8 @@ void ContentSettingsHandler::SetContentFilter(const ListValue* args) { |
Profile* profile = Profile::FromWebUI(web_ui_); |
DesktopNotificationServiceFactory::GetForProfile(profile)-> |
SetDefaultContentSetting(default_setting); |
+ } else if (content_type == CONTENT_SETTINGS_TYPE_COOKIES) { |
+ GetCookieSettings()->SetDefaultSetting(default_setting); |
} else { |
GetContentSettingsMap()-> |
SetDefaultContentSetting(content_type, default_setting); |
@@ -666,15 +671,24 @@ void ContentSettingsHandler::RemoveException(const ListValue* args) { |
HostContentSettingsMap* settings_map = |
mode == "normal" ? GetContentSettingsMap() : |
GetOTRContentSettingsMap(); |
+ |
// The settings map could be null if the mode was OTR but the OTR profile |
// got destroyed before we received this message. |
if (settings_map) { |
- settings_map->SetContentSetting( |
- ContentSettingsPattern::FromString(pattern), |
- ContentSettingsPattern::Wildcard(), |
- ContentSettingsTypeFromGroupName(type_string), |
- "", |
- CONTENT_SETTING_DEFAULT); |
+ if (type == CONTENT_SETTINGS_TYPE_COOKIES) { |
+ CookieSettings* cookie_settings = |
+ mode == "normal" ? GetCookieSettings() : GetOTRCookieSettings(); |
+ DCHECK(cookie_settings != NULL); |
Bernhard Bauer
2011/09/01 11:41:54
I think we should be a bit more defensive here, as
marja
2011/09/01 13:34:48
Crash here would mean that GetContentSettingsMap r
|
+ cookie_settings->ResetCookieSetting( |
+ ContentSettingsPattern::FromString(pattern)); |
+ } else { |
+ settings_map->SetContentSetting( |
+ ContentSettingsPattern::FromString(pattern), |
+ ContentSettingsPattern::Wildcard(), |
+ ContentSettingsTypeFromGroupName(type_string), |
+ "", |
+ CONTENT_SETTING_DEFAULT); |
+ } |
} |
} |
} |
@@ -700,16 +714,24 @@ void ContentSettingsHandler::SetException(const ListValue* args) { |
HostContentSettingsMap* settings_map = |
mode == "normal" ? GetContentSettingsMap() : |
GetOTRContentSettingsMap(); |
- |
// The settings map could be null if the mode was OTR but the OTR profile |
// got destroyed before we received this message. |
if (!settings_map) |
return; |
- settings_map->SetContentSetting(ContentSettingsPattern::FromString(pattern), |
- ContentSettingsPattern::Wildcard(), |
- type, |
- "", |
- ContentSettingFromString(setting)); |
+ if (type == CONTENT_SETTINGS_TYPE_COOKIES) { |
+ CookieSettings* cookie_settings = |
+ mode == "normal" ? GetCookieSettings() : GetOTRCookieSettings(); |
+ DCHECK(cookie_settings != NULL); |
+ cookie_settings->SetCookieSetting( |
+ ContentSettingsPattern::FromString(pattern), |
+ ContentSettingFromString(setting)); |
+ } else { |
+ settings_map->SetContentSetting(ContentSettingsPattern::FromString(pattern), |
+ ContentSettingsPattern::Wildcard(), |
+ type, |
+ "", |
+ ContentSettingFromString(setting)); |
+ } |
} |
void ContentSettingsHandler::CheckExceptionPatternValidity( |
@@ -764,3 +786,15 @@ HostContentSettingsMap* |
return profile->GetOffTheRecordProfile()->GetHostContentSettingsMap(); |
return NULL; |
} |
+ |
+CookieSettings* ContentSettingsHandler::GetCookieSettings() { |
+ return CookieSettingsFactory::GetForProfile(Profile::FromWebUI(web_ui_)); |
+} |
+ |
+CookieSettings* ContentSettingsHandler::GetOTRCookieSettings() { |
+ Profile* profile = Profile::FromWebUI(web_ui_); |
+ if (profile->HasOffTheRecordProfile()) |
+ return CookieSettingsFactory::GetForProfile( |
+ profile->GetOffTheRecordProfile()); |
+ return NULL; |
+} |