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