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.
5 #include "chrome/browser/ui/website_settings/website_settings_ui.h"
7 #include "chrome/grit/chromium_strings.h"
8 #include "chrome/grit/generated_resources.h"
9 #include "components/content_settings/core/browser/plugins_field_trial.h"
10 #include "grit/theme_resources.h"
11 #include "ui/base/l10n/l10n_util.h"
12 #include "ui/base/resource/resource_bundle.h"
13 #include "ui/gfx/image/image.h"
17 const int kInvalidResourceID
= -1;
19 // The resource IDs for the strings that are displayed on the permissions
20 // button if the permission setting is managed by policy.
21 const int kPermissionButtonTextIDPolicyManaged
[] = {
23 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_POLICY
,
24 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_POLICY
,
25 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_POLICY
,
28 static_assert(arraysize(kPermissionButtonTextIDPolicyManaged
) ==
29 CONTENT_SETTING_NUM_SETTINGS
,
30 "kPermissionButtonTextIDPolicyManaged array size is incorrect");
32 // The resource IDs for the strings that are displayed on the permissions
33 // button if the permission setting is managed by an extension.
34 const int kPermissionButtonTextIDExtensionManaged
[] = {
36 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_EXTENSION
,
37 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_EXTENSION
,
41 static_assert(arraysize(kPermissionButtonTextIDExtensionManaged
) ==
42 CONTENT_SETTING_NUM_SETTINGS
,
43 "kPermissionButtonTextIDExtensionManaged array size is "
46 // The resource IDs for the strings that are displayed on the permissions
47 // button if the permission setting is managed by the user.
48 const int kPermissionButtonTextIDUserManaged
[] = {
50 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_USER
,
51 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_USER
,
52 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_USER
,
54 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_DETECT_IMPORTANT_CONTENT_BY_USER
};
55 static_assert(arraysize(kPermissionButtonTextIDUserManaged
) ==
56 CONTENT_SETTING_NUM_SETTINGS
,
57 "kPermissionButtonTextIDUserManaged array size is incorrect");
59 // The resource IDs for the strings that are displayed on the permissions
60 // button if the permission setting is the global default setting.
61 const int kPermissionButtonTextIDDefaultSetting
[] = {
63 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_DEFAULT
,
64 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_DEFAULT
,
65 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_DEFAULT
,
67 IDS_WEBSITE_SETTINGS_BUTTON_TEXT_DETECT_IMPORTANT_CONTENT_BY_DEFAULT
};
68 static_assert(arraysize(kPermissionButtonTextIDDefaultSetting
) ==
69 CONTENT_SETTING_NUM_SETTINGS
,
70 "kPermissionButtonTextIDDefaultSetting array size is incorrect");
74 WebsiteSettingsUI::CookieInfo::CookieInfo()
75 : allowed(-1), blocked(-1) {
78 WebsiteSettingsUI::PermissionInfo::PermissionInfo()
79 : type(CONTENT_SETTINGS_TYPE_DEFAULT
),
80 setting(CONTENT_SETTING_DEFAULT
),
81 default_setting(CONTENT_SETTING_DEFAULT
),
82 source(content_settings::SETTING_SOURCE_NONE
) {
85 WebsiteSettingsUI::IdentityInfo::IdentityInfo()
86 : identity_status(WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN
),
88 connection_status(WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN
),
89 show_ssl_decision_revoke_button(false) {
92 WebsiteSettingsUI::IdentityInfo::~IdentityInfo() {}
94 base::string16
WebsiteSettingsUI::IdentityInfo::GetIdentityStatusText() const {
95 switch (identity_status
) {
96 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT
:
97 case WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT
:
98 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN
:
99 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_SECURE_TRANSPORT
);
100 case WebsiteSettings::SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM
:
101 return l10n_util::GetStringUTF16(
102 IDS_WEBSITE_DEPRECATED_SIGNATURE_ALGORITHM
);
103 case WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT
:
104 return l10n_util::GetStringUTF16(IDS_CERT_POLICY_PROVIDED_CERT_HEADER
);
105 case WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN
:
106 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_UNKNOWN_TRANSPORT
);
107 case WebsiteSettings::SITE_IDENTITY_STATUS_INTERNAL_PAGE
:
108 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_INTERNAL_PAGE
);
109 case WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT
:
111 return l10n_util::GetStringUTF16(
112 IDS_WEBSITE_SETTINGS_NON_SECURE_TRANSPORT
);
116 WebsiteSettingsUI::~WebsiteSettingsUI() {
120 base::string16
WebsiteSettingsUI::PermissionTypeToUIString(
121 ContentSettingsType type
) {
123 case CONTENT_SETTINGS_TYPE_IMAGES
:
124 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_IMAGES
);
125 case CONTENT_SETTINGS_TYPE_JAVASCRIPT
:
126 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_JAVASCRIPT
);
127 case CONTENT_SETTINGS_TYPE_POPUPS
:
128 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_POPUPS
);
129 case CONTENT_SETTINGS_TYPE_PLUGINS
:
130 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_PLUGINS
);
131 case CONTENT_SETTINGS_TYPE_GEOLOCATION
:
132 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_LOCATION
);
133 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS
:
134 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING
:
135 return l10n_util::GetStringUTF16(
136 IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS
);
137 case CONTENT_SETTINGS_TYPE_FULLSCREEN
:
138 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_FULLSCREEN
);
139 case CONTENT_SETTINGS_TYPE_MOUSELOCK
:
140 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MOUSELOCK
);
141 case CONTENT_SETTINGS_TYPE_MEDIASTREAM
:
142 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM
);
143 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC
:
144 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MIC
);
145 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA
:
146 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_CAMERA
);
147 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS
:
148 return l10n_util::GetStringUTF16(IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL
);
149 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX
:
150 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MIDI_SYSEX
);
153 return base::string16();
158 base::string16
WebsiteSettingsUI::PermissionValueToUIString(
159 ContentSetting value
) {
161 case CONTENT_SETTING_ALLOW
:
162 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ALLOW
);
163 case CONTENT_SETTING_BLOCK
:
164 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_BLOCK
);
165 case CONTENT_SETTING_ASK
:
166 return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ASK
);
169 return base::string16();
174 base::string16
WebsiteSettingsUI::PermissionActionToUIString(
175 ContentSettingsType type
,
176 ContentSetting setting
,
177 ContentSetting default_setting
,
178 content_settings::SettingSource source
) {
179 ContentSetting effective_setting
= setting
;
180 if (effective_setting
== CONTENT_SETTING_DEFAULT
)
181 effective_setting
= default_setting
;
183 #if defined(ENABLE_PLUGINS)
185 content_settings::PluginsFieldTrial::EffectiveContentSetting(
186 type
, effective_setting
);
189 const int* button_text_ids
= NULL
;
191 case content_settings::SETTING_SOURCE_USER
:
192 if (setting
== CONTENT_SETTING_DEFAULT
)
193 button_text_ids
= kPermissionButtonTextIDDefaultSetting
;
195 button_text_ids
= kPermissionButtonTextIDUserManaged
;
197 case content_settings::SETTING_SOURCE_POLICY
:
198 button_text_ids
= kPermissionButtonTextIDPolicyManaged
;
200 case content_settings::SETTING_SOURCE_EXTENSION
:
201 button_text_ids
= kPermissionButtonTextIDExtensionManaged
;
203 case content_settings::SETTING_SOURCE_WHITELIST
:
204 case content_settings::SETTING_SOURCE_NONE
:
207 return base::string16();
209 int button_text_id
= button_text_ids
[effective_setting
];
210 DCHECK_NE(button_text_id
, kInvalidResourceID
);
211 return l10n_util::GetStringUTF16(button_text_id
);
215 int WebsiteSettingsUI::GetPermissionIconID(ContentSettingsType type
,
216 ContentSetting setting
) {
217 bool use_blocked
= (setting
== CONTENT_SETTING_BLOCK
);
218 int resource_id
= IDR_INFO
;
220 case CONTENT_SETTINGS_TYPE_IMAGES
:
221 resource_id
= use_blocked
? IDR_BLOCKED_IMAGES
: IDR_ALLOWED_IMAGES
;
223 case CONTENT_SETTINGS_TYPE_JAVASCRIPT
:
225 use_blocked
? IDR_BLOCKED_JAVASCRIPT
: IDR_ALLOWED_JAVASCRIPT
;
227 case CONTENT_SETTINGS_TYPE_COOKIES
:
228 resource_id
= use_blocked
? IDR_BLOCKED_COOKIES
: IDR_ACCESSED_COOKIES
;
230 case CONTENT_SETTINGS_TYPE_POPUPS
:
231 resource_id
= use_blocked
? IDR_BLOCKED_POPUPS
: IDR_ALLOWED_POPUPS
;
233 case CONTENT_SETTINGS_TYPE_PLUGINS
:
234 resource_id
= use_blocked
? IDR_BLOCKED_PLUGINS
: IDR_ALLOWED_PLUGINS
;
236 case CONTENT_SETTINGS_TYPE_GEOLOCATION
:
237 resource_id
= use_blocked
? IDR_BLOCKED_LOCATION
: IDR_ALLOWED_LOCATION
;
239 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS
:
241 use_blocked
? IDR_BLOCKED_NOTIFICATION
: IDR_ALLOWED_NOTIFICATION
;
243 case CONTENT_SETTINGS_TYPE_FULLSCREEN
:
244 resource_id
= IDR_ALLOWED_FULLSCREEN
;
246 case CONTENT_SETTINGS_TYPE_MOUSELOCK
:
248 use_blocked
? IDR_BLOCKED_MOUSE_CURSOR
: IDR_ALLOWED_MOUSE_CURSOR
;
250 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC
:
251 resource_id
= use_blocked
? IDR_BLOCKED_MIC
: IDR_ALLOWED_MIC
;
253 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA
:
254 resource_id
= use_blocked
? IDR_BLOCKED_CAMERA
: IDR_ALLOWED_CAMERA
;
256 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS
:
257 resource_id
= use_blocked
? IDR_BLOCKED_DOWNLOADS
258 : IDR_ALLOWED_DOWNLOADS
;
260 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX
:
261 resource_id
= use_blocked
? IDR_BLOCKED_MIDI_SYSEX
262 : IDR_ALLOWED_MIDI_SYSEX
;
272 const gfx::Image
& WebsiteSettingsUI::GetPermissionIcon(
273 const PermissionInfo
& info
) {
274 ContentSetting setting
= info
.setting
;
275 if (setting
== CONTENT_SETTING_DEFAULT
)
276 setting
= info
.default_setting
;
277 ResourceBundle
& rb
= ResourceBundle::GetSharedInstance();
278 return rb
.GetNativeImageNamed(GetPermissionIconID(info
.type
, setting
));
282 int WebsiteSettingsUI::GetIdentityIconID(
283 WebsiteSettings::SiteIdentityStatus status
) {
284 int resource_id
= IDR_PAGEINFO_INFO
;
286 case WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN
:
287 case WebsiteSettings::SITE_IDENTITY_STATUS_INTERNAL_PAGE
:
289 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT
:
290 case WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT
:
291 resource_id
= IDR_PAGEINFO_GOOD
;
293 case WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN
:
294 resource_id
= IDR_PAGEINFO_WARNING_MINOR
;
296 case WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT
:
297 resource_id
= IDR_PAGEINFO_WARNING_MAJOR
;
299 case WebsiteSettings::SITE_IDENTITY_STATUS_ERROR
:
300 resource_id
= IDR_PAGEINFO_BAD
;
302 case WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT
:
303 resource_id
= IDR_PAGEINFO_ENTERPRISE_MANAGED
;
305 case WebsiteSettings::SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM
:
306 resource_id
= IDR_PAGEINFO_WARNING_MINOR
;
316 const gfx::Image
& WebsiteSettingsUI::GetIdentityIcon(
317 WebsiteSettings::SiteIdentityStatus status
) {
318 ResourceBundle
& rb
= ResourceBundle::GetSharedInstance();
319 return rb
.GetNativeImageNamed(GetIdentityIconID(status
));
323 int WebsiteSettingsUI::GetConnectionIconID(
324 WebsiteSettings::SiteConnectionStatus status
) {
325 int resource_id
= IDR_PAGEINFO_INFO
;
327 case WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN
:
328 case WebsiteSettings::SITE_CONNECTION_STATUS_INTERNAL_PAGE
:
330 case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED
:
331 resource_id
= IDR_PAGEINFO_GOOD
;
333 case WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT
:
334 resource_id
= IDR_PAGEINFO_WARNING_MINOR
;
336 case WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED
:
337 resource_id
= IDR_PAGEINFO_WARNING_MAJOR
;
339 case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR
:
340 resource_id
= IDR_PAGEINFO_BAD
;
350 const gfx::Image
& WebsiteSettingsUI::GetConnectionIcon(
351 WebsiteSettings::SiteConnectionStatus status
) {
352 ResourceBundle
& rb
= ResourceBundle::GetSharedInstance();
353 return rb
.GetNativeImageNamed(GetConnectionIconID(status
));
357 int WebsiteSettingsUI::GetFirstVisitIconID(const base::string16
& first_visit
) {
358 // FIXME(markusheintz): Display a minor warning icon if the page is visited
360 return IDR_PAGEINFO_INFO
;
364 const gfx::Image
& WebsiteSettingsUI::GetFirstVisitIcon(
365 const base::string16
& first_visit
) {
366 ResourceBundle
& rb
= ResourceBundle::GetSharedInstance();
367 return rb
.GetNativeImageNamed(GetFirstVisitIconID(first_visit
));