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