15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/content_settings_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <algorithm> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_special_storage_policy.h" 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_profile_util.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h" 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_details.h" 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h" 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings_pattern.h" 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_prefs/user_prefs.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/web_contents.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/public/common/page_zoom.h" 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_registry.h" 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h" 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/api_permission.h" 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction; 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using content_settings::ContentSettingToString; 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using content_settings::ContentSettingFromString; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::APIPermission; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ContentSettingsTypeNameEntry { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* name; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps from a secondary pattern to a setting. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<ContentSettingsPattern, ContentSetting> 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnePatternSettings; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps from a primary pattern/source pair to a OnePatternSettings. All the 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mappings in OnePatternSettings share the given primary pattern and source. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<std::pair<ContentSettingsPattern, std::string>, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnePatternSettings> 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AllPatternsSettings; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The AppFilter is used in AddExceptionsGrantedByHostedApps() to choose 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extensions which should have their extent displayed. 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef bool (*AppFilter)(const extensions::Extension& app, 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* profile); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kExceptionsLearnMoreUrl[] = 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "https://support.google.com/chrome/?p=settings_manage_exceptions"; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kSetting = "setting"; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kOrigin = "origin"; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kSource = "source"; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kAppName = "appName"; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kAppId = "appId"; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kEmbeddingOrigin = "embeddingOrigin"; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kPreferencesSource = "preference"; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* kVideoSetting = "video"; 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)const char* kZoom = "zoom"; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, "cookies"}, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, "images"}, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, "javascript"}, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, "plugins"}, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, "popups"}, 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_GEOLOCATION, "location"}, 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_NOTIFICATIONS, "notifications"}, 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, "auto-select-certificate"}, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_FULLSCREEN, "fullscreen"}, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_MOUSELOCK, "mouselock"}, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, "register-protocol-handler"}, 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_MEDIASTREAM, "media-stream"}, 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, "media-stream-mic"}, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, "media-stream-camera"}, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, "ppapi-broker"}, 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, "multiple-automatic-downloads"}, 113558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch {CONTENT_SETTINGS_TYPE_MIDI_SYSEX, "midi-sysex"}, 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, "push-messaging"}, 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS, "ssl-cert-decisions"}, 1160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 1170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, "protectedContent"}, 1180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// A pseudo content type. We use it to display data like a content setting even 12223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// though it is not a real content setting. 12323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)const char* kZoomContentType = "zoomlevels"; 12423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)content::BrowserContext* GetBrowserContext(content::WebUI* web_ui) { 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return web_ui->GetWebContents()->GetBrowserContext(); 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingsType ContentSettingsTypeFromGroupName(const std::string& name) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kContentSettingsTypeGroupNames); ++i) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (name == kContentSettingsTypeGroupNames[i].name) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kContentSettingsTypeGroupNames[i].type; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << name << " is not a recognized content settings type."; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CONTENT_SETTINGS_TYPE_DEFAULT; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a DictionaryValue* that will act as a data source for a single row 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in a HostContentSettingsMap-controlled exceptions table (e.g., cookies). 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ownership of the pointer is passed to the caller. 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* GetExceptionForPage( 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& pattern, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSetting& setting, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& provider_name) { 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* exception = new base::DictionaryValue(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kOrigin, pattern.ToString()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kEmbeddingOrigin, 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu secondary_pattern == ContentSettingsPattern::Wildcard() ? 1515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string() : 1525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu secondary_pattern.ToString()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSetting, ContentSettingToString(setting)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSource, provider_name); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exception; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a DictionaryValue* that will act as a data source for a single row 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in the Geolocation exceptions table. Ownership of the pointer is passed to 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the caller. 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* GetGeolocationExceptionForPage( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& origin, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& embedding_origin, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting) { 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* exception = new base::DictionaryValue(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSetting, ContentSettingToString(setting)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kOrigin, origin.ToString()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kEmbeddingOrigin, embedding_origin.ToString()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exception; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a DictionaryValue* that will act as a data source for a single row 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in the desktop notifications exceptions table. Ownership of the pointer is 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// passed to the caller. 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* GetNotificationExceptionForPage( 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ContentSettingsPattern& primary_pattern, 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ContentSettingsPattern& secondary_pattern, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& provider_name) { 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string embedding_origin; 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (secondary_pattern != ContentSettingsPattern::Wildcard()) 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci embedding_origin = secondary_pattern.ToString(); 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* exception = new base::DictionaryValue(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSetting, ContentSettingToString(setting)); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci exception->SetString(kOrigin, primary_pattern.ToString()); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci exception->SetString(kEmbeddingOrigin, embedding_origin); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSource, provider_name); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exception; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true whenever the |extension| is hosted and has |permission|. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Must have the AppFilter signature. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <APIPermission::ID permission> 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool HostedAppHasPermission(const extensions::Extension& extension, 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* /* context */) { 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return extension.is_hosted_app() && 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension.permissions_data()->HasAPIPermission(permission); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Add an "Allow"-entry to the list of |exceptions| for a |url_pattern| from 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the web extent of a hosted |app|. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddExceptionForHostedApp(const std::string& url_pattern, 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::Extension& app, base::ListValue* exceptions) { 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* exception = new base::DictionaryValue(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSetting, ContentSettingToString(CONTENT_SETTING_ALLOW)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kOrigin, url_pattern); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kEmbeddingOrigin, url_pattern); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kSource, "HostedApp"); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kAppName, app.name()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exception->SetString(kAppId, app.id()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exceptions->Append(exception); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Asks the |profile| for hosted apps which have the |permission| set, and 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// adds their web extent and launch URL to the |exceptions| list. 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AddExceptionsGrantedByHostedApps(content::BrowserContext* context, 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AppFilter app_filter, 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ListValue* exceptions) { 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const extensions::ExtensionSet& extensions = 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionRegistry::Get(context)->enabled_extensions(); 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (extensions::ExtensionSet::const_iterator extension = extensions.begin(); 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension != extensions.end(); ++extension) { 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!app_filter(*extension->get(), context)) 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) continue; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::URLPatternSet web_extent = (*extension)->web_extent(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add patterns from web extent. 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (extensions::URLPatternSet::const_iterator pattern = web_extent.begin(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern != web_extent.end(); ++pattern) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url_pattern = pattern->GetAsString(); 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddExceptionForHostedApp(url_pattern, *extension->get(), exceptions); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve the launch URL. 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL launch_url = 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extensions::AppLaunchInfo::GetLaunchWebURL(extension->get()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip adding the launch URL if it is part of the web extent. 238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (web_extent.MatchesURL(launch_url)) 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) continue; 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddExceptionForHostedApp(launch_url.spec(), *extension->get(), exceptions); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Sort ZoomLevelChanges by host and scheme 24523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// (a.com < http://a.com < https://a.com < b.com). 24623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool HostZoomSort(const content::HostZoomMap::ZoomLevelChange& a, 24723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const content::HostZoomMap::ZoomLevelChange& b) { 24823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return a.host == b.host ? a.scheme < b.scheme : a.host < b.host; 24923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 25023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingsHandler::MediaSettingsInfo::MediaSettingsInfo() 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : flash_default_setting(CONTENT_SETTING_DEFAULT), 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flash_settings_initialized(false), 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_flash_refresh_request_id(0), 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_flash_default_link(false), 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_flash_exceptions_link(false), 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_setting(CONTENT_SETTING_DEFAULT), 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy_disable_audio(false), 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy_disable_video(false), 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_setting_initialized(false), 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exceptions_initialized(false) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingsHandler::MediaSettingsInfo::~MediaSettingsInfo() { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)ContentSettingsHandler::ContentSettingsHandler() : observer_(this) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingsHandler::~ContentSettingsHandler() { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::GetLocalizedValues( 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* localized_strings) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(localized_strings); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(dhnishi): Standardize to lowerCamelCase. 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static OptionsStringResource resources[] = { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "allowException", IDS_EXCEPTIONS_ALLOW_BUTTON }, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "blockException", IDS_EXCEPTIONS_BLOCK_BUTTON }, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "sessionException", IDS_EXCEPTIONS_SESSION_ONLY_BUTTON }, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "askException", IDS_EXCEPTIONS_ASK_BUTTON }, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "otr_exceptions_explanation", IDS_EXCEPTIONS_OTR_LABEL }, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "addNewExceptionInstructions", IDS_EXCEPTIONS_ADD_NEW_INSTRUCTIONS }, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "manageExceptions", IDS_EXCEPTIONS_MANAGE }, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "manage_handlers", IDS_HANDLERS_MANAGE }, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "exceptionPatternHeader", IDS_EXCEPTIONS_PATTERN_HEADER }, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "exceptionBehaviorHeader", IDS_EXCEPTIONS_ACTION_HEADER }, 29323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { "exceptionZoomHeader", IDS_EXCEPTIONS_ZOOM_HEADER }, 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "embeddedOnHost", IDS_EXCEPTIONS_GEOLOCATION_EMBEDDED_ON_HOST }, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cookies filter. 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "cookiesTabLabel", IDS_COOKIES_TAB_LABEL }, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "cookies_header", IDS_COOKIES_HEADER }, 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "cookiesAllow", IDS_COOKIES_ALLOW_RADIO }, 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "cookiesBlock", IDS_COOKIES_BLOCK_RADIO }, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "cookies_session_only", IDS_COOKIES_SESSION_ONLY_RADIO }, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "cookies_block_3rd_party", IDS_COOKIES_BLOCK_3RDPARTY_CHKBOX }, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "cookies_clear_when_close", IDS_COOKIES_CLEAR_WHEN_CLOSE_CHKBOX }, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "cookies_lso_clear_when_close", IDS_COOKIES_LSO_CLEAR_WHEN_CLOSE_CHKBOX }, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "cookies_show_cookies", IDS_COOKIES_SHOW_COOKIES_BUTTON }, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "flash_storage_settings", IDS_FLASH_STORAGE_SETTINGS }, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "flash_storage_url", IDS_FLASH_STORAGE_URL }, 3077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_GOOGLE_NOW) 3087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) { "googleGeolocationAccessEnable", 3097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IDS_GEOLOCATION_GOOGLE_ACCESS_ENABLE_CHKBOX }, 3107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Image filter. 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "imagesTabLabel", IDS_IMAGES_TAB_LABEL }, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "images_header", IDS_IMAGES_HEADER }, 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "imagesAllow", IDS_IMAGES_LOAD_RADIO }, 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "imagesBlock", IDS_IMAGES_NOLOAD_RADIO }, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JavaScript filter. 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "javascriptTabLabel", IDS_JAVASCRIPT_TAB_LABEL }, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "javascript_header", IDS_JAVASCRIPT_HEADER }, 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "javascriptAllow", IDS_JS_ALLOW_RADIO }, 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "javascriptBlock", IDS_JS_DONOTALLOW_RADIO }, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Plug-ins filter. 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "pluginsTabLabel", IDS_PLUGIN_TAB_LABEL }, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "plugins_header", IDS_PLUGIN_HEADER }, 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "pluginsAsk", IDS_PLUGIN_ASK_RADIO }, 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "pluginsAllow", IDS_PLUGIN_LOAD_RADIO }, 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "pluginsBlock", IDS_PLUGIN_NOLOAD_RADIO }, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "disableIndividualPlugins", IDS_PLUGIN_SELECTIVE_DISABLE }, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pop-ups filter. 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "popupsTabLabel", IDS_POPUP_TAB_LABEL }, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "popups_header", IDS_POPUP_HEADER }, 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "popupsAllow", IDS_POPUP_ALLOW_RADIO }, 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "popupsBlock", IDS_POPUP_BLOCK_RADIO }, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Location filter. 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "locationTabLabel", IDS_GEOLOCATION_TAB_LABEL }, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "location_header", IDS_GEOLOCATION_HEADER }, 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "locationAllow", IDS_GEOLOCATION_ALLOW_RADIO }, 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "locationAsk", IDS_GEOLOCATION_ASK_RADIO }, 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "locationBlock", IDS_GEOLOCATION_BLOCK_RADIO }, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "set_by", IDS_GEOLOCATION_SET_BY_HOVER }, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifications filter. 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "notificationsTabLabel", IDS_NOTIFICATIONS_TAB_LABEL }, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "notifications_header", IDS_NOTIFICATIONS_HEADER }, 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "notificationsAllow", IDS_NOTIFICATIONS_ALLOW_RADIO }, 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "notificationsAsk", IDS_NOTIFICATIONS_ASK_RADIO }, 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "notificationsBlock", IDS_NOTIFICATIONS_BLOCK_RADIO }, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fullscreen filter. 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "fullscreenTabLabel", IDS_FULLSCREEN_TAB_LABEL }, 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "fullscreen_header", IDS_FULLSCREEN_HEADER }, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mouse Lock filter. 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "mouselockTabLabel", IDS_MOUSE_LOCK_TAB_LABEL }, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "mouselock_header", IDS_MOUSE_LOCK_HEADER }, 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "mouselockAllow", IDS_MOUSE_LOCK_ALLOW_RADIO }, 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "mouselockAsk", IDS_MOUSE_LOCK_ASK_RADIO }, 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "mouselockBlock", IDS_MOUSE_LOCK_BLOCK_RADIO }, 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) || defined(OS_WIN) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Protected Content filter 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "protectedContentTabLabel", IDS_PROTECTED_CONTENT_TAB_LABEL }, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "protectedContentInfo", IDS_PROTECTED_CONTENT_INFO }, 3590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) { "protectedContentEnable", IDS_PROTECTED_CONTENT_ENABLE }, 3600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) { "protectedContent_header", IDS_PROTECTED_CONTENT_HEADER }, 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // defined(OS_CHROMEOS) || defined(OS_WIN) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Media stream capture device filter. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "mediaStreamTabLabel", IDS_MEDIA_STREAM_TAB_LABEL }, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "media-stream_header", IDS_MEDIA_STREAM_HEADER }, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "mediaStreamAsk", IDS_MEDIA_STREAM_ASK_RADIO }, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "mediaStreamBlock", IDS_MEDIA_STREAM_BLOCK_RADIO }, 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaStreamAudioAsk", IDS_MEDIA_STREAM_ASK_AUDIO_ONLY_RADIO }, 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaStreamAudioBlock", IDS_MEDIA_STREAM_BLOCK_AUDIO_ONLY_RADIO }, 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaStreamVideoAsk", IDS_MEDIA_STREAM_ASK_VIDEO_ONLY_RADIO }, 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaStreamVideoBlock", IDS_MEDIA_STREAM_BLOCK_VIDEO_ONLY_RADIO }, 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaStreamBubbleAudio", IDS_MEDIA_STREAM_AUDIO_MANAGED }, 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaStreamBubbleVideo", IDS_MEDIA_STREAM_VIDEO_MANAGED }, 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaAudioExceptionHeader", IDS_MEDIA_AUDIO_EXCEPTION_HEADER }, 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaVideoExceptionHeader", IDS_MEDIA_VIDEO_EXCEPTION_HEADER }, 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaPepperFlashDefaultDivergedLabel", 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_MEDIA_PEPPER_FLASH_DEFAULT_DIVERGED_LABEL }, 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaPepperFlashExceptionsDivergedLabel", 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_MEDIA_PEPPER_FLASH_EXCEPTIONS_DIVERGED_LABEL }, 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaPepperFlashChangeLink", IDS_MEDIA_PEPPER_FLASH_CHANGE_LINK }, 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaPepperFlashGlobalPrivacyURL", IDS_FLASH_GLOBAL_PRIVACY_URL }, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "mediaPepperFlashWebsitePrivacyURL", IDS_FLASH_WEBSITE_PRIVACY_URL }, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PPAPI broker filter. 383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { "ppapi-broker_header", IDS_PPAPI_BROKER_HEADER }, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ppapiBrokerTabLabel", IDS_PPAPI_BROKER_TAB_LABEL }, 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "ppapiBrokerAllow", IDS_PPAPI_BROKER_ALLOW_RADIO }, 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "ppapiBrokerAsk", IDS_PPAPI_BROKER_ASK_RADIO }, 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "ppapiBrokerBlock", IDS_PPAPI_BROKER_BLOCK_RADIO }, 3887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Multiple automatic downloads 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "multipleAutomaticDownloadsTabLabel", 3907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL }, 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "multipleAutomaticDownloadsAllow", 3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IDS_AUTOMATIC_DOWNLOADS_ALLOW_RADIO }, 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "multipleAutomaticDownloadsAsk", 3947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IDS_AUTOMATIC_DOWNLOADS_ASK_RADIO }, 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "multipleAutomaticDownloadsBlock", 3967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IDS_AUTOMATIC_DOWNLOADS_BLOCK_RADIO }, 397a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // MIDI system exclusive messages 398a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { "midi-sysex_header", IDS_MIDI_SYSEX_TAB_LABEL }, 399a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { "midiSysExAllow", IDS_MIDI_SYSEX_ALLOW_RADIO }, 400a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { "midiSysExAsk", IDS_MIDI_SYSEX_ASK_RADIO }, 401a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { "midiSysExBlock", IDS_MIDI_SYSEX_BLOCK_RADIO }, 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Push messaging strings 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "push-messaging_header", IDS_PUSH_MESSAGES_TAB_LABEL }, 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "pushMessagingAllow", IDS_PUSH_MESSSAGING_ALLOW_RADIO }, 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "pushMessagingAsk", IDS_PUSH_MESSSAGING_ASK_RADIO }, 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "pushMessagingBlock", IDS_PUSH_MESSSAGING_BLOCK_RADIO }, 40723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { "zoomlevels_header", IDS_ZOOMLEVELS_HEADER_AND_TAB_LABEL }, 40823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { "zoomLevelsManage", IDS_ZOOMLEVELS_MANAGE_BUTTON }, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterStrings(localized_strings, resources, arraysize(resources)); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "contentSettingsPage", 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_SETTINGS_TITLE); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register titles for each of the individual settings whose exception 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dialogs will be processed by |ContentSettingsHandler|. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "cookies", 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COOKIES_TAB_LABEL); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "images", 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_IMAGES_TAB_LABEL); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "javascript", 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_JAVASCRIPT_TAB_LABEL); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "plugins", 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_PLUGIN_TAB_LABEL); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "popups", 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_POPUP_TAB_LABEL); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "location", 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_TAB_LABEL); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "notifications", 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_NOTIFICATIONS_TAB_LABEL); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "fullscreen", 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FULLSCREEN_TAB_LABEL); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "mouselock", 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MOUSE_LOCK_TAB_LABEL); 4350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 4360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) RegisterTitle(localized_strings, "protectedContent", 4370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) IDS_PROTECTED_CONTENT_TAB_LABEL); 4380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "media-stream", 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MEDIA_STREAM_TAB_LABEL); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "ppapi-broker", 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_PPAPI_BROKER_TAB_LABEL); 4437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RegisterTitle(localized_strings, "multiple-automatic-downloads", 4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL); 445a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RegisterTitle(localized_strings, "midi-sysex", 446a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) IDS_MIDI_SYSEX_TAB_LABEL); 44723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RegisterTitle(localized_strings, "zoomlevels", 44823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) IDS_ZOOMLEVELS_HEADER_AND_TAB_LABEL); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) localized_strings->SetString("exceptionsLearnMoreUrl", 451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kExceptionsLearnMoreUrl); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::InitializeHandler() { 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add( 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, chrome::NOTIFICATION_PROFILE_CREATED, 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add( 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, chrome::NOTIFICATION_PROFILE_DESTROYED, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add( 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, chrome::NOTIFICATION_DESKTOP_NOTIFICATION_SETTINGS_CHANGED, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* context = GetBrowserContext(web_ui()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add( 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED, 4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::Source<content::BrowserContext>(context)); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PrefService* prefs = user_prefs::UserPrefs::Get(context); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.Init(prefs); 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kPepperFlashSettingsEnabled, 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ContentSettingsHandler::OnPepperFlashPrefChanged, 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kAudioCaptureAllowed, 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ContentSettingsHandler::UpdateMediaSettingsView, 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kVideoCaptureAllowed, 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ContentSettingsHandler::UpdateMediaSettingsView, 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 484a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pref_change_registrar_.Add( 485a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) prefs::kEnableDRM, 486a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind( 487a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &ContentSettingsHandler::UpdateProtectedContentExceptionsButton, 488a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Unretained(this))); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::HostZoomMap* host_zoom_map = 4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::HostZoomMap::GetDefaultForBrowserContext(context); 49223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) host_zoom_map_subscription_ = 49323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) host_zoom_map->AddZoomLevelChangedCallback( 49423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::Bind(&ContentSettingsHandler::OnZoomLevelChanged, 49523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::Unretained(this))); 49623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) flash_settings_manager_.reset(new PepperFlashSettingsManager(this, context)); 49829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch 49929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch Profile* profile = Profile::FromWebUI(web_ui()); 50029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch observer_.Add(profile->GetHostContentSettingsMap()); 50129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch if (profile->HasOffTheRecordProfile()) { 50229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch auto map = profile->GetOffTheRecordProfile()->GetHostContentSettingsMap(); 50329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch if (!observer_.IsObserving(map)) 50429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch observer_.Add(map); 50529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::InitializePage() { 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_ = MediaSettingsInfo(); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RefreshFlashMediaSettings(); 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateHandlersEnabledRadios(); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateAllExceptionsViewsFromModel(); 514a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UpdateProtectedContentExceptionsButton(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void ContentSettingsHandler::OnContentSettingChanged( 51803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const ContentSettingsPattern& primary_pattern, 51903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern, 52003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ContentSettingsType content_type, 52103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string resource_identifier) { 52203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const ContentSettingsDetails details( 52303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) primary_pattern, secondary_pattern, content_type, resource_identifier); 52403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // TODO(estade): we pretend update_all() is always true. 52503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (details.update_all_types()) 52603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) UpdateAllExceptionsViewsFromModel(); 52703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) else 52803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) UpdateExceptionsViewFromModel(details.type()); 52903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 53003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::Observe( 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_PROFILE_DESTROYED: { 53729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch Profile* profile = content::Source<Profile>(source).ptr(); 53829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch if (profile->IsOffTheRecord() && 53929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch observer_.IsObserving(profile->GetHostContentSettingsMap())) { 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction( 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ContentSettingsExceptionsArea.OTRProfileDestroyed"); 54229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch observer_.Remove(profile->GetHostContentSettingsMap()); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_PROFILE_CREATED: { 54829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch Profile* profile = content::Source<Profile>(source).ptr(); 54929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch if (profile->IsOffTheRecord()) { 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateAllOTRExceptionsViewsFromModel(); 55129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch observer_.Add(profile->GetHostContentSettingsMap()); 55229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_DESKTOP_NOTIFICATION_SETTINGS_CHANGED: { 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNotificationExceptionsView(); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED: { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateHandlersEnabledRadios(); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::OnGetPermissionSettingsCompleted( 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (success && request_id == media_settings_.last_flash_refresh_request_id) { 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_settings_initialized = true; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_default_setting = 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PepperFlashContentSettingsUtils::FlashPermissionToContentSetting( 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_permission); 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PepperFlashContentSettingsUtils::FlashSiteSettingsToMediaExceptions( 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sites, &media_settings_.flash_exceptions); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PepperFlashContentSettingsUtils::SortMediaExceptions( 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &media_settings_.flash_exceptions); 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateFlashMediaLinksVisibility(); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateSettingDefaultFromModel( 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type) { 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue filter_settings; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string provider_id; 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filter_settings.SetString(ContentSettingsTypeToGroupName(type) + ".value", 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSettingDefaultFromModel(type, &provider_id)); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_settings.SetString( 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsTypeToGroupName(type) + ".managedBy", provider_id); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction( 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ContentSettings.setContentFilterSettingsValue", filter_settings); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingsHandler::UpdateMediaSettingsView() { 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PrefService* prefs = user_prefs::UserPrefs::Get(GetBrowserContext(web_ui())); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool audio_disabled = !prefs->GetBoolean(prefs::kAudioCaptureAllowed) && 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->IsManagedPreference(prefs::kAudioCaptureAllowed); 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool video_disabled = !prefs->GetBoolean(prefs::kVideoCaptureAllowed) && 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->IsManagedPreference(prefs::kVideoCaptureAllowed); 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.policy_disable_audio = audio_disabled; 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.policy_disable_video = video_disabled; 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.default_setting = 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetContentSettingsMap()->GetDefaultContentSetting( 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM, NULL); 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.default_setting_initialized = true; 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateFlashMediaLinksVisibility(); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue media_ui_settings; 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetBoolean("cameraDisabled", video_disabled); 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetBoolean("micDisabled", audio_disabled); 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In case only video is enabled change the text appropriately. 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (audio_disabled && !video_disabled) { 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("askText", "mediaStreamVideoAsk"); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("blockText", "mediaStreamVideoBlock"); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetBoolean("showBubble", true); 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("bubbleText", "mediaStreamBubbleAudio"); 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.updateMediaUI", 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In case only audio is enabled change the text appropriately. 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (video_disabled && !audio_disabled) { 6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue media_ui_settings; 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("askText", "mediaStreamAudioAsk"); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("blockText", "mediaStreamAudioBlock"); 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetBoolean("showBubble", true); 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("bubbleText", "mediaStreamBubbleVideo"); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.updateMediaUI", 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (audio_disabled && video_disabled) { 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fake policy controlled default because the user can not change anything 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // until both audio and video are blocked. 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue filter_settings; 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string group_name = 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_MEDIASTREAM); 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filter_settings.SetString(group_name + ".value", 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingToString(CONTENT_SETTING_BLOCK)); 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filter_settings.SetString(group_name + ".managedBy", "policy"); 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction( 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "ContentSettings.setContentFilterSettingsValue", filter_settings); 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("askText", "mediaStreamAsk"); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetString("blockText", "mediaStreamBlock"); 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings.SetBoolean("showBubble", false); 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) media_ui_settings.SetString("bubbleText", std::string()); 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.updateMediaUI", 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_ui_settings); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ContentSettingsHandler::GetSettingDefaultFromModel( 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type, std::string* provider_id) { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting default_setting; 6705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) default_setting = 6715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile->GetHostContentSettingsMap()->GetDefaultContentSetting( 6725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) type, provider_id); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentSettingToString(default_setting); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateHandlersEnabledRadios() { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::FundamentalValue handlers_enabled( 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->enabled()); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction( 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ContentSettings.updateHandlersEnabledRadios", 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlers_enabled); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateAllExceptionsViewsFromModel() { 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int type = CONTENT_SETTINGS_TYPE_DEFAULT + 1; 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type < CONTENT_SETTINGS_NUM_TYPES; ++type) { 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateExceptionsViewFromModel(static_cast<ContentSettingsType>(type)); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 69123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Zoom levels are not actually a content type so we need to handle them 69223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // separately. 69323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) UpdateZoomLevelsExceptionsView(); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateAllOTRExceptionsViewsFromModel() { 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int type = CONTENT_SETTINGS_TYPE_DEFAULT + 1; 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type < CONTENT_SETTINGS_NUM_TYPES; ++type) { 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateOTRExceptionsViewFromModel(static_cast<ContentSettingsType>(type)); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateExceptionsViewFromModel( 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type) { 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_GEOLOCATION: 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateGeolocationExceptionsView(); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNotificationExceptionsView(); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateMediaSettingsView(); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateMediaExceptionsView(); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MIXEDSCRIPT: 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't yet support exceptions for mixed scripting. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE: 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The content settings type CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is supposed to be set by policy only. Hence there is no user facing UI 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for this content type and we skip it here. 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS: 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The RPH settings are retrieved separately. 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 730558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 731a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) UpdateMIDISysExExceptionsView(); 732558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch break; 7335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS: 7345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The content settings type CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS is 7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // supposed to be set by flags and field trials only, thus there is no 7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // user facing UI for this content type and we skip it here. 7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_METRO_SWITCH_TO_DESKTOP: 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateExceptionsViewFromHostContentSettingsMap(type); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateOTRExceptionsViewFromModel( 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type) { 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_GEOLOCATION: 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE: 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MIXEDSCRIPT: 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_METRO_SWITCH_TO_DESKTOP: 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 7617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 762a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS: 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateExceptionsViewFromOTRHostContentSettingsMap(type); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(estade): merge with GetExceptionsFromHostContentSettingsMap. 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateGeolocationExceptionsView() { 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsForOneType all_settings; 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->GetSettingsForOneType( 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION, 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &all_settings); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Group geolocation settings by primary_pattern. 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AllPatternsSettings all_patterns_settings; 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ContentSettingsForOneType::iterator i = all_settings.begin(); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != all_settings.end(); ++i) { 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't add default settings. 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->primary_pattern == ContentSettingsPattern::Wildcard() && 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->secondary_pattern == ContentSettingsPattern::Wildcard() && 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->source != kPreferencesSource) { 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_patterns_settings[std::make_pair(i->primary_pattern, i->source)] 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [i->secondary_pattern] = i->setting; 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue exceptions; 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExceptionsGrantedByHostedApps( 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostedAppHasPermission<APIPermission::kGeolocation>, 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &exceptions); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (AllPatternsSettings::iterator i = all_patterns_settings.begin(); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != all_patterns_settings.end(); ++i) { 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& primary_pattern = i->first.first; 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const OnePatternSettings& one_settings = i->second; 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnePatternSettings::const_iterator parent = 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) one_settings.find(primary_pattern); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the "parent" entry for the non-embedded setting. 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting parent_setting = 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent == one_settings.end() ? CONTENT_SETTING_DEFAULT : parent->second; 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exceptions.Append(GetGeolocationExceptionForPage(primary_pattern, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_pattern, 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_setting)); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the "children" for any embedded settings. 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (OnePatternSettings::const_iterator j = one_settings.begin(); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j != one_settings.end(); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++j) { 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip the non-embedded setting which we already added above. 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j == parent) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exceptions.Append(GetGeolocationExceptionForPage( 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_pattern, j->first, j->second)); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue type_string( 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_GEOLOCATION)); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.setExceptions", 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_string, exceptions); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is mainly here to keep this function ideologically parallel to 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UpdateExceptionsViewFromHostContentSettingsMap(). 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_GEOLOCATION); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateNotificationExceptionsView() { 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsForOneType settings; 8435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DesktopNotificationProfileUtil::GetNotificationsSettings(profile, &settings); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue exceptions; 8465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AddExceptionsGrantedByHostedApps( 8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, 8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HostedAppHasPermission<APIPermission::kNotifications>, 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &exceptions); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ContentSettingsForOneType::const_iterator i = 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.begin(); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != settings.end(); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++i) { 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't add default settings. 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->primary_pattern == ContentSettingsPattern::Wildcard() && 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->secondary_pattern == ContentSettingsPattern::Wildcard() && 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->source != kPreferencesSource) { 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exceptions.Append( 8631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetNotificationExceptionForPage(i->primary_pattern, 8641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci i->secondary_pattern, 8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci i->setting, 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->source)); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue type_string( 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.setExceptions", 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_string, exceptions); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is mainly here to keep this function ideologically parallel to 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UpdateExceptionsViewFromHostContentSettingsMap(). 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingsHandler::UpdateMediaExceptionsView() { 8805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue media_exceptions; 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExceptionsFromHostContentSettingsMap( 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetContentSettingsMap(), 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &media_exceptions); 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue video_exceptions; 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExceptionsFromHostContentSettingsMap( 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetContentSettingsMap(), 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &video_exceptions); 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Merge the |video_exceptions| list to |media_exceptions| list. 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<std::string, base::DictionaryValue*> entries_map; 8945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::ListValue::const_iterator media_entry(media_exceptions.begin()); 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_entry != media_exceptions.end(); ++media_entry) { 8965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* media_dict = NULL; 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!(*media_entry)->GetAsDictionary(&media_dict)) 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_dict->SetString(kVideoSetting, 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingToString(CONTENT_SETTING_ASK)); 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string media_origin; 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_dict->GetString(kOrigin, &media_origin); 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entries_map[media_origin] = media_dict; 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::ListValue::iterator video_entry = video_exceptions.begin(); 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) video_entry != video_exceptions.end(); ++video_entry) { 9105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* video_dict = NULL; 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!(*video_entry)->GetAsDictionary(&video_dict)) 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string video_origin; 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string video_setting; 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) video_dict->GetString(kOrigin, &video_origin); 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) video_dict->GetString(kSetting, &video_setting); 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<std::string, base::DictionaryValue*>::iterator iter = 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entries_map.find(video_origin); 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (iter == entries_map.end()) { 9225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* exception = new base::DictionaryValue(); 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exception->SetString(kOrigin, video_origin); 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exception->SetString(kSetting, 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingToString(CONTENT_SETTING_ASK)); 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exception->SetString(kVideoSetting, video_setting); 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exception->SetString(kSource, kPreferencesSource); 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Append the new entry to the list and map. 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_exceptions.Append(exception); 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entries_map[video_origin] = exception; 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Modify the existing entry. 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter->second->SetString(kVideoSetting, video_setting); 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.exceptions.clear(); 9395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::ListValue::const_iterator media_entry = media_exceptions.begin(); 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_entry != media_exceptions.end(); ++media_entry) { 9415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* media_dict = NULL; 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool result = (*media_entry)->GetAsDictionary(&media_dict); 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(result); 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string origin; 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string audio_setting; 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string video_setting; 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_dict->GetString(kOrigin, &origin); 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_dict->GetString(kSetting, &audio_setting); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_dict->GetString(kVideoSetting, &video_setting); 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.exceptions.push_back(MediaException( 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::FromString(origin), 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingFromString(audio_setting), 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingFromString(video_setting))); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PepperFlashContentSettingsUtils::SortMediaExceptions( 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &media_settings_.exceptions); 9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.exceptions_initialized = true; 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateFlashMediaLinksVisibility(); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue type_string( 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_MEDIASTREAM)); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.setExceptions", 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_string, media_exceptions); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_MEDIASTREAM); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 969a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void ContentSettingsHandler::UpdateMIDISysExExceptionsView() { 970a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableWebMIDI)) { 971a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) web_ui()->CallJavascriptFunction( 972a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "ContentSettings.showExperimentalWebMIDISettings", 973a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::FundamentalValue(true)); 974a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 975a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 976a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 977a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) UpdateExceptionsViewFromHostContentSettingsMap( 978a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 979a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 980a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 98123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ContentSettingsHandler::UpdateZoomLevelsExceptionsView() { 98223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::ListValue zoom_levels_exceptions; 98323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 98423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::HostZoomMap* host_zoom_map = 9851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::HostZoomMap::GetDefaultForBrowserContext( 9861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetBrowserContext(web_ui())); 98723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::HostZoomMap::ZoomLevelVector zoom_levels( 98823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) host_zoom_map->GetAllZoomLevels()); 98923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::sort(zoom_levels.begin(), zoom_levels.end(), HostZoomSort); 99023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 99123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (content::HostZoomMap::ZoomLevelVector::const_iterator i = 99223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) zoom_levels.begin(); 99323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) i != zoom_levels.end(); 99423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ++i) { 99523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<base::DictionaryValue> exception(new base::DictionaryValue); 99623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) switch (i->mode) { 99723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) case content::HostZoomMap::ZOOM_CHANGED_FOR_HOST: 99823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) exception->SetString(kOrigin, i->host); 99923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) break; 100023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) case content::HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST: 1001a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // These are not stored in preferences and get cleared on next browser 1002a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // start. Therefore, we don't care for them. 100323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) break; 100423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) case content::HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM: 100523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) NOTREACHED(); 100623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 100723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) exception->SetString(kSetting, 100823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ContentSettingToString(CONTENT_SETTING_DEFAULT)); 100923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 101023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Calculate the zoom percent from the factor. Round up to the nearest whole 101123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // number. 101223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) int zoom_percent = static_cast<int>( 101323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::ZoomLevelToZoomFactor(i->zoom_level) * 100 + 0.5); 101423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) exception->SetString( 101523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) kZoom, 101623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) l10n_util::GetStringFUTF16(IDS_ZOOM_PERCENT, 101723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::IntToString16(zoom_percent))); 101823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) exception->SetString(kSource, kPreferencesSource); 101923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Append the new entry to the list and map. 102023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) zoom_levels_exceptions.Append(exception.release()); 102123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 102223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 102323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::StringValue type_string(kZoomContentType); 102423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.setExceptions", 102523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) type_string, zoom_levels_exceptions); 102623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 102723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateExceptionsViewFromHostContentSettingsMap( 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type) { 10305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue exceptions; 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExceptionsFromHostContentSettingsMap( 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSettingsMap(), type, &exceptions); 10335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue type_string(ContentSettingsTypeToGroupName(type)); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.setExceptions", type_string, 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exceptions); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateExceptionsViewFromOTRHostContentSettingsMap(type); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(koz): The default for fullscreen is always 'ask'. 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/104683 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == CONTENT_SETTINGS_TYPE_FULLSCREEN) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 10450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Also the default for protected contents is managed in another place. 10460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (type == CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) 10470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 10480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 10490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default may also have changed (we won't get a separate notification). 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If it hasn't changed, this call will be harmless. 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateSettingDefaultFromModel(type); 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::UpdateExceptionsViewFromOTRHostContentSettingsMap( 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type) { 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostContentSettingsMap* otr_settings_map = GetOTRContentSettingsMap(); 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!otr_settings_map) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue exceptions; 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExceptionsFromHostContentSettingsMap(otr_settings_map, type, &exceptions); 10625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue type_string(ContentSettingsTypeToGroupName(type)); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("ContentSettings.setOTRExceptions", 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_string, exceptions); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::GetExceptionsFromHostContentSettingsMap( 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostContentSettingsMap* map, 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type, 10705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* exceptions) { 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsForOneType entries; 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->GetSettingsForOneType(type, std::string(), &entries); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Group settings by primary_pattern. 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AllPatternsSettings all_patterns_settings; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ContentSettingsForOneType::iterator i = entries.begin(); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != entries.end(); ++i) { 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't add default settings. 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->primary_pattern == ContentSettingsPattern::Wildcard() && 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->secondary_pattern == ContentSettingsPattern::Wildcard() && 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->source != kPreferencesSource) { 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Off-the-record HostContentSettingsMap contains incognito content settings 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as well as normal content settings. Here, we use the incongnito settings 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only. 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (map->is_off_the_record() && !i->incognito) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_patterns_settings[std::make_pair(i->primary_pattern, i->source)] 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [i->secondary_pattern] = i->setting; 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keep the exceptions sorted by provider so they will be displayed in 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // precedence order. 10965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<std::vector<base::Value*> > all_provider_exceptions; 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_provider_exceptions.resize(HostContentSettingsMap::NUM_PROVIDER_TYPES); 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (AllPatternsSettings::iterator i = all_patterns_settings.begin(); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != all_patterns_settings.end(); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++i) { 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& primary_pattern = i->first.first; 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const OnePatternSettings& one_settings = i->second; 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The "parent" entry either has an identical primary and secondary pattern, 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or has a wildcard secondary. The two cases are indistinguishable in the 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UI. 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnePatternSettings::const_iterator parent = 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) one_settings.find(primary_pattern); 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (parent == one_settings.end()) 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent = one_settings.find(ContentSettingsPattern::Wildcard()); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& source = i->first.second; 11145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<base::Value*>* this_provider_exceptions = 11155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &all_provider_exceptions.at( 11165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HostContentSettingsMap::GetProviderTypeFromSource(source)); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the "parent" entry for the non-embedded setting. 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting parent_setting = 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent == one_settings.end() ? CONTENT_SETTING_DEFAULT : parent->second; 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern = 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent == one_settings.end() ? primary_pattern : parent->first; 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this_provider_exceptions->push_back(GetExceptionForPage(primary_pattern, 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary_pattern, 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_setting, 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source)); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the "children" for any embedded settings. 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (OnePatternSettings::const_iterator j = one_settings.begin(); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j != one_settings.end(); ++j) { 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip the non-embedded setting which we already added above. 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j == parent) 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting content_setting = j->second; 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this_provider_exceptions->push_back(GetExceptionForPage( 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_pattern, 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j->first, 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting, 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source)); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < all_provider_exceptions.size(); ++i) { 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t j = 0; j < all_provider_exceptions[i].size(); ++j) { 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exceptions->Append(all_provider_exceptions[i][j]); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ContentSettingsHandler::RemoveMediaException(const base::ListValue* args) { 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mode; 115323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool rv = args->GetString(1, &mode); 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(rv); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pattern; 115723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) rv = args->GetString(2, &pattern); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(rv); 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostContentSettingsMap* settings_map = 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mode == "normal" ? GetContentSettingsMap() : 11622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetOTRContentSettingsMap(); 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (settings_map) { 1164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings_map->SetWebsiteSetting(ContentSettingsPattern::FromString(pattern), 1165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentSettingsPattern::Wildcard(), 1166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, 1167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 1168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NULL); 1169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings_map->SetWebsiteSetting(ContentSettingsPattern::FromString(pattern), 1170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentSettingsPattern::Wildcard(), 1171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, 1172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 1173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NULL); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::RemoveExceptionFromHostContentSettingsMap( 117823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::ListValue* args, 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type) { 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mode; 118123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool rv = args->GetString(1, &mode); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(rv); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pattern; 118523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) rv = args->GetString(2, &pattern); 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(rv); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The fourth argument to this handler is optional. 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string secondary_pattern; 1190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (args->GetSize() >= 4U) { 11915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu rv = args->GetString(3, &secondary_pattern); 11925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DCHECK(rv); 11935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* settings_map = 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode == "normal" ? GetContentSettingsMap() : 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOTRContentSettingsMap(); 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings_map) { 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_map->SetWebsiteSetting( 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString(pattern), 12015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu secondary_pattern.empty() ? 12025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ContentSettingsPattern::Wildcard() : 12035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ContentSettingsPattern::FromString(secondary_pattern), 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type, 1205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 121023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ContentSettingsHandler::RemoveZoomLevelException( 121123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::ListValue* args) { 121223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string mode; 121323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool rv = args->GetString(1, &mode); 121423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DCHECK(rv); 121523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 121623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string pattern; 121723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) rv = args->GetString(2, &pattern); 121823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DCHECK(rv); 121923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 122023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::HostZoomMap* host_zoom_map = 12211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::HostZoomMap::GetDefaultForBrowserContext( 12221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetBrowserContext(web_ui())); 122323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) double default_level = host_zoom_map->GetDefaultZoomLevel(); 1224a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_zoom_map->SetZoomLevelForHost(pattern, default_level); 122523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 122623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::RegisterMessages() { 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("setContentFilter", 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ContentSettingsHandler::SetContentFilter, 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("removeException", 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ContentSettingsHandler::RemoveException, 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("setException", 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ContentSettingsHandler::SetException, 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("checkExceptionPatternValidity", 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ContentSettingsHandler::CheckExceptionPatternValidity, 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentSettingsHandler::SetContentFilter(const base::ListValue* args) { 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(2U, args->GetSize()); 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string group, setting; 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(args->GetString(0, &group) && 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args->GetString(1, &setting))) { 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting default_setting = ContentSettingFromString(setting); 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType content_type = ContentSettingsTypeFromGroupName(group); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChromeOS special case : in Guest mode settings are opened in Incognito 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode, so we need original profile to actually modify settings. 12586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = profile->GetOriginalProfile(); 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 12635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 12645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) map->SetDefaultContentSetting(content_type, default_setting); 12655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (content_type) { 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_COOKIES: 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultCookieSettingChanged")); 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_IMAGES: 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultImagesSettingChanged")); 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_JAVASCRIPT: 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultJavaScriptSettingChanged")); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_PLUGINS: 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultPluginsSettingChanged")); 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_POPUPS: 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultPopupsSettingChanged")); 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultNotificationsSettingChanged")); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_GEOLOCATION: 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultGeolocationSettingChanged")); 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MOUSELOCK: 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("Options_DefaultMouseLockSettingChanged")); 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserMetricsAction("Options_DefaultMediaStreamMicSettingChanged")); 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 1304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::RecordAction( 1305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserMetricsAction("Options_DefaultMultipleAutomaticDLSettingChange")); 13067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch break; 1307a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 1308a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RecordAction( 1309a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) UserMetricsAction("Options_DefaultMIDISysExSettingChanged")); 1310a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) break; 1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: 1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RecordAction( 1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserMetricsAction("Options_DefaultPushMessagingSettingChanged")); 1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentSettingsHandler::RemoveException(const base::ListValue* args) { 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string type_string; 132223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(0, &type_string)); 132323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 132423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Zoom levels are no actual content type so we need to handle them 132523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // separately. They would not be recognized by 132623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // ContentSettingsTypeFromGroupName. 132723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (type_string == kZoomContentType) { 132823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RemoveZoomLevelException(args); 132923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return; 133023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type = ContentSettingsTypeFromGroupName(type_string); 13331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) 13341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RemoveMediaException(args); 13351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else 13361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RemoveExceptionFromHostContentSettingsMap(args, type); 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentSettingsHandler::SetException(const base::ListValue* args) { 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string type_string; 134123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(0, &type_string)); 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mode; 134323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(1, &mode)); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pattern; 134523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(2, &pattern)); 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string setting; 134723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(3, &setting)); 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type = ContentSettingsTypeFromGroupName(type_string); 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION || 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS || 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == CONTENT_SETTINGS_TYPE_MEDIASTREAM || 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC || 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA) { 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* settings_map = 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode == "normal" ? GetContentSettingsMap() : 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOTRContentSettingsMap(); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The settings map could be null if the mode was OTR but the OTR profile 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // got destroyed before we received this message. 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!settings_map) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_map->SetContentSetting(ContentSettingsPattern::FromString(pattern), 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 13672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type, 1368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingFromString(setting)); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingsHandler::CheckExceptionPatternValidity( 13745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* args) { 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string type_string; 137623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(0, &type_string)); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mode_string; 137823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(1, &mode_string)); 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pattern_string; 138023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHECK(args->GetString(2, &pattern_string)); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern pattern = 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::FromString(pattern_string); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction( 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ContentSettings.patternValidityCheckComplete", 13872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringValue(type_string), 13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringValue(mode_string), 13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringValue(pattern_string), 13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FundamentalValue(pattern.IsValid())); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ContentSettingsHandler::ContentSettingsTypeToGroupName( 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type) { 13962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kContentSettingsTypeGroupNames); ++i) { 13972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type == kContentSettingsTypeGroupNames[i].type) 13982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kContentSettingsTypeGroupNames[i].name; 13992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return std::string(); 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostContentSettingsMap* ContentSettingsHandler::GetContentSettingsMap() { 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Profile::FromWebUI(web_ui())->GetHostContentSettingsMap(); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProtocolHandlerRegistry* ContentSettingsHandler::GetProtocolHandlerRegistry() { 14105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ProtocolHandlerRegistryFactory::GetForBrowserContext( 14115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetBrowserContext(web_ui())); 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostContentSettingsMap* 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsHandler::GetOTRContentSettingsMap() { 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (profile->HasOffTheRecordProfile()) 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile->GetOffTheRecordProfile()->GetHostContentSettingsMap(); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingsHandler::RefreshFlashMediaSettings() { 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_settings_initialized = false; 14242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.last_flash_refresh_request_id = 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flash_settings_manager_->GetPermissionSettings( 14272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_FLASH_BROWSEROPERATIONS_SETTINGTYPE_CAMERAMIC); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingsHandler::OnPepperFlashPrefChanged() { 14312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowFlashMediaLink(DEFAULT_SETTING, false); 14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowFlashMediaLink(EXCEPTIONS, false); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PrefService* prefs = user_prefs::UserPrefs::Get(GetBrowserContext(web_ui())); 14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (prefs->GetBoolean(prefs::kPepperFlashSettingsEnabled)) 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RefreshFlashMediaSettings(); 14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_settings_initialized = false; 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 144123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ContentSettingsHandler::OnZoomLevelChanged( 144223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const content::HostZoomMap::ZoomLevelChange& change) { 144323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) UpdateZoomLevelsExceptionsView(); 144423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 144523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 14462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingsHandler::ShowFlashMediaLink(LinkType link_type, bool show) { 14472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool& show_link = link_type == DEFAULT_SETTING ? 14482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.show_flash_default_link : 14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.show_flash_exceptions_link; 14502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (show_link != show) { 14512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction( 14522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) link_type == DEFAULT_SETTING ? 14532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "ContentSettings.showMediaPepperFlashDefaultLink" : 14542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "ContentSettings.showMediaPepperFlashExceptionsLink", 14552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FundamentalValue(show)); 14562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_link = show; 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingsHandler::UpdateFlashMediaLinksVisibility() { 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!media_settings_.flash_settings_initialized || 14622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !media_settings_.default_setting_initialized || 14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !media_settings_.exceptions_initialized) { 14642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Flash won't send us notifications when its settings get changed, which 14682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // means the Flash settings in |media_settings_| may be out-dated, especially 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // after we show links to change Flash settings. 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In order to avoid confusion, we won't hide the links once they are showed. 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // One exception is that we will hide them when Pepper Flash is disabled 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (handled in OnPepperFlashPrefChanged()). 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (media_settings_.show_flash_default_link && 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.show_flash_exceptions_link) { 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!media_settings_.show_flash_default_link) { 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If both audio and video capture are disabled by policy, the link 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // shouldn't be showed. Flash conforms to the policy in this case because 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it cannot open those devices. We don't have to look at the Flash 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // settings. 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!(media_settings_.policy_disable_audio && 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.policy_disable_video) && 14852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_default_setting != 14862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.default_setting) { 14872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowFlashMediaLink(DEFAULT_SETTING, true); 14882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!media_settings_.show_flash_exceptions_link) { 14912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If audio or video capture is disabled by policy, we skip comparison of 14922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // exceptions for audio or video capture, respectively. 14932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!PepperFlashContentSettingsUtils::AreMediaExceptionsEqual( 14942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.default_setting, 14952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.exceptions, 14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_default_setting, 14972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.flash_exceptions, 14982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.policy_disable_audio, 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_settings_.policy_disable_video)) { 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowFlashMediaLink(EXCEPTIONS, true); 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ContentSettingsHandler::UpdateProtectedContentExceptionsButton() { 15061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS) 15071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Guests cannot modify exceptions. UIAccountTweaks will disabled the button. 15081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) 15091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 15101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 15111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1512a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Exceptions apply only when the feature is enabled. 15131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* prefs = user_prefs::UserPrefs::Get(GetBrowserContext(web_ui())); 1514a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool enable_exceptions = prefs->GetBoolean(prefs::kEnableDRM); 1515a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) web_ui()->CallJavascriptFunction( 1516a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "ContentSettings.enableProtectedContentExceptions", 1517a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::FundamentalValue(enable_exceptions)); 1518a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1519a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace options 1521