Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: chrome/browser/resources/options/certificate_manager.js

Issue 7003007: Apply content-security-policy to the HTML options page. This is a (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 cr.define('options', function() {
6
7 var OptionsPage = options.OptionsPage;
8
9 /////////////////////////////////////////////////////////////////////////////
10 // CertificateManagerTab class:
11
12 /**
13 * blah
14 * @param {!string} id The id of this tab.
15 */
16 function CertificateManagerTab(id) {
17 this.tree = $(id + '-tree');
18
19 options.CertificatesTree.decorate(this.tree);
20 this.tree.addEventListener('change',
21 this.handleCertificatesTreeChange_.bind(this));
22
23 var tree = this.tree;
24
25 this.viewButton = $(id + '-view');
26 this.viewButton.onclick = function(e) {
27 var selected = tree.selectedItem;
28 chrome.send('viewCertificate', [selected.data.id]);
29 }
30
31 this.editButton = $(id + '-edit');
32 if (this.editButton !== null) {
33 if (id == 'serverCertsTab') {
34 this.editButton.onclick = function(e) {
35 var selected = tree.selectedItem;
36 chrome.send('editServerCertificate', [selected.data.id]);
37 }
38 } else if (id == 'caCertsTab') {
39 this.editButton.onclick = function(e) {
40 var data = tree.selectedItem.data;
41 CertificateEditCaTrustOverlay.show(data.id, data.name);
42 }
43 }
44 }
45
46 this.backupButton = $(id + '-backup');
47 if (this.backupButton !== null) {
48 this.backupButton.onclick = function(e) {
49 var selected = tree.selectedItem;
50 chrome.send('exportPersonalCertificate', [selected.data.id]);
51 }
52 }
53
54 this.backupAllButton = $(id + '-backup-all');
55 if (this.backupAllButton !== null) {
56 this.backupAllButton.onclick = function(e) {
57 chrome.send('exportAllPersonalCertificates', []);
58 }
59 }
60
61 this.importButton = $(id + '-import');
62 if (this.importButton !== null) {
63 if (id == 'personalCertsTab') {
64 this.importButton.onclick = function(e) {
65 chrome.send('importPersonalCertificate', [false]);
66 }
67 } else if (id == 'serverCertsTab') {
68 this.importButton.onclick = function(e) {
69 chrome.send('importServerCertificate', []);
70 }
71 } else if (id == 'caCertsTab') {
72 this.importButton.onclick = function(e) {
73 chrome.send('importCaCertificate', []);
74 }
75 }
76 }
77
78 this.importAndBindButton = $(id + '-import-and-bind');
79 if (this.importAndBindButton !== null) {
80 if (id == 'personalCertsTab') {
81 this.importAndBindButton.onclick = function(e) {
82 chrome.send('importPersonalCertificate', [true]);
83 }
84 }
85 }
86
87 this.exportButton = $(id + '-export');
88 if (this.exportButton !== null) {
89 this.exportButton.onclick = function(e) {
90 var selected = tree.selectedItem;
91 chrome.send('exportCertificate', [selected.data.id]);
92 }
93 }
94
95 this.deleteButton = $(id + '-delete');
96 this.deleteButton.onclick = function(e) {
97 var data = tree.selectedItem.data;
98 AlertOverlay.show(
99 localStrings.getStringF(id + 'DeleteConfirm', data.name),
100 localStrings.getString(id + 'DeleteImpact'),
101 localStrings.getString('ok'),
102 localStrings.getString('cancel'),
103 function() { chrome.send('deleteCertificate', [data.id]); });
104 }
105 }
106
107 CertificateManagerTab.prototype = {
108
109 /**
110 * Update button state.
111 * @private
112 * @param {!Object} data The data of the selected item.
113 */
114 updateButtonState: function(data) {
115 var isCert = !!data && data.id.substr(0, 5) == 'cert-';
116 var readOnly = !!data && data.readonly;
117 var hasChildren = this.tree.items.length > 0;
118 this.viewButton.disabled = !isCert;
119 if (this.editButton !== null)
120 this.editButton.disabled = !isCert;
121 if (this.backupButton !== null)
122 this.backupButton.disabled = !isCert;
123 if (this.backupAllButton !== null)
124 this.backupAllButton.disabled = !hasChildren;
125 if (this.exportButton !== null)
126 this.exportButton.disabled = !isCert;
127 this.deleteButton.disabled = !isCert || readOnly;
128 },
129
130 /**
131 * Handles certificate tree selection change.
132 * @private
133 * @param {!Event} e The change event object.
134 */
135 handleCertificatesTreeChange_: function(e) {
136 var data = null;
137 if (this.tree.selectedItem) {
138 data = this.tree.selectedItem.data;
139 }
140
141 this.updateButtonState(data);
142 },
143
144 }
145
146 // TODO(xiyuan): Use notification from backend instead of polling.
147 // TPM token check polling timer.
148 var tpmPollingTimer;
149
150 // Initiate tpm token check if needed.
151 function checkTpmToken() {
152 var importAndBindButton = $('personalCertsTab-import-and-bind');
153
154 if (importAndBindButton && importAndBindButton.disabled)
155 chrome.send('checkTpmTokenReady');
156 }
157
158 // Stop tpm polling timer.
159 function stopTpmTokenCheckPolling() {
160 if (tpmPollingTimer) {
161 window.clearTimeout(tpmPollingTimer);
162 tpmPollingTimer = undefined;
163 }
164 }
165
166 /////////////////////////////////////////////////////////////////////////////
167 // CertificateManager class:
168
169 /**
170 * Encapsulated handling of ChromeOS accounts options page.
171 * @constructor
172 */
173 function CertificateManager(model) {
174 OptionsPage.call(this, 'certificates',
175 templateData.certificateManagerPageTabTitle,
176 'certificateManagerPage');
177 }
178
179 cr.addSingletonGetter(CertificateManager);
180
181 CertificateManager.prototype = {
182 __proto__: OptionsPage.prototype,
183
184 initializePage: function() {
185 OptionsPage.prototype.initializePage.call(this);
186
187 this.personalTab = new CertificateManagerTab('personalCertsTab');
188 this.serverTab = new CertificateManagerTab('serverCertsTab');
189 this.caTab = new CertificateManagerTab('caCertsTab');
190 this.otherTab = new CertificateManagerTab('otherCertsTab');
191
192 this.addEventListener('visibleChange', this.handleVisibleChange_);
193 },
194
195 initalized_: false,
196
197 /**
198 * Handler for OptionsPage's visible property change event.
199 * @private
200 * @param {Event} e Property change event.
201 */
202 handleVisibleChange_: function(e) {
203 if (!this.initalized_ && this.visible) {
204 this.initalized_ = true;
205 chrome.send('populateCertificateManager');
206 }
207
208 if (cr.isChromeOS) {
209 // Ensure TPM token check on visible and stop polling when hidden.
210 if (this.visible)
211 checkTpmToken();
212 else
213 stopTpmTokenCheckPolling();
214 }
215 }
216 };
217
218 // CertificateManagerHandler callbacks.
219 CertificateManager.onPopulateTree = function(args) {
220 $(args[0]).populate(args[1]);
221 };
222
223 CertificateManager.exportPersonalAskPassword = function(args) {
224 CertificateBackupOverlay.show();
225 };
226
227 CertificateManager.importPersonalAskPassword = function(args) {
228 CertificateRestoreOverlay.show();
229 };
230
231 CertificateManager.onCheckTpmTokenReady = function(ready) {
232 var importAndBindButton = $('personalCertsTab-import-and-bind');
233 if (importAndBindButton) {
234 importAndBindButton.disabled = !ready;
235
236 // Check again after 5 seconds if Tpm is not ready and certificate manager
237 // is still visible.
238 if (!ready && CertificateManager.getInstance().visible)
239 tpmPollingTimer = window.setTimeout(checkTpmToken, 5000);
240 }
241 };
242
243 // Export
244 return {
245 CertificateManagerTab: CertificateManagerTab,
246 CertificateManager: CertificateManager
247 };
248
249 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698