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 cr
.define('options', function() {
6 var OptionsPage
= options
.OptionsPage
;
7 var Page
= cr
.ui
.pageManager
.Page
;
8 var PageManager
= cr
.ui
.pageManager
.PageManager
;
10 /////////////////////////////////////////////////////////////////////////////
11 // CertificateManagerTab class:
15 * @param {!string} id The id of this tab.
16 * @param {boolean} isKiosk True if dialog is shown during CrOS kiosk launch.
19 function CertificateManagerTab(id
, isKiosk
) {
20 this.tree
= $(id
+ '-tree');
22 options
.CertificatesTree
.decorate(this.tree
);
23 this.tree
.addEventListener('change',
24 this.handleCertificatesTreeChange_
.bind(this));
28 this.viewButton
= $(id
+ '-view');
29 this.viewButton
.onclick = function(e
) {
30 var selected
= tree
.selectedItem
;
31 chrome
.send('viewCertificate', [selected
.data
.id
]);
34 this.editButton
= $(id
+ '-edit');
35 if (this.editButton
!== null) {
36 if (id
== 'serverCertsTab') {
37 this.editButton
.onclick = function(e
) {
38 var selected
= tree
.selectedItem
;
39 chrome
.send('editServerCertificate', [selected
.data
.id
]);
41 } else if (id
== 'caCertsTab') {
42 this.editButton
.onclick = function(e
) {
43 var data
= tree
.selectedItem
.data
;
44 CertificateEditCaTrustOverlay
.show(data
.id
, data
.name
);
49 this.backupButton
= $(id
+ '-backup');
50 if (this.backupButton
!== null) {
51 if (id
== 'personalCertsTab' && isKiosk
) {
52 this.backupButton
.hidden
= true;
54 this.backupButton
.onclick = function(e
) {
55 var selected
= tree
.selectedItem
;
56 chrome
.send('exportPersonalCertificate', [selected
.data
.id
]);
61 this.backupAllButton
= $(id
+ '-backup-all');
62 if (this.backupAllButton
!== null) {
63 if (id
== 'personalCertsTab' && isKiosk
) {
64 this.backupAllButton
.hidden
= true;
66 this.backupAllButton
.onclick = function(e
) {
67 chrome
.send('exportAllPersonalCertificates');
72 this.importButton
= $(id
+ '-import');
73 if (this.importButton
!== null) {
74 if (id
== 'personalCertsTab') {
76 this.importButton
.hidden
= true;
78 this.importButton
.onclick = function(e
) {
79 chrome
.send('importPersonalCertificate', [false]);
82 } else if (id
== 'serverCertsTab') {
83 this.importButton
.onclick = function(e
) {
84 chrome
.send('importServerCertificate');
86 } else if (id
== 'caCertsTab') {
87 this.importButton
.onclick = function(e
) {
88 chrome
.send('importCaCertificate');
93 this.importAndBindButton
= $(id
+ '-import-and-bind');
94 if (this.importAndBindButton
!== null) {
95 if (id
== 'personalCertsTab') {
96 this.importAndBindButton
.onclick = function(e
) {
97 chrome
.send('importPersonalCertificate', [true]);
102 this.exportButton
= $(id
+ '-export');
103 if (this.exportButton
!== null) {
104 if (id
== 'personalCertsTab' && isKiosk
) {
105 this.exportButton
.hidden
= true;
107 this.exportButton
.onclick = function(e
) {
108 var selected
= tree
.selectedItem
;
109 chrome
.send('exportCertificate', [selected
.data
.id
]);
114 this.deleteButton
= $(id
+ '-delete');
115 this.deleteButton
.onclick = function(e
) {
116 var data
= tree
.selectedItem
.data
;
118 loadTimeData
.getStringF(id
+ 'DeleteConfirm', data
.name
),
119 loadTimeData
.getString(id
+ 'DeleteImpact'),
120 loadTimeData
.getString('ok'),
121 loadTimeData
.getString('cancel'),
123 tree
.selectedItem
= null;
124 chrome
.send('deleteCertificate', [data
.id
]);
129 CertificateManagerTab
.prototype = {
131 * Update button state.
133 * @param {!Object} data The data of the selected item.
135 updateButtonState: function(data
) {
136 var isCert
= !!data
&& data
.isCert
;
137 var readOnly
= !!data
&& data
.readonly
;
138 var extractable
= !!data
&& data
.extractable
;
139 var hasChildren
= this.tree
.items
.length
> 0;
140 var isPolicy
= !!data
&& data
.policy
;
141 this.viewButton
.disabled
= !isCert
;
142 if (this.editButton
!== null)
143 this.editButton
.disabled
= !isCert
|| isPolicy
;
144 if (this.backupButton
!== null)
145 this.backupButton
.disabled
= !isCert
|| !extractable
;
146 if (this.backupAllButton
!== null)
147 this.backupAllButton
.disabled
= !hasChildren
;
148 if (this.exportButton
!== null)
149 this.exportButton
.disabled
= !isCert
;
150 this.deleteButton
.disabled
= !isCert
|| readOnly
|| isPolicy
;
154 * Handles certificate tree selection change.
156 * @param {!Event} e The change event object.
158 handleCertificatesTreeChange_: function(e
) {
160 if (this.tree
.selectedItem
)
161 data
= this.tree
.selectedItem
.data
;
163 this.updateButtonState(data
);
167 /////////////////////////////////////////////////////////////////////////////
168 // CertificateManager class:
171 * Encapsulated handling of ChromeOS accounts options page.
173 * @extends {cr.ui.pageManager.Page}
175 function CertificateManager() {
176 Page
.call(this, 'certificates',
177 loadTimeData
.getString('certificateManagerPageTabTitle'),
178 'certificateManagerPage');
181 cr
.addSingletonGetter(CertificateManager
);
183 CertificateManager
.prototype = {
184 __proto__
: Page
.prototype,
186 /** @private {boolean} */
189 /** @param {boolean} isKiosk */
190 setIsKiosk: function(isKiosk
) {
191 this.isKiosk_
= isKiosk
;
195 initializePage: function() {
196 Page
.prototype.initializePage
.call(this);
198 this.personalTab
= new CertificateManagerTab('personalCertsTab',
200 this.serverTab
= new CertificateManagerTab('serverCertsTab',
202 this.caTab
= new CertificateManagerTab('caCertsTab', this.isKiosk_
);
203 this.otherTab
= new CertificateManagerTab('otherCertsTab', this.isKiosk_
);
205 this.addEventListener('visibleChange', this.handleVisibleChange_
);
207 $('certificate-confirm').onclick = function() {
208 PageManager
.closeOverlay();
215 * Handler for Page's visible property change event.
217 * @param {Event} e Property change event.
219 handleVisibleChange_: function(e
) {
220 if (!this.initalized_
&& this.visible
) {
221 this.initalized_
= true;
222 OptionsPage
.showTab($('personal-certs-nav-tab'));
223 chrome
.send('populateCertificateManager');
228 // CertificateManagerHandler callbacks.
229 CertificateManager
.onPopulateTree = function(args
) {
230 $(args
[0]).populate(args
[1]);
233 CertificateManager
.exportPersonalAskPassword = function(args
) {
234 CertificateBackupOverlay
.show();
237 CertificateManager
.importPersonalAskPassword = function(args
) {
238 CertificateRestoreOverlay
.show();
241 CertificateManager
.onModelReady = function(userDbAvailable
,
243 if (!userDbAvailable
)
246 $('personalCertsTab-import-and-bind').disabled
= false;
247 $('personalCertsTab-import').disabled
= false;
248 $('serverCertsTab-import').disabled
= false;
249 $('caCertsTab-import').disabled
= false;
254 CertificateManagerTab
: CertificateManagerTab
,
255 CertificateManager
: CertificateManager