website_settings_ui.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/website_settings/website_settings_ui.h" 6 7#include "grit/generated_resources.h" 8#include "grit/theme_resources.h" 9#include "grit/ui_resources.h" 10#include "ui/base/l10n/l10n_util.h" 11#include "ui/base/resource/resource_bundle.h" 12#include "ui/gfx/image/image.h" 13 14namespace { 15 16const int kInvalidResourceID = -1; 17 18// The resource id's for the strings that are displayed on the permissions 19// button if the permission setting is managed by policy. 20const int kPermissionButtonTextIDPolicyManaged[] = { 21 kInvalidResourceID, 22 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_POLICY, 23 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_POLICY, 24 kInvalidResourceID, 25 kInvalidResourceID 26}; 27COMPILE_ASSERT(arraysize(kPermissionButtonTextIDPolicyManaged) == 28 CONTENT_SETTING_NUM_SETTINGS, 29 button_text_id_array_size_incorrect); 30 31// The resource id's for the strings that are displayed on the permissions 32// button if the permission setting is managed by an extension. 33const int kPermissionButtonTextIDExtensionManaged[] = { 34 kInvalidResourceID, 35 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_EXTENSION, 36 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_EXTENSION, 37 kInvalidResourceID, 38 kInvalidResourceID 39}; 40COMPILE_ASSERT(arraysize(kPermissionButtonTextIDExtensionManaged) == 41 CONTENT_SETTING_NUM_SETTINGS, 42 button_text_id_array_size_incorrect); 43 44// The resource id's for the strings that are displayed on the permissions 45// button if the permission setting is managed by the user. 46const int kPermissionButtonTextIDUserManaged[] = { 47 kInvalidResourceID, 48 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_USER, 49 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_USER, 50 kInvalidResourceID, 51 kInvalidResourceID 52}; 53COMPILE_ASSERT(arraysize(kPermissionButtonTextIDUserManaged) == 54 CONTENT_SETTING_NUM_SETTINGS, 55 button_text_id_array_size_incorrect); 56 57// The resource id's for the strings that are displayed on the permissions 58// button if the permission setting is the global default setting. 59const int kPermissionButtonTextIDDefaultSetting[] = { 60 kInvalidResourceID, 61 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_DEFAULT, 62 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_DEFAULT, 63 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_DEFAULT, 64 kInvalidResourceID 65}; 66COMPILE_ASSERT(arraysize(kPermissionButtonTextIDDefaultSetting) == 67 CONTENT_SETTING_NUM_SETTINGS, 68 button_text_id_array_size_incorrect); 69 70} // namespace 71 72WebsiteSettingsUI::CookieInfo::CookieInfo() 73 : allowed(-1), blocked(-1) { 74} 75 76WebsiteSettingsUI::PermissionInfo::PermissionInfo() 77 : type(CONTENT_SETTINGS_TYPE_DEFAULT), 78 setting(CONTENT_SETTING_DEFAULT), 79 default_setting(CONTENT_SETTING_DEFAULT), 80 source(content_settings::SETTING_SOURCE_NONE) { 81} 82 83WebsiteSettingsUI::IdentityInfo::IdentityInfo() 84 : identity_status(WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN), 85 cert_id(0), 86 connection_status(WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN), 87 show_ssl_decision_revoke_button(false) { 88} 89 90WebsiteSettingsUI::IdentityInfo::~IdentityInfo() {} 91 92base::string16 WebsiteSettingsUI::IdentityInfo::GetIdentityStatusText() const { 93 if (identity_status == WebsiteSettings::SITE_IDENTITY_STATUS_CERT || 94 identity_status == WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT) { 95 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_IDENTITY_VERIFIED); 96 } 97 if (identity_status == 98 WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT) { 99 return l10n_util::GetStringUTF16(IDS_CERT_POLICY_PROVIDED_CERT_HEADER); 100 } 101 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_IDENTITY_NOT_VERIFIED); 102} 103 104WebsiteSettingsUI::~WebsiteSettingsUI() { 105} 106 107// static 108base::string16 WebsiteSettingsUI::PermissionTypeToUIString( 109 ContentSettingsType type) { 110 switch (type) { 111 case CONTENT_SETTINGS_TYPE_IMAGES: 112 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_IMAGES); 113 case CONTENT_SETTINGS_TYPE_JAVASCRIPT: 114 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_JAVASCRIPT); 115 case CONTENT_SETTINGS_TYPE_POPUPS: 116 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_POPUPS); 117 case CONTENT_SETTINGS_TYPE_PLUGINS: 118 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_PLUGINS); 119 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 120 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_LOCATION); 121 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 122 return l10n_util::GetStringUTF16( 123 IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS); 124 case CONTENT_SETTINGS_TYPE_FULLSCREEN: 125 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_FULLSCREEN); 126 case CONTENT_SETTINGS_TYPE_MOUSELOCK: 127 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MOUSELOCK); 128 case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 129 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM); 130 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 131 return l10n_util::GetStringUTF16(IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL); 132 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 133 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MIDI_SYSEX); 134 default: 135 NOTREACHED(); 136 return base::string16(); 137 } 138} 139 140// static 141base::string16 WebsiteSettingsUI::PermissionValueToUIString( 142 ContentSetting value) { 143 switch (value) { 144 case CONTENT_SETTING_ALLOW: 145 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ALLOW); 146 case CONTENT_SETTING_BLOCK: 147 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_BLOCK); 148 case CONTENT_SETTING_ASK: 149 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ASK); 150 default: 151 NOTREACHED(); 152 return base::string16(); 153 } 154} 155 156// static 157base::string16 WebsiteSettingsUI::PermissionActionToUIString( 158 ContentSetting setting, 159 ContentSetting default_setting, 160 content_settings::SettingSource source) { 161 ContentSetting effective_setting = setting; 162 if (effective_setting == CONTENT_SETTING_DEFAULT) 163 effective_setting = default_setting; 164 165 const int* button_text_ids = NULL; 166 switch (source) { 167 case content_settings::SETTING_SOURCE_USER: 168 if (setting == CONTENT_SETTING_DEFAULT) 169 button_text_ids = kPermissionButtonTextIDDefaultSetting; 170 else 171 button_text_ids = kPermissionButtonTextIDUserManaged; 172 break; 173 case content_settings::SETTING_SOURCE_POLICY: 174 button_text_ids = kPermissionButtonTextIDPolicyManaged; 175 break; 176 case content_settings::SETTING_SOURCE_EXTENSION: 177 button_text_ids = kPermissionButtonTextIDExtensionManaged; 178 break; 179 case content_settings::SETTING_SOURCE_WHITELIST: 180 case content_settings::SETTING_SOURCE_NONE: 181 default: 182 NOTREACHED(); 183 return base::string16(); 184 } 185 int button_text_id = button_text_ids[effective_setting]; 186 DCHECK_NE(button_text_id, kInvalidResourceID); 187 return l10n_util::GetStringUTF16(button_text_id); 188} 189 190// static 191int WebsiteSettingsUI::GetPermissionIconID(ContentSettingsType type, 192 ContentSetting setting) { 193 bool use_blocked = (setting == CONTENT_SETTING_BLOCK); 194 int resource_id = IDR_INFO; 195 switch (type) { 196 case CONTENT_SETTINGS_TYPE_IMAGES: 197 resource_id = use_blocked ? IDR_BLOCKED_IMAGES : IDR_ALLOWED_IMAGES; 198 break; 199 case CONTENT_SETTINGS_TYPE_JAVASCRIPT: 200 resource_id = 201 use_blocked ? IDR_BLOCKED_JAVASCRIPT : IDR_ALLOWED_JAVASCRIPT; 202 break; 203 case CONTENT_SETTINGS_TYPE_COOKIES: 204 resource_id = use_blocked ? IDR_BLOCKED_COOKIES : IDR_ACCESSED_COOKIES; 205 break; 206 case CONTENT_SETTINGS_TYPE_POPUPS: 207 resource_id = use_blocked ? IDR_BLOCKED_POPUPS : IDR_ALLOWED_POPUPS; 208 break; 209 case CONTENT_SETTINGS_TYPE_PLUGINS: 210 resource_id = use_blocked ? IDR_BLOCKED_PLUGINS : IDR_ALLOWED_PLUGINS; 211 break; 212 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 213 resource_id = use_blocked ? IDR_BLOCKED_LOCATION : IDR_ALLOWED_LOCATION; 214 break; 215 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 216 resource_id = 217 use_blocked ? IDR_BLOCKED_NOTIFICATION : IDR_ALLOWED_NOTIFICATION; 218 break; 219 case CONTENT_SETTINGS_TYPE_FULLSCREEN: 220 resource_id = IDR_ALLOWED_FULLSCREEN; 221 break; 222 case CONTENT_SETTINGS_TYPE_MOUSELOCK: 223 resource_id = 224 use_blocked ? IDR_BLOCKED_MOUSE_CURSOR : IDR_ALLOWED_MOUSE_CURSOR; 225 break; 226 case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 227 resource_id = use_blocked ? IDR_BLOCKED_MEDIA : IDR_ASK_MEDIA; 228 break; 229 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 230 resource_id = use_blocked ? IDR_BLOCKED_DOWNLOADS 231 : IDR_ALLOWED_DOWNLOADS; 232 break; 233 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 234 resource_id = use_blocked ? IDR_BLOCKED_MIDI_SYSEX 235 : IDR_ALLOWED_MIDI_SYSEX; 236 break; 237 default: 238 NOTREACHED(); 239 break; 240 } 241 return resource_id; 242} 243 244// static 245const gfx::Image& WebsiteSettingsUI::GetPermissionIcon( 246 const PermissionInfo& info) { 247 ContentSetting setting = info.setting; 248 if (setting == CONTENT_SETTING_DEFAULT) 249 setting = info.default_setting; 250 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 251 return rb.GetNativeImageNamed(GetPermissionIconID(info.type, setting)); 252} 253 254// static 255int WebsiteSettingsUI::GetIdentityIconID( 256 WebsiteSettings::SiteIdentityStatus status) { 257 int resource_id = IDR_PAGEINFO_INFO; 258 switch (status) { 259 case WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN: 260 break; 261 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT: 262 case WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT: 263 resource_id = IDR_PAGEINFO_GOOD; 264 break; 265 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN: 266 resource_id = IDR_PAGEINFO_WARNING_MINOR; 267 break; 268 case WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT: 269 resource_id = IDR_PAGEINFO_WARNING_MAJOR; 270 break; 271 case WebsiteSettings::SITE_IDENTITY_STATUS_ERROR: 272 resource_id = IDR_PAGEINFO_BAD; 273 break; 274 case WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT: 275 resource_id = IDR_PAGEINFO_ENTERPRISE_MANAGED; 276 break; 277 default: 278 NOTREACHED(); 279 break; 280 } 281 return resource_id; 282} 283 284// static 285const gfx::Image& WebsiteSettingsUI::GetIdentityIcon( 286 WebsiteSettings::SiteIdentityStatus status) { 287 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 288 return rb.GetNativeImageNamed(GetIdentityIconID(status)); 289} 290 291// static 292int WebsiteSettingsUI::GetConnectionIconID( 293 WebsiteSettings::SiteConnectionStatus status) { 294 int resource_id = IDR_PAGEINFO_INFO; 295 switch (status) { 296 case WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN: 297 break; 298 case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED: 299 resource_id = IDR_PAGEINFO_GOOD; 300 break; 301 case WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT: 302 resource_id = IDR_PAGEINFO_WARNING_MINOR; 303 break; 304 case WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED: 305 resource_id = IDR_PAGEINFO_WARNING_MAJOR; 306 break; 307 case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR: 308 resource_id = IDR_PAGEINFO_BAD; 309 break; 310 default: 311 NOTREACHED(); 312 break; 313 } 314 return resource_id; 315} 316 317// static 318const gfx::Image& WebsiteSettingsUI::GetConnectionIcon( 319 WebsiteSettings::SiteConnectionStatus status) { 320 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 321 return rb.GetNativeImageNamed(GetConnectionIconID(status)); 322} 323 324// static 325int WebsiteSettingsUI::GetFirstVisitIconID(const base::string16& first_visit) { 326 // FIXME(markusheintz): Display a minor warning icon if the page is visited 327 // the first time. 328 return IDR_PAGEINFO_INFO; 329} 330 331// static 332const gfx::Image& WebsiteSettingsUI::GetFirstVisitIcon( 333 const base::string16& first_visit) { 334 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 335 return rb.GetNativeImageNamed(GetFirstVisitIconID(first_visit)); 336} 337