Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / website_settings / website_settings_ui.cc
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 "chrome/grit/chromium_strings.h"
8 #include "chrome/grit/generated_resources.h"
9 #include "grit/theme_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       show_ssl_decision_revoke_button(false) {
88 }
89
90 WebsiteSettingsUI::IdentityInfo::~IdentityInfo() {}
91
92 base::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
104 WebsiteSettingsUI::~WebsiteSettingsUI() {
105 }
106
107 // static
108 base::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     case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
123       return l10n_util::GetStringUTF16(
124           IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS);
125     case CONTENT_SETTINGS_TYPE_FULLSCREEN:
126       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_FULLSCREEN);
127     case CONTENT_SETTINGS_TYPE_MOUSELOCK:
128       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MOUSELOCK);
129     case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
130       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM);
131     case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS:
132       return l10n_util::GetStringUTF16(IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL);
133     case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
134       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TYPE_MIDI_SYSEX);
135     default:
136       NOTREACHED();
137       return base::string16();
138   }
139 }
140
141 // static
142 base::string16 WebsiteSettingsUI::PermissionValueToUIString(
143     ContentSetting value) {
144   switch (value) {
145     case CONTENT_SETTING_ALLOW:
146       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ALLOW);
147     case CONTENT_SETTING_BLOCK:
148       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_BLOCK);
149     case CONTENT_SETTING_ASK:
150       return l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_PERMISSION_ASK);
151     default:
152       NOTREACHED();
153       return base::string16();
154   }
155 }
156
157 // static
158 base::string16 WebsiteSettingsUI::PermissionActionToUIString(
159       ContentSetting setting,
160       ContentSetting default_setting,
161       content_settings::SettingSource source) {
162   ContentSetting effective_setting = setting;
163   if (effective_setting == CONTENT_SETTING_DEFAULT)
164     effective_setting = default_setting;
165
166   const int* button_text_ids = NULL;
167   switch (source) {
168     case content_settings::SETTING_SOURCE_USER:
169       if (setting == CONTENT_SETTING_DEFAULT)
170         button_text_ids = kPermissionButtonTextIDDefaultSetting;
171       else
172         button_text_ids = kPermissionButtonTextIDUserManaged;
173       break;
174     case content_settings::SETTING_SOURCE_POLICY:
175       button_text_ids = kPermissionButtonTextIDPolicyManaged;
176       break;
177     case content_settings::SETTING_SOURCE_EXTENSION:
178       button_text_ids = kPermissionButtonTextIDExtensionManaged;
179       break;
180     case content_settings::SETTING_SOURCE_WHITELIST:
181     case content_settings::SETTING_SOURCE_NONE:
182     default:
183       NOTREACHED();
184       return base::string16();
185   }
186   int button_text_id = button_text_ids[effective_setting];
187   DCHECK_NE(button_text_id, kInvalidResourceID);
188   return l10n_util::GetStringUTF16(button_text_id);
189 }
190
191 // static
192 int WebsiteSettingsUI::GetPermissionIconID(ContentSettingsType type,
193                                            ContentSetting setting) {
194   bool use_blocked = (setting == CONTENT_SETTING_BLOCK);
195   int resource_id = IDR_INFO;
196   switch (type) {
197     case CONTENT_SETTINGS_TYPE_IMAGES:
198       resource_id = use_blocked ? IDR_BLOCKED_IMAGES : IDR_ALLOWED_IMAGES;
199       break;
200     case CONTENT_SETTINGS_TYPE_JAVASCRIPT:
201       resource_id =
202           use_blocked ? IDR_BLOCKED_JAVASCRIPT : IDR_ALLOWED_JAVASCRIPT;
203       break;
204     case CONTENT_SETTINGS_TYPE_COOKIES:
205       resource_id = use_blocked ? IDR_BLOCKED_COOKIES : IDR_ACCESSED_COOKIES;
206       break;
207     case CONTENT_SETTINGS_TYPE_POPUPS:
208       resource_id = use_blocked ? IDR_BLOCKED_POPUPS : IDR_ALLOWED_POPUPS;
209       break;
210     case CONTENT_SETTINGS_TYPE_PLUGINS:
211       resource_id = use_blocked ? IDR_BLOCKED_PLUGINS : IDR_ALLOWED_PLUGINS;
212       break;
213     case CONTENT_SETTINGS_TYPE_GEOLOCATION:
214       resource_id = use_blocked ? IDR_BLOCKED_LOCATION : IDR_ALLOWED_LOCATION;
215       break;
216     case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
217       resource_id =
218           use_blocked ? IDR_BLOCKED_NOTIFICATION : IDR_ALLOWED_NOTIFICATION;
219       break;
220     case CONTENT_SETTINGS_TYPE_FULLSCREEN:
221       resource_id = IDR_ALLOWED_FULLSCREEN;
222       break;
223     case CONTENT_SETTINGS_TYPE_MOUSELOCK:
224       resource_id =
225           use_blocked ? IDR_BLOCKED_MOUSE_CURSOR : IDR_ALLOWED_MOUSE_CURSOR;
226       break;
227     case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
228       resource_id = use_blocked ? IDR_BLOCKED_MEDIA : IDR_ASK_MEDIA;
229       break;
230     case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS:
231       resource_id = use_blocked ? IDR_BLOCKED_DOWNLOADS
232                                 : IDR_ALLOWED_DOWNLOADS;
233       break;
234     case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
235       resource_id = use_blocked ? IDR_BLOCKED_MIDI_SYSEX
236                                 : IDR_ALLOWED_MIDI_SYSEX;
237       break;
238     default:
239       NOTREACHED();
240       break;
241   }
242   return resource_id;
243 }
244
245 // static
246 const gfx::Image& WebsiteSettingsUI::GetPermissionIcon(
247     const PermissionInfo& info) {
248   ContentSetting setting = info.setting;
249   if (setting == CONTENT_SETTING_DEFAULT)
250     setting = info.default_setting;
251   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
252   return rb.GetNativeImageNamed(GetPermissionIconID(info.type, setting));
253 }
254
255 // static
256 int WebsiteSettingsUI::GetIdentityIconID(
257     WebsiteSettings::SiteIdentityStatus status) {
258   int resource_id = IDR_PAGEINFO_INFO;
259   switch (status) {
260     case WebsiteSettings::SITE_IDENTITY_STATUS_UNKNOWN:
261     case WebsiteSettings::SITE_IDENTITY_STATUS_INTERNAL_PAGE:
262       break;
263     case WebsiteSettings::SITE_IDENTITY_STATUS_CERT:
264     case WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT:
265       resource_id = IDR_PAGEINFO_GOOD;
266       break;
267     case WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN:
268       resource_id = IDR_PAGEINFO_WARNING_MINOR;
269       break;
270     case WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT:
271       resource_id = IDR_PAGEINFO_WARNING_MAJOR;
272       break;
273     case WebsiteSettings::SITE_IDENTITY_STATUS_ERROR:
274       resource_id = IDR_PAGEINFO_BAD;
275       break;
276     case WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT:
277       resource_id = IDR_PAGEINFO_ENTERPRISE_MANAGED;
278       break;
279     case WebsiteSettings::SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM:
280       resource_id = IDR_PAGEINFO_WARNING_MINOR;
281       break;
282     default:
283       NOTREACHED();
284       break;
285   }
286   return resource_id;
287 }
288
289 // static
290 const gfx::Image& WebsiteSettingsUI::GetIdentityIcon(
291     WebsiteSettings::SiteIdentityStatus status) {
292   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
293   return rb.GetNativeImageNamed(GetIdentityIconID(status));
294 }
295
296 // static
297 int WebsiteSettingsUI::GetConnectionIconID(
298     WebsiteSettings::SiteConnectionStatus status) {
299   int resource_id = IDR_PAGEINFO_INFO;
300   switch (status) {
301     case WebsiteSettings::SITE_CONNECTION_STATUS_UNKNOWN:
302     case WebsiteSettings::SITE_CONNECTION_STATUS_INTERNAL_PAGE:
303       break;
304     case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED:
305       resource_id = IDR_PAGEINFO_GOOD;
306       break;
307     case WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT:
308       resource_id = IDR_PAGEINFO_WARNING_MINOR;
309       break;
310     case WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED:
311       resource_id = IDR_PAGEINFO_WARNING_MAJOR;
312       break;
313     case WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR:
314       resource_id = IDR_PAGEINFO_BAD;
315       break;
316     default:
317       NOTREACHED();
318       break;
319   }
320   return resource_id;
321 }
322
323 // static
324 const gfx::Image& WebsiteSettingsUI::GetConnectionIcon(
325     WebsiteSettings::SiteConnectionStatus status) {
326   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
327   return rb.GetNativeImageNamed(GetConnectionIconID(status));
328 }
329
330 // static
331 int WebsiteSettingsUI::GetFirstVisitIconID(const base::string16& first_visit) {
332   // FIXME(markusheintz): Display a minor warning icon if the page is visited
333   // the first time.
334   return IDR_PAGEINFO_INFO;
335 }
336
337 // static
338 const gfx::Image& WebsiteSettingsUI::GetFirstVisitIcon(
339     const base::string16& first_visit) {
340   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
341   return rb.GetNativeImageNamed(GetFirstVisitIconID(first_visit));
342 }