172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/options/content_settings_handler.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/callback.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/command_line.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/browser_process.h" 1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/content_settings/content_settings_details.h" 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/content_settings/host_content_settings_map.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/geolocation/geolocation_content_settings_map.h" 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/notifications/desktop_notification_service.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/notifications/desktop_notification_service_factory.h" 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_list.h" 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/chrome_switches.h" 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/content_settings_helper.h" 21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/pref_names.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h" 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/locale_settings.h" 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace { 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst char* kDisplayPattern = "displayPattern"; 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst char* kSetting = "setting"; 34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst char* kOrigin = "origin"; 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst char* kEmbeddingOrigin = "embeddingOrigin"; 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst char* const kContentSettingsTypeGroupNames[] = { 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "cookies", 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "images", 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "javascript", 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "plugins", 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "popups", 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "location", 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "notifications", 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "prerender", 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 47dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenCOMPILE_ASSERT(arraysize(kContentSettingsTypeGroupNames) == 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONTENT_SETTINGS_NUM_TYPES, 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen invalid_content_settings_type_group_names_size); 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochContentSettingsType ContentSettingsTypeFromGroupName(const std::string& name) { 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int content_settings_type = CONTENT_SETTINGS_TYPE_COOKIES; 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen content_settings_type < CONTENT_SETTINGS_NUM_TYPES; 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ++content_settings_type) { 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (name == kContentSettingsTypeGroupNames[content_settings_type]) 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return static_cast<ContentSettingsType>(content_settings_type); 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NOTREACHED() << name << " is not a recognized content settings type."; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return CONTENT_SETTINGS_TYPE_DEFAULT; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string ContentSettingToString(ContentSetting setting) { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (setting) { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case CONTENT_SETTING_ALLOW: 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "allow"; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case CONTENT_SETTING_ASK: 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "ask"; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case CONTENT_SETTING_BLOCK: 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "block"; 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case CONTENT_SETTING_SESSION_ONLY: 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return "session"; 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case CONTENT_SETTING_DEFAULT: 76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return "default"; 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case CONTENT_SETTING_NUM_SETTINGS: 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return ""; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochContentSetting ContentSettingFromString(const std::string& name) { 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (name == "allow") 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return CONTENT_SETTING_ALLOW; 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (name == "ask") 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return CONTENT_SETTING_ASK; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (name == "block") 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return CONTENT_SETTING_BLOCK; 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (name == "session") 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return CONTENT_SETTING_SESSION_ONLY; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NOTREACHED() << name << " is not a recognized content setting."; 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return CONTENT_SETTING_DEFAULT; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstd::string GeolocationExceptionToString(const GURL& origin, 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GURL& embedding_origin) { 100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (origin == embedding_origin) 101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return content_settings_helper::OriginToString(origin); 102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // TODO(estade): the page needs to use CSS to indent the string. 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string indent(" "); 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (embedding_origin.is_empty()) { 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // NOTE: As long as the user cannot add/edit entries from the exceptions 107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // dialog, it's impossible to actually have a non-default setting for some 108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // origin "embedded on any other site", so this row will never appear. If 109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // we add the ability to add/edit exceptions, we'll need to decide when to 110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // display this and how "removing" it will function. 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return indent + 112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick l10n_util::GetStringUTF8(IDS_EXCEPTIONS_GEOLOCATION_EMBEDDED_ANY_OTHER); 113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return indent + l10n_util::GetStringFUTF8( 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IDS_EXCEPTIONS_GEOLOCATION_EMBEDDED_ON_HOST, 117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UTF8ToUTF16(content_settings_helper::OriginToString(embedding_origin))); 118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Create a DictionaryValue* that will act as a data source for a single row 121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// in a HostContentSettingsMap-controlled exceptions table (e.g., cookies). 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Ownership of the pointer is passed to the caller. 123731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDictionaryValue* GetExceptionForPage( 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ContentSettingsPattern& pattern, 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSetting setting) { 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* exception = new DictionaryValue(); 127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kDisplayPattern, 129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(pattern.AsString())); 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kSetting, 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(ContentSettingToString(setting))); 133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return exception; 134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Create a DictionaryValue* that will act as a data source for a single row 137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// in the Geolocation exceptions table. Ownership of the pointer is passed to 138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// the caller. 139731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDictionaryValue* GetGeolocationExceptionForPage(const GURL& origin, 140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GURL& embedding_origin, 141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSetting setting) { 142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* exception = new DictionaryValue(); 143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kDisplayPattern, 145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(GeolocationExceptionToString(origin, embedding_origin))); 146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kSetting, 148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(ContentSettingToString(setting))); 149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kOrigin, 151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(origin.spec())); 152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 153731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kEmbeddingOrigin, 154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(embedding_origin.spec())); 155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return exception; 156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 157731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 158731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Create a DictionaryValue* that will act as a data source for a single row 159731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// in the desktop notifications exceptions table. Ownership of the pointer is 160731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// passed to the caller. 161731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDictionaryValue* GetNotificationExceptionForPage( 162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GURL& url, 163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSetting setting) { 164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* exception = new DictionaryValue(); 165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 166731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kDisplayPattern, 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(content_settings_helper::OriginToString(url))); 168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kSetting, 170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(ContentSettingToString(setting))); 171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exception->Set( 172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kOrigin, 173731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new StringValue(url.spec())); 174731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return exception; 175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochContentSettingsHandler::ContentSettingsHandler() { 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochContentSettingsHandler::~ContentSettingsHandler() { 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ContentSettingsHandler::GetLocalizedValues( 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* localized_strings) { 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(localized_strings); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static OptionsStringResource resources[] = { 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "content_exceptions", IDS_COOKIES_EXCEPTIONS_BUTTON }, 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "allowException", IDS_EXCEPTIONS_ALLOW_BUTTON }, 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "blockException", IDS_EXCEPTIONS_BLOCK_BUTTON }, 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "sessionException", IDS_EXCEPTIONS_SESSION_ONLY_BUTTON }, 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "askException", IDS_EXCEPTIONS_ASK_BUTTON }, 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "addExceptionRow", IDS_EXCEPTIONS_ADD_BUTTON }, 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "removeExceptionRow", IDS_EXCEPTIONS_REMOVE_BUTTON }, 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "editExceptionRow", IDS_EXCEPTIONS_EDIT_BUTTON }, 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "otr_exceptions_explanation", IDS_EXCEPTIONS_OTR_LABEL }, 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "examplePattern", IDS_EXCEPTIONS_PATTERN_EXAMPLE }, 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "addNewExceptionInstructions", IDS_EXCEPTIONS_ADD_NEW_INSTRUCTIONS }, 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "manage_exceptions", IDS_EXCEPTIONS_MANAGE }, 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "exceptionPatternHeader", IDS_EXCEPTIONS_PATTERN_HEADER }, 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "exceptionBehaviorHeader", IDS_EXCEPTIONS_ACTION_HEADER }, 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Cookies filter. 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_tab_label", IDS_COOKIES_TAB_LABEL }, 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_header", IDS_COOKIES_HEADER }, 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_allow", IDS_COOKIES_ALLOW_RADIO }, 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_ask", IDS_COOKIES_ASK_EVERY_TIME_RADIO }, 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_block", IDS_COOKIES_BLOCK_RADIO }, 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_block_3rd_party", IDS_COOKIES_BLOCK_3RDPARTY_CHKBOX }, 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "cookies_clear_when_close", IDS_COOKIES_CLEAR_WHEN_CLOSE_CHKBOX }, 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "cookies_lso_clear_when_close", IDS_COOKIES_LSO_CLEAR_WHEN_CLOSE_CHKBOX }, 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "cookies_show_cookies", IDS_COOKIES_SHOW_COOKIES_BUTTON }, 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "flash_storage_settings", IDS_FLASH_STORAGE_SETTINGS }, 21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "flash_storage_url", IDS_FLASH_STORAGE_URL }, 21672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Image filter. 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "images_tab_label", IDS_IMAGES_TAB_LABEL }, 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "images_header", IDS_IMAGES_HEADER }, 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "images_allow", IDS_IMAGES_LOAD_RADIO }, 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "images_block", IDS_IMAGES_NOLOAD_RADIO }, 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // JavaScript filter. 22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "javascript_tab_label", IDS_JAVASCRIPT_TAB_LABEL }, 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "javascript_header", IDS_JAVASCRIPT_HEADER }, 22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "javascript_allow", IDS_JS_ALLOW_RADIO }, 22572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "javascript_block", IDS_JS_DONOTALLOW_RADIO }, 22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Plug-ins filter. 22772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "plugins_tab_label", IDS_PLUGIN_TAB_LABEL }, 22872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "plugins_header", IDS_PLUGIN_HEADER }, 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "plugins_ask", IDS_PLUGIN_ASK_RADIO }, 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "plugins_allow", IDS_PLUGIN_LOAD_RADIO }, 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "plugins_block", IDS_PLUGIN_NOLOAD_RADIO }, 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "disable_individual_plugins", IDS_PLUGIN_SELECTIVE_DISABLE }, 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Pop-ups filter. 23472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "popups_tab_label", IDS_POPUP_TAB_LABEL }, 23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "popups_header", IDS_POPUP_HEADER }, 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "popups_allow", IDS_POPUP_ALLOW_RADIO }, 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "popups_block", IDS_POPUP_BLOCK_RADIO }, 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Location filter. 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "location_tab_label", IDS_GEOLOCATION_TAB_LABEL }, 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "location_header", IDS_GEOLOCATION_HEADER }, 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "location_allow", IDS_GEOLOCATION_ALLOW_RADIO }, 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "location_ask", IDS_GEOLOCATION_ASK_RADIO }, 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "location_block", IDS_GEOLOCATION_BLOCK_RADIO }, 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Notifications filter. 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "notifications_tab_label", IDS_NOTIFICATIONS_TAB_LABEL }, 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "notifications_header", IDS_NOTIFICATIONS_HEADER }, 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "notifications_allow", IDS_NOTIFICATIONS_ALLOW_RADIO }, 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "notifications_ask", IDS_NOTIFICATIONS_ASK_RADIO }, 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { "notifications_block", IDS_NOTIFICATIONS_BLOCK_RADIO }, 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen }; 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RegisterStrings(localized_strings, resources, arraysize(resources)); 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RegisterTitle(localized_strings, "contentSettingsPage", 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IDS_CONTENT_SETTINGS_TITLE); 255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch localized_strings->SetBoolean("enable_click_to_play", 256201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CommandLine::ForCurrentProcess()->HasSwitch( 257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch switches::kEnableClickToPlay)); 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::Initialize() { 2613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const HostContentSettingsMap* settings_map = GetContentSettingsMap(); 2623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<Value> block_3rd_party(Value::CreateBooleanValue( 2633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick settings_map->BlockThirdPartyCookies())); 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ContentSettings.setBlockThirdPartyCookies", 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *block_3rd_party.get()); 26672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 267731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick notification_registrar_.Add( 268731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, NotificationType::OTR_PROFILE_CREATED, 269731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationService::AllSources()); 270731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick notification_registrar_.Add( 271731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, NotificationType::PROFILE_DESTROYED, 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationService::AllSources()); 273731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick UpdateAllExceptionsViewsFromModel(); 2753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick notification_registrar_.Add( 2763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick this, NotificationType::CONTENT_SETTINGS_CHANGED, 27721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NotificationService::AllSources()); 278731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick notification_registrar_.Add( 279731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, NotificationType::DESKTOP_NOTIFICATION_DEFAULT_CHANGED, 280731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationService::AllSources()); 281731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick notification_registrar_.Add( 282731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, NotificationType::DESKTOP_NOTIFICATION_SETTINGS_CHANGED, 283731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationService::AllSources()); 284513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PrefService* prefs = web_ui_->GetProfile()->GetPrefs(); 286513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch pref_change_registrar_.Init(prefs); 287513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch pref_change_registrar_.Add(prefs::kGeolocationDefaultContentSetting, this); 288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch pref_change_registrar_.Add(prefs::kGeolocationContentSettings, this); 2893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::Observe(NotificationType type, 2923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationSource& source, 2933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationDetails& details) { 294731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick switch (type.value) { 295731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::PROFILE_DESTROYED: { 296731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Profile* profile = static_cast<Source<Profile> >(source).ptr(); 29721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (profile->IsOffTheRecord()) { 29872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->CallJavascriptFunction( 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "ContentSettingsExceptionsArea.OTRProfileDestroyed"); 30021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 301731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 302731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 304731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::OTR_PROFILE_CREATED: { 305731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateAllOTRExceptionsViewsFromModel(); 306731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 307731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 309731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::CONTENT_SETTINGS_CHANGED: { 310731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const ContentSettingsDetails* settings_details = 31121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Details<const ContentSettingsDetails>(details).ptr(); 312731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 313731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // TODO(estade): we pretend update_all() is always true. 314731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (settings_details->update_all_types()) 315731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateAllExceptionsViewsFromModel(); 316731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick else 317731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateExceptionsViewFromModel(settings_details->type()); 318731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 319731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 320731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch case NotificationType::PREF_CHANGED: { 322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& pref_name = *Details<std::string>(details).ptr(); 323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (pref_name == prefs::kGeolocationDefaultContentSetting) 324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_GEOLOCATION); 325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (pref_name == prefs::kGeolocationContentSettings) 326513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch UpdateGeolocationExceptionsView(); 3274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch break; 328731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 329731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 330731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::DESKTOP_NOTIFICATION_DEFAULT_CHANGED: { 331731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 332731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 333731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 334731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 335731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::DESKTOP_NOTIFICATION_SETTINGS_CHANGED: { 336731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateNotificationExceptionsView(); 337731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 338731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 339731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 340731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick default: 341731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick OptionsPageUIHandler::Observe(type, source, details); 342731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 345731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ContentSettingsHandler::UpdateSettingDefaultFromModel( 3463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type) { 3473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DictionaryValue filter_settings; 34821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen filter_settings.SetString(ContentSettingsTypeToGroupName(type) + ".value", 34921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GetSettingDefaultFromModel(type)); 35021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen filter_settings.SetBoolean(ContentSettingsTypeToGroupName(type) + ".managed", 35121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GetDefaultSettingManagedFromModel(type)); 3523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 35372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->CallJavascriptFunction( 354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "ContentSettings.setContentFilterSettingsValue", filter_settings); 3553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 357731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstd::string ContentSettingsHandler::GetSettingDefaultFromModel( 3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type) { 3593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSetting default_setting; 360731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 36172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default_setting = web_ui_->GetProfile()-> 3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GetGeolocationContentSettingsMap()->GetDefaultContentSetting(); 3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { 364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen default_setting = DesktopNotificationServiceFactory::GetForProfile( 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->GetProfile())->GetDefaultContentSetting(); 3663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 3673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick default_setting = GetContentSettingsMap()->GetDefaultContentSetting(type); 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ContentSettingToString(default_setting); 3713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 37321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool ContentSettingsHandler::GetDefaultSettingManagedFromModel( 37421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ContentSettingsType type) { 37521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 37672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return web_ui_->GetProfile()-> 37721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GetGeolocationContentSettingsMap()->IsDefaultContentSettingManaged(); 37821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return DesktopNotificationServiceFactory::GetForProfile( 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->GetProfile())->IsDefaultContentSettingManaged(); 38121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else { 38221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return GetContentSettingsMap()->IsDefaultContentSettingManaged(type); 38321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 38421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 38521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::UpdateAllExceptionsViewsFromModel() { 3873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (int type = CONTENT_SETTINGS_TYPE_DEFAULT + 1; 3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick type < CONTENT_SETTINGS_NUM_TYPES; ++type) { 3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick UpdateExceptionsViewFromModel(static_cast<ContentSettingsType>(type)); 3903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 3913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 393731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ContentSettingsHandler::UpdateAllOTRExceptionsViewsFromModel() { 394731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (int type = CONTENT_SETTINGS_TYPE_DEFAULT + 1; 395731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick type < CONTENT_SETTINGS_NUM_TYPES; ++type) { 396dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen UpdateOTRExceptionsViewFromModel(static_cast<ContentSettingsType>(type)); 397731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 398731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 399731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 4003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::UpdateExceptionsViewFromModel( 4013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type) { 402dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switch (type) { 403dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case CONTENT_SETTINGS_TYPE_GEOLOCATION: 404dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen UpdateGeolocationExceptionsView(); 405dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 406dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 407dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen UpdateNotificationExceptionsView(); 408dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 409dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case CONTENT_SETTINGS_TYPE_PRERENDER: 410dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Prerender is currently (02/24/2011) an experimental feature which is 411dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // only turned on via about:flags. There is intentionally no UI in 412dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // chrome://preferences for CONTENT_SETTINGS_TYPE_PRERENDER. 413dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(cbentzel): Change once prerender moves out of about:flags. 414dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 415dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen default: 416dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen UpdateExceptionsViewFromHostContentSettingsMap(type); 417dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 418dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 419dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 420dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 421dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid ContentSettingsHandler::UpdateOTRExceptionsViewFromModel( 422dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsType type) { 423dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switch (type) { 424dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case CONTENT_SETTINGS_TYPE_GEOLOCATION: 425dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 426dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case CONTENT_SETTINGS_TYPE_PRERENDER: 427dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 428dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen default: 429dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen UpdateExceptionsViewFromOTRHostContentSettingsMap(type); 430dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 431dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 432731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 433731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 434731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ContentSettingsHandler::UpdateGeolocationExceptionsView() { 435731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GeolocationContentSettingsMap* map = 43672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->GetProfile()->GetGeolocationContentSettingsMap(); 437731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GeolocationContentSettingsMap::AllOriginsSettings all_settings = 438731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick map->GetAllOriginsSettings(); 439731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GeolocationContentSettingsMap::AllOriginsSettings::const_iterator i; 440731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 441731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ListValue exceptions; 442731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (i = all_settings.begin(); i != all_settings.end(); ++i) { 443731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GURL& origin = i->first; 444731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GeolocationContentSettingsMap::OneOriginSettings& one_settings = 445731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick i->second; 446731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 447731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GeolocationContentSettingsMap::OneOriginSettings::const_iterator parent = 448731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick one_settings.find(origin); 449731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 450731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Add the "parent" entry for the non-embedded setting. 451731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSetting parent_setting = 452731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick parent == one_settings.end() ? CONTENT_SETTING_DEFAULT : parent->second; 453731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exceptions.Append( 454731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetGeolocationExceptionForPage(origin, origin, parent_setting)); 455731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 456731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Add the "children" for any embedded settings. 457731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GeolocationContentSettingsMap::OneOriginSettings::const_iterator j; 458731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (j = one_settings.begin(); j != one_settings.end(); ++j) { 459731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Skip the non-embedded setting which we already added above. 460731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (j == parent) 461731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick continue; 462731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 463731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exceptions.Append( 464731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetGeolocationExceptionForPage(origin, j->first, j->second)); 465731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 466731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 467731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 468731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick StringValue type_string( 469731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_GEOLOCATION)); 470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ContentSettings.setExceptions", 471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen type_string, exceptions); 472731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 473731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // This is mainly here to keep this function ideologically parallel to 474731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // UpdateExceptionsViewFromHostContentSettingsMap(). 475731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_GEOLOCATION); 476731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 477731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 478731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ContentSettingsHandler::UpdateNotificationExceptionsView() { 479731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DesktopNotificationService* service = 480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DesktopNotificationServiceFactory::GetForProfile(web_ui_->GetProfile()); 481731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 482731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> allowed(service->GetAllowedOrigins()); 483731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> blocked(service->GetBlockedOrigins()); 484731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 485731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ListValue exceptions; 486731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (size_t i = 0; i < allowed.size(); ++i) { 487731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exceptions.Append( 488731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetNotificationExceptionForPage(allowed[i], CONTENT_SETTING_ALLOW)); 489731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 490731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (size_t i = 0; i < blocked.size(); ++i) { 491731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exceptions.Append( 492731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetNotificationExceptionForPage(blocked[i], CONTENT_SETTING_BLOCK)); 493731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 494731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 495731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick StringValue type_string( 496731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ContentSettings.setExceptions", 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen type_string, exceptions); 499731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 500731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // This is mainly here to keep this function ideologically parallel to 501731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // UpdateExceptionsViewFromHostContentSettingsMap(). 502731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 503731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 504731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 505731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ContentSettingsHandler::UpdateExceptionsViewFromHostContentSettingsMap( 506731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSettingsType type) { 5073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick HostContentSettingsMap::SettingsForOneType entries; 5083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GetContentSettingsMap()->GetSettingsForOneType(type, "", &entries); 5093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ListValue exceptions; 5113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (size_t i = 0; i < entries.size(); ++i) { 512731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick exceptions.Append(GetExceptionForPage(entries[i].first, entries[i].second)); 5133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 5143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick StringValue type_string(ContentSettingsTypeToGroupName(type)); 516ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ContentSettings.setExceptions", type_string, 517ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen exceptions); 5183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 519731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateExceptionsViewFromOTRHostContentSettingsMap(type); 520731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 5213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The default may also have changed (we won't get a separate notification). 5223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // If it hasn't changed, this call will be harmless. 523731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UpdateSettingDefaultFromModel(type); 524731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 5253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 526731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ContentSettingsHandler::UpdateExceptionsViewFromOTRHostContentSettingsMap( 527731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ContentSettingsType type) { 5283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const HostContentSettingsMap* otr_settings_map = GetOTRContentSettingsMap(); 529731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!otr_settings_map) 530731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 5313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 532731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick HostContentSettingsMap::SettingsForOneType otr_entries; 533731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick otr_settings_map->GetSettingsForOneType(type, "", &otr_entries); 534731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 535731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ListValue otr_exceptions; 536731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (size_t i = 0; i < otr_entries.size(); ++i) { 537731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick otr_exceptions.Append(GetExceptionForPage(otr_entries[i].first, 538731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick otr_entries[i].second)); 5393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 540731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 541731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick StringValue type_string(ContentSettingsTypeToGroupName(type)); 542ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ContentSettings.setOTRExceptions", 543ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen type_string, otr_exceptions); 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ContentSettingsHandler::RegisterMessages() { 54772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setContentFilter", 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NewCallback(this, 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &ContentSettingsHandler::SetContentFilter)); 55072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setAllowThirdPartyCookies", 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NewCallback(this, 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &ContentSettingsHandler::SetAllowThirdPartyCookies)); 55372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("removeException", 5543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NewCallback(this, 55521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &ContentSettingsHandler::RemoveException)); 55672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setException", 5573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NewCallback(this, 5583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &ContentSettingsHandler::SetException)); 55972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("checkExceptionPatternValidity", 5603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NewCallback(this, 5613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &ContentSettingsHandler::CheckExceptionPatternValidity)); 562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::SetContentFilter(const ListValue* args) { 5653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK_EQ(2U, args->GetSize()); 5663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string group, setting; 5673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!(args->GetString(0, &group) && 5683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick args->GetString(1, &setting))) { 5693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NOTREACHED(); 5703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return; 5713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSetting default_setting = ContentSettingFromString(setting); 5743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType content_type = ContentSettingsTypeFromGroupName(group); 575731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 57672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->GetProfile()->GetGeolocationContentSettingsMap()-> 5773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetDefaultContentSetting(default_setting); 5783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { 579ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DesktopNotificationServiceFactory::GetForProfile(web_ui_->GetProfile())-> 5803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetDefaultContentSetting(default_setting); 5813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 5823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GetContentSettingsMap()-> 5833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetDefaultContentSetting(content_type, default_setting); 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 5853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::SetAllowThirdPartyCookies(const ListValue* args) { 588ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 allow = ExtractStringValue(args); 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 590ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetContentSettingsMap()->SetBlockThirdPartyCookies( 591ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LowerCaseEqualsASCII(allow, "true")); 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid ContentSettingsHandler::RemoveException(const ListValue* args) { 5953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t arg_i = 0; 5963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string type_string; 5973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &type_string)); 5983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type = ContentSettingsTypeFromGroupName(type_string); 60021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 60121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string origin; 60221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string embedding_origin; 60321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool rv = args->GetString(arg_i++, &origin); 60421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(rv); 60521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen rv = args->GetString(arg_i++, &embedding_origin); 60621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(rv); 60721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 60872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->GetProfile()->GetGeolocationContentSettingsMap()-> 60921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SetContentSetting(GURL(origin), 61021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GURL(embedding_origin), 61121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CONTENT_SETTING_DEFAULT); 61221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { 61321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string origin; 61421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string setting; 61521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool rv = args->GetString(arg_i++, &origin); 61621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(rv); 61721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen rv = args->GetString(arg_i++, &setting); 61821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(rv); 61921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ContentSetting content_setting = ContentSettingFromString(setting); 62021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (content_setting == CONTENT_SETTING_ALLOW) { 621ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DesktopNotificationServiceFactory::GetForProfile(web_ui_->GetProfile())-> 62221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ResetAllowedOrigin(GURL(origin)); 6233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 62421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK_EQ(content_setting, CONTENT_SETTING_BLOCK); 625ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DesktopNotificationServiceFactory::GetForProfile(web_ui_->GetProfile())-> 62621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ResetBlockedOrigin(GURL(origin)); 62721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 62821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else { 62921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string mode; 63021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool rv = args->GetString(arg_i++, &mode); 63121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(rv); 63221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 63321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string pattern; 63421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen rv = args->GetString(arg_i++, &pattern); 63521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(rv); 63621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 63721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen HostContentSettingsMap* settings_map = 63821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen mode == "normal" ? GetContentSettingsMap() : 63921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GetOTRContentSettingsMap(); 64021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The settings map could be null if the mode was OTR but the OTR profile 64121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // got destroyed before we received this message. 64221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (settings_map) { 64321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen settings_map->SetContentSetting( 64421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ContentSettingsPattern(pattern), 64521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ContentSettingsTypeFromGroupName(type_string), 64621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "", 64721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CONTENT_SETTING_DEFAULT); 6483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 6493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 6503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 6513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::SetException(const ListValue* args) { 6533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t arg_i = 0; 6543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string type_string; 6553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &type_string)); 6563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string mode; 6573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &mode)); 6583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string pattern; 6593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &pattern)); 6603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string setting; 6613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &setting)); 6623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type = ContentSettingsTypeFromGroupName(type_string); 6643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION || 6653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick HostContentSettingsMap* settings_map = 6713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick mode == "normal" ? GetContentSettingsMap() : 6723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GetOTRContentSettingsMap(); 6733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The settings map could be null if the mode was OTR but the OTR profile 6753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // got destroyed before we received this message. 6763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!settings_map) 6773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return; 6783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 67921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen settings_map->SetContentSetting(ContentSettingsPattern(pattern), 68021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen type, 68121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "", 68221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ContentSettingFromString(setting)); 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ContentSettingsHandler::CheckExceptionPatternValidity( 6863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const ListValue* args) { 6873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t arg_i = 0; 6883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Value* type; 6893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->Get(arg_i++, &type)); 6903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string mode_string; 6913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &mode_string)); 6923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string pattern_string; 6933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHECK(args->GetString(arg_i++, &pattern_string)); 6943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 69521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ContentSettingsPattern pattern(pattern_string); 6963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<Value> mode_value(Value::CreateStringValue(mode_string)); 6983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<Value> pattern_value(Value::CreateStringValue(pattern_string)); 6993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<Value> valid_value(Value::CreateBooleanValue(pattern.IsValid())); 7003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 70172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->CallJavascriptFunction( 702ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "ContentSettings.patternValidityCheckComplete", 703ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *type, 704ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *mode_value.get(), 705ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *pattern_value.get(), 706ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *valid_value.get()); 7073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 7083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 7103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstd::string ContentSettingsHandler::ContentSettingsTypeToGroupName( 7113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsType type) { 712dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (type < CONTENT_SETTINGS_TYPE_COOKIES || 713dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen type >= CONTENT_SETTINGS_NUM_TYPES) { 714dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NOTREACHED(); 715dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return ""; 7163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 717dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return kContentSettingsTypeGroupNames[type]; 7183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 7193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7203345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHostContentSettingsMap* ContentSettingsHandler::GetContentSettingsMap() { 72172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return web_ui_->GetProfile()->GetHostContentSettingsMap(); 7223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7243345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHostContentSettingsMap* 7253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentSettingsHandler::GetOTRContentSettingsMap() { 72672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Profile* profile = web_ui_->GetProfile(); 7273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (profile->HasOffTheRecordProfile()) 7283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return profile->GetOffTheRecordProfile()->GetHostContentSettingsMap(); 7293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return NULL; 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 731