OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/dom_ui/content_settings_handler.h" | 5 #include "chrome/browser/dom_ui/content_settings_handler.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
11 #include "chrome/browser/host_content_settings_map.h" | 11 #include "chrome/browser/host_content_settings_map.h" |
12 #include "chrome/browser/profile.h" | 12 #include "chrome/browser/profile.h" |
| 13 #include "chrome/common/notification_service.h" |
| 14 #include "chrome/common/notification_source.h" |
| 15 #include "chrome/common/notification_type.h" |
13 #include "chrome/common/url_constants.h" | 16 #include "chrome/common/url_constants.h" |
14 #include "grit/generated_resources.h" | 17 #include "grit/generated_resources.h" |
15 #include "grit/locale_settings.h" | 18 #include "grit/locale_settings.h" |
16 | 19 |
| 20 typedef HostContentSettingsMap::ContentSettingsDetails ContentSettingsDetails; |
| 21 |
17 namespace { | 22 namespace { |
18 | 23 |
19 std::wstring ContentSettingsTypeToGroupName(ContentSettingsType type) { | 24 std::wstring ContentSettingsTypeToGroupName(ContentSettingsType type) { |
20 switch (type) { | 25 switch (type) { |
21 case CONTENT_SETTINGS_TYPE_COOKIES: | 26 case CONTENT_SETTINGS_TYPE_COOKIES: |
22 return L"cookies"; | 27 return L"cookies"; |
23 case CONTENT_SETTINGS_TYPE_IMAGES: | 28 case CONTENT_SETTINGS_TYPE_IMAGES: |
24 return L"images"; | 29 return L"images"; |
25 case CONTENT_SETTINGS_TYPE_JAVASCRIPT: | 30 case CONTENT_SETTINGS_TYPE_JAVASCRIPT: |
26 return L"javascript"; | 31 return L"javascript"; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 DCHECK(localized_strings); | 104 DCHECK(localized_strings); |
100 | 105 |
101 localized_strings->SetString(L"content_exceptions", | 106 localized_strings->SetString(L"content_exceptions", |
102 l10n_util::GetString(IDS_COOKIES_EXCEPTIONS_BUTTON)); | 107 l10n_util::GetString(IDS_COOKIES_EXCEPTIONS_BUTTON)); |
103 localized_strings->SetString(L"contentSettingsPage", | 108 localized_strings->SetString(L"contentSettingsPage", |
104 l10n_util::GetString(IDS_CONTENT_SETTINGS_TITLE)); | 109 l10n_util::GetString(IDS_CONTENT_SETTINGS_TITLE)); |
105 localized_strings->SetString(L"allowException", | 110 localized_strings->SetString(L"allowException", |
106 l10n_util::GetString(IDS_EXCEPTIONS_ALLOW_BUTTON)); | 111 l10n_util::GetString(IDS_EXCEPTIONS_ALLOW_BUTTON)); |
107 localized_strings->SetString(L"blockException", | 112 localized_strings->SetString(L"blockException", |
108 l10n_util::GetString(IDS_EXCEPTIONS_BLOCK_BUTTON)); | 113 l10n_util::GetString(IDS_EXCEPTIONS_BLOCK_BUTTON)); |
| 114 localized_strings->SetString(L"addExceptionRow", |
| 115 l10n_util::GetString(IDS_EXCEPTIONS_ADD_BUTTON)); |
| 116 localized_strings->SetString(L"removeExceptionRow", |
| 117 l10n_util::GetString(IDS_EXCEPTIONS_REMOVE_BUTTON)); |
109 | 118 |
110 // Cookies filter. | 119 // Cookies filter. |
111 localized_strings->SetString(L"cookies_tab_label", | 120 localized_strings->SetString(L"cookies_tab_label", |
112 l10n_util::GetString(IDS_COOKIES_TAB_LABEL)); | 121 l10n_util::GetString(IDS_COOKIES_TAB_LABEL)); |
113 localized_strings->SetString(L"cookies_modify", | 122 localized_strings->SetString(L"cookies_modify", |
114 l10n_util::GetString(IDS_MODIFY_COOKIE_STORING_LABEL)); | 123 l10n_util::GetString(IDS_MODIFY_COOKIE_STORING_LABEL)); |
115 localized_strings->SetString(L"cookies_allow", | 124 localized_strings->SetString(L"cookies_allow", |
116 l10n_util::GetString(IDS_COOKIES_ALLOW_RADIO)); | 125 l10n_util::GetString(IDS_COOKIES_ALLOW_RADIO)); |
117 localized_strings->SetString(L"cookies_block", | 126 localized_strings->SetString(L"cookies_block", |
118 l10n_util::GetString(IDS_COOKIES_BLOCK_RADIO)); | 127 l10n_util::GetString(IDS_COOKIES_BLOCK_RADIO)); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 | 223 |
215 dom_ui_->CallJavascriptFunction( | 224 dom_ui_->CallJavascriptFunction( |
216 L"ContentSettings.setInitialContentFilterSettingsValue", filter_settings); | 225 L"ContentSettings.setInitialContentFilterSettingsValue", filter_settings); |
217 | 226 |
218 scoped_ptr<Value> bool_value(Value::CreateBooleanValue( | 227 scoped_ptr<Value> bool_value(Value::CreateBooleanValue( |
219 settings_map->BlockThirdPartyCookies())); | 228 settings_map->BlockThirdPartyCookies())); |
220 dom_ui_->CallJavascriptFunction( | 229 dom_ui_->CallJavascriptFunction( |
221 L"ContentSettings.setBlockThirdPartyCookies", *bool_value.get()); | 230 L"ContentSettings.setBlockThirdPartyCookies", *bool_value.get()); |
222 | 231 |
223 UpdateImagesExceptionsViewFromModel(); | 232 UpdateImagesExceptionsViewFromModel(); |
| 233 notification_registrar_.Add( |
| 234 this, NotificationType::CONTENT_SETTINGS_CHANGED, |
| 235 Source<const HostContentSettingsMap>(settings_map)); |
224 } | 236 } |
225 | 237 |
226 // TODO(estade): generalize this function to work on all content settings types | 238 // TODO(estade): generalize this function to work on all content settings types |
227 // rather than just images. | 239 // rather than just images. |
228 // TODO(estade): call this in response to content exceptions change | 240 void ContentSettingsHandler::Observe(NotificationType type, |
229 // notifications. | 241 const NotificationSource& source, |
| 242 const NotificationDetails& details) { |
| 243 if (type != NotificationType::CONTENT_SETTINGS_CHANGED) |
| 244 return OptionsPageUIHandler::Observe(type, source, details); |
| 245 |
| 246 const ContentSettingsDetails* settings_details = |
| 247 static_cast<Details<const ContentSettingsDetails> >(details).ptr(); |
| 248 |
| 249 if (settings_details->type() == CONTENT_SETTINGS_TYPE_IMAGES || |
| 250 settings_details->update_all_types()) { |
| 251 // TODO(estade): we pretend update_all() is always true. |
| 252 UpdateImagesExceptionsViewFromModel(); |
| 253 } |
| 254 } |
| 255 |
| 256 // TODO(estade): generalize this function to work on all content settings types |
| 257 // rather than just images. |
230 void ContentSettingsHandler::UpdateImagesExceptionsViewFromModel() { | 258 void ContentSettingsHandler::UpdateImagesExceptionsViewFromModel() { |
231 HostContentSettingsMap::SettingsForOneType entries; | 259 HostContentSettingsMap::SettingsForOneType entries; |
232 const HostContentSettingsMap* settings_map = | 260 const HostContentSettingsMap* settings_map = |
233 dom_ui_->GetProfile()->GetHostContentSettingsMap(); | 261 dom_ui_->GetProfile()->GetHostContentSettingsMap(); |
234 settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_IMAGES, &entries); | 262 settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_IMAGES, &entries); |
235 | 263 |
236 ListValue exceptions; | 264 ListValue exceptions; |
237 for (size_t i = 0; i < entries.size(); ++i) { | 265 for (size_t i = 0; i < entries.size(); ++i) { |
238 ListValue* exception = new ListValue(); | 266 ListValue* exception = new ListValue(); |
239 exception->Append(new StringValue(entries[i].first.AsString())); | 267 exception->Append(new StringValue(entries[i].first.AsString())); |
240 exception->Append( | 268 exception->Append( |
241 new StringValue(ContentSettingToString(entries[i].second))); | 269 new StringValue(ContentSettingToString(entries[i].second))); |
242 exceptions.Append(exception); | 270 exceptions.Append(exception); |
243 } | 271 } |
244 | 272 |
245 dom_ui_->CallJavascriptFunction( | 273 dom_ui_->CallJavascriptFunction( |
246 L"ContentSettings.setImagesExceptions", exceptions); | 274 L"ContentSettings.setImagesExceptions", exceptions); |
247 } | 275 } |
248 | 276 |
249 void ContentSettingsHandler::RegisterMessages() { | 277 void ContentSettingsHandler::RegisterMessages() { |
250 dom_ui_->RegisterMessageCallback("setContentFilter", | 278 dom_ui_->RegisterMessageCallback("setContentFilter", |
251 NewCallback(this, | 279 NewCallback(this, |
252 &ContentSettingsHandler::SetContentFilter)); | 280 &ContentSettingsHandler::SetContentFilter)); |
253 dom_ui_->RegisterMessageCallback("setAllowThirdPartyCookies", | 281 dom_ui_->RegisterMessageCallback("setAllowThirdPartyCookies", |
254 NewCallback(this, | 282 NewCallback(this, |
255 &ContentSettingsHandler::SetAllowThirdPartyCookies)); | 283 &ContentSettingsHandler::SetAllowThirdPartyCookies)); |
| 284 dom_ui_->RegisterMessageCallback("removeImageExceptions", |
| 285 NewCallback(this, |
| 286 &ContentSettingsHandler::RemoveExceptions)); |
256 } | 287 } |
257 | 288 |
258 void ContentSettingsHandler::SetContentFilter(const Value* value) { | 289 void ContentSettingsHandler::SetContentFilter(const Value* value) { |
259 const ListValue* list_value = static_cast<const ListValue*>(value); | 290 const ListValue* list_value = static_cast<const ListValue*>(value); |
260 DCHECK_EQ(2U, list_value->GetSize()); | 291 DCHECK_EQ(2U, list_value->GetSize()); |
261 std::string group, setting; | 292 std::string group, setting; |
262 if (!(list_value->GetString(0, &group) && | 293 if (!(list_value->GetString(0, &group) && |
263 list_value->GetString(1, &setting))) { | 294 list_value->GetString(1, &setting))) { |
264 NOTREACHED(); | 295 NOTREACHED(); |
265 return; | 296 return; |
266 } | 297 } |
267 | 298 |
268 dom_ui_->GetProfile()->GetHostContentSettingsMap()->SetDefaultContentSetting( | 299 dom_ui_->GetProfile()->GetHostContentSettingsMap()->SetDefaultContentSetting( |
269 ContentSettingsTypeFromGroupName(group), | 300 ContentSettingsTypeFromGroupName(group), |
270 ContentSettingFromString(setting)); | 301 ContentSettingFromString(setting)); |
271 } | 302 } |
272 | 303 |
273 void ContentSettingsHandler::SetAllowThirdPartyCookies(const Value* value) { | 304 void ContentSettingsHandler::SetAllowThirdPartyCookies(const Value* value) { |
274 std::wstring allow = ExtractStringValue(value); | 305 std::wstring allow = ExtractStringValue(value); |
275 | 306 |
276 dom_ui_->GetProfile()->GetHostContentSettingsMap()->SetBlockThirdPartyCookies( | 307 dom_ui_->GetProfile()->GetHostContentSettingsMap()->SetBlockThirdPartyCookies( |
277 allow == L"true"); | 308 allow == L"true"); |
278 } | 309 } |
| 310 |
| 311 // TODO(estade): generalize this function to work on all content settings types |
| 312 // rather than just images. |
| 313 void ContentSettingsHandler::RemoveExceptions(const Value* value) { |
| 314 const ListValue* list_value = static_cast<const ListValue*>(value); |
| 315 |
| 316 HostContentSettingsMap* settings_map = |
| 317 dom_ui_->GetProfile()->GetHostContentSettingsMap(); |
| 318 for (size_t i = 0; i < list_value->GetSize(); ++i) { |
| 319 std::string pattern; |
| 320 bool rv = list_value->GetString(i, &pattern); |
| 321 DCHECK(rv); |
| 322 settings_map->SetContentSetting(HostContentSettingsMap::Pattern(pattern), |
| 323 CONTENT_SETTINGS_TYPE_IMAGES, |
| 324 CONTENT_SETTING_DEFAULT); |
| 325 } |
| 326 } |
OLD | NEW |