Upstream version 9.38.198.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 "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       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       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
141 base::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
157 base::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
191 int 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
245 const 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
255 int 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
285 const gfx::Image& WebsiteSettingsUI::GetIdentityIcon(
286     WebsiteSettings::SiteIdentityStatus status) {
287   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
288   return rb.GetNativeImageNamed(GetIdentityIconID(status));
289 }
290
291 // static
292 int 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
318 const gfx::Image& WebsiteSettingsUI::GetConnectionIcon(
319     WebsiteSettings::SiteConnectionStatus status) {
320   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
321   return rb.GetNativeImageNamed(GetConnectionIconID(status));
322 }
323
324 // static
325 int 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
332 const gfx::Image& WebsiteSettingsUI::GetFirstVisitIcon(
333     const base::string16& first_visit) {
334   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
335   return rb.GetNativeImageNamed(GetFirstVisitIconID(first_visit));
336 }