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 14 namespace { 15 16 const 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. 20 const 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 }; 27 COMPILE_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. 33 const 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 }; 40 COMPILE_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. 46 const 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 }; 53 COMPILE_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. 59 const 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 }; 66 COMPILE_ASSERT(arraysize(kPermissionButtonTextIDDefaultSetting) == 67 CONTENT_SETTING_NUM_SETTINGS, 68 button_text_id_array_size_incorrect); 69 70 } // namespace 71 72 WebsiteSettingsUI::CookieInfo::CookieInfo() 73 : allowed(-1), blocked(-1) { 74 } 75 76 WebsiteSettingsUI::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 83 WebsiteSettingsUI::IdentityInfo::IdentityInfo() 84 : identity_status(WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN), 85 cert_id(0), 86 connection_status(WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN) { 87 } 88 89 WebsiteSettingsUI::IdentityInfo::~IdentityInfo() {} 90 91 base::string16 WebsiteSettingsUI::IdentityInfo::GetIdentityStatusText() const { 92 if (identity_status == WebsiteSettings::SITE_IDENTITY_STATUS_CERT || 93 identity_status == WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT) { 94 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_IDENTITY_VERIFIED); 95 } 96 if (identity_status == 97 WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT) { 98 return l10n_util::GetStringUTF16(IDS_CERT_POLICY_PROVIDED_CERT_HEADER); 99 } 100 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_IDENTITY_NOT_VERIFIED); 101 } 102 103 WebsiteSettingsUI::~WebsiteSettingsUI() { 104 } 105 106 // static 107 base::string16 WebsiteSettingsUI::PermissionTypeToUIString( 108 ContentSettingsType type) { 109 switch (type) { 110 case CONTENT_SETTINGS_TYPE_IMAGES: 111 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_IMAGES); 112 case CONTENT_SETTINGS_TYPE_JAVASCRIPT: 113 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_JAVASCRIPT); 114 case CONTENT_SETTINGS_TYPE_POPUPS: 115 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_POPUPS); 116 case CONTENT_SETTINGS_TYPE_PLUGINS: 117 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_PLUGINS); 118 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 119 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_LOCATION); 120 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 121 return l10n_util::GetStringUTF16( 122 IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS); 123 case CONTENT_SETTINGS_TYPE_FULLSCREEN: 124 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_FULLSCREEN); 125 case CONTENT_SETTINGS_TYPE_MOUSELOCK: 126 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MOUSELOCK); 127 case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 128 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM); 129 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 130 return l10n_util::GetStringUTF16(IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL); 131 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 132 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MIDI_SYSEX); 133 default: 134 NOTREACHED(); 135 return base::string16(); 136 } 137 } 138 139 // static 140 base::string16 WebsiteSettingsUI::PermissionValueToUIString( 141 ContentSetting value) { 142 switch (value) { 143 case CONTENT_SETTING_ALLOW: 144 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ALLOW); 145 case CONTENT_SETTING_BLOCK: 146 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_BLOCK); 147 case CONTENT_SETTING_ASK: 148 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ASK); 149 default: 150 NOTREACHED(); 151 return base::string16(); 152 } 153 } 154 155 // static 156 base::string16 WebsiteSettingsUI::PermissionActionToUIString( 157 ContentSetting setting, 158 ContentSetting default_setting, 159 content_settings::SettingSource source) { 160 ContentSetting effective_setting = setting; 161 if (effective_setting == CONTENT_SETTING_DEFAULT) 162 effective_setting = default_setting; 163 164 const int* button_text_ids = NULL; 165 switch (source) { 166 case content_settings::SETTING_SOURCE_USER: 167 if (setting == CONTENT_SETTING_DEFAULT) 168 button_text_ids = kPermissionButtonTextIDDefaultSetting; 169 else 170 button_text_ids = kPermissionButtonTextIDUserManaged; 171 break; 172 case content_settings::SETTING_SOURCE_POLICY: 173 button_text_ids = kPermissionButtonTextIDPolicyManaged; 174 break; 175 case content_settings::SETTING_SOURCE_EXTENSION: 176 button_text_ids = kPermissionButtonTextIDExtensionManaged; 177 break; 178 case content_settings::SETTING_SOURCE_WHITELIST: 179 case content_settings::SETTING_SOURCE_NONE: 180 default: 181 NOTREACHED(); 182 return base::string16(); 183 } 184 int button_text_id = button_text_ids[effective_setting]; 185 DCHECK_NE(button_text_id, kInvalidResourceID); 186 return l10n_util::GetStringUTF16(button_text_id); 187 } 188 189 // static 190 int WebsiteSettingsUI::GetPermissionIconID(ContentSettingsType type, 191 ContentSetting setting) { 192 bool use_blocked = (setting == CONTENT_SETTING_BLOCK); 193 int resource_id = IDR_INFO; 194 switch (type) { 195 case CONTENT_SETTINGS_TYPE_IMAGES: 196 resource_id = use_blocked ? IDR_BLOCKED_IMAGES : IDR_ALLOWED_IMAGES; 197 break; 198 case CONTENT_SETTINGS_TYPE_JAVASCRIPT: 199 resource_id = 200 use_blocked ? IDR_BLOCKED_JAVASCRIPT : IDR_ALLOWED_JAVASCRIPT; 201 break; 202 case CONTENT_SETTINGS_TYPE_COOKIES: 203 resource_id = use_blocked ? IDR_BLOCKED_COOKIES : IDR_ACCESSED_COOKIES; 204 break; 205 case CONTENT_SETTINGS_TYPE_POPUPS: 206 resource_id = use_blocked ? IDR_BLOCKED_POPUPS : IDR_ALLOWED_POPUPS; 207 break; 208 case CONTENT_SETTINGS_TYPE_PLUGINS: 209 resource_id = use_blocked ? IDR_BLOCKED_PLUGINS : IDR_ALLOWED_PLUGINS; 210 break; 211 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 212 resource_id = use_blocked ? IDR_BLOCKED_LOCATION : IDR_ALLOWED_LOCATION; 213 break; 214 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 215 resource_id = 216 use_blocked ? IDR_BLOCKED_NOTIFICATION : IDR_ALLOWED_NOTIFICATION; 217 break; 218 case CONTENT_SETTINGS_TYPE_FULLSCREEN: 219 resource_id = IDR_ALLOWED_FULLSCREEN; 220 break; 221 case CONTENT_SETTINGS_TYPE_MOUSELOCK: 222 resource_id = 223 use_blocked ? IDR_BLOCKED_MOUSE_CURSOR : IDR_ALLOWED_MOUSE_CURSOR; 224 break; 225 case CONTENT_SETTINGS_TYPE_MEDIASTREAM: 226 resource_id = use_blocked ? IDR_BLOCKED_MEDIA : IDR_ASK_MEDIA; 227 break; 228 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 229 resource_id = use_blocked ? IDR_BLOCKED_DOWNLOADS 230 : IDR_ALLOWED_DOWNLOADS; 231 break; 232 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 233 resource_id = use_blocked ? IDR_BLOCKED_MIDI_SYSEX 234 : IDR_ALLOWED_MIDI_SYSEX; 235 break; 236 default: 237 NOTREACHED(); 238 break; 239 } 240 return resource_id; 241 } 242 243 // static 244 const gfx::Image& WebsiteSettingsUI::GetPermissionIcon( 245 const PermissionInfo& info) { 246 ContentSetting setting = info.setting; 247 if (setting == CONTENT_SETTING_DEFAULT) 248 setting = info.default_setting; 249 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 250 return rb.GetNativeImageNamed(GetPermissionIconID(info.type, setting)); 251 } 252 253 // static 254 int WebsiteSettingsUI::GetIdentityIconID( 255 WebsiteSettings::SiteIdentityStatus status) { 256 int resource_id = IDR_PAGEINFO_INFO; 257 switch (status) { 258 case WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN: 259 break; 260 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT: 261 case WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT: 262 resource_id = IDR_PAGEINFO_GOOD; 263 break; 264 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN: 265 resource_id = IDR_PAGEINFO_WARNING_MINOR; 266 break; 267 case WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT: 268 resource_id = IDR_PAGEINFO_WARNING_MAJOR; 269 break; 270 case WebsiteSettings::SITE_IDENTITY_STATUS_ERROR: 271 resource_id = IDR_PAGEINFO_BAD; 272 break; 273 case WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT: 274 resource_id = IDR_PAGEINFO_ENTERPRISE_MANAGED; 275 break; 276 default: 277 NOTREACHED(); 278 break; 279 } 280 return resource_id; 281 } 282 283 // static 284 const gfx::Image& WebsiteSettingsUI::GetIdentityIcon( 285 WebsiteSettings::SiteIdentityStatus status) { 286 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 287 return rb.GetNativeImageNamed(GetIdentityIconID(status)); 288 } 289 290 // static 291 int WebsiteSettingsUI::GetConnectionIconID( 292 WebsiteSettings::SiteConnectionStatus status) { 293 int resource_id = IDR_PAGEINFO_INFO; 294 switch (status) { 295 case WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN: 296 break; 297 case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED: 298 resource_id = IDR_PAGEINFO_GOOD; 299 break; 300 case WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT: 301 resource_id = IDR_PAGEINFO_WARNING_MINOR; 302 break; 303 case WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED: 304 resource_id = IDR_PAGEINFO_WARNING_MAJOR; 305 break; 306 case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR: 307 resource_id = IDR_PAGEINFO_BAD; 308 break; 309 default: 310 NOTREACHED(); 311 break; 312 } 313 return resource_id; 314 } 315 316 // static 317 const gfx::Image& WebsiteSettingsUI::GetConnectionIcon( 318 WebsiteSettings::SiteConnectionStatus status) { 319 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 320 return rb.GetNativeImageNamed(GetConnectionIconID(status)); 321 } 322 323 // static 324 int WebsiteSettingsUI::GetFirstVisitIconID(const base::string16& first_visit) { 325 // FIXME(markusheintz): Display a minor warning icon if the page is visited 326 // the first time. 327 return IDR_PAGEINFO_INFO; 328 } 329 330 // static 331 const gfx::Image& WebsiteSettingsUI::GetFirstVisitIcon( 332 const base::string16& first_visit) { 333 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 334 return rb.GetNativeImageNamed(GetFirstVisitIconID(first_visit)); 335 } 336