172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsencr.define('options', function() {
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  var OptionsPage = options.OptionsPage;
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /////////////////////////////////////////////////////////////////////////////
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // CertificateManagerTab class:
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /**
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * blah
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @param {!string} id The id of this tab.
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  function CertificateManagerTab(id) {
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    this.tree = $(id + '-tree');
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    options.CertificatesTree.decorate(this.tree);
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    this.tree.addEventListener('change',
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        this.handleCertificatesTreeChange_.bind(this));
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    var tree = this.tree;
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    this.viewButton = $(id + '-view');
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    this.viewButton.onclick = function(e) {
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var selected = tree.selectedItem;
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      chrome.send('viewCertificate', [selected.data.id]);
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.editButton = $(id + '-edit');
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (this.editButton !== null) {
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (id == 'serverCertsTab') {
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.editButton.onclick = function(e) {
35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          var selected = tree.selectedItem;
36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          chrome.send('editServerCertificate', [selected.data.id]);
37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        }
38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      } else if (id == 'caCertsTab') {
39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.editButton.onclick = function(e) {
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          var data = tree.selectedItem.data;
41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          CertificateEditCaTrustOverlay.show(data.id, data.name);
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        }
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.backupButton = $(id + '-backup');
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (this.backupButton !== null) {
48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.backupButton.onclick = function(e) {
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        var selected = tree.selectedItem;
50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        chrome.send('exportPersonalCertificate', [selected.data.id]);
51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.backupAllButton = $(id + '-backup-all');
55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (this.backupAllButton !== null) {
56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.backupAllButton.onclick = function(e) {
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        chrome.send('exportAllPersonalCertificates', []);
58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.importButton = $(id + '-import');
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (this.importButton !== null) {
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (id == 'personalCertsTab') {
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.importButton.onclick = function(e) {
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          chrome.send('importPersonalCertificate', [false]);
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        }
67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      } else if (id == 'serverCertsTab') {
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.importButton.onclick = function(e) {
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          chrome.send('importServerCertificate', []);
70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        }
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      } else if (id == 'caCertsTab') {
72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.importButton.onclick = function(e) {
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          chrome.send('importCaCertificate', []);
74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        }
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    this.importAndBindButton = $(id + '-import-and-bind');
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (this.importAndBindButton !== null) {
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      if (id == 'personalCertsTab') {
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        this.importAndBindButton.onclick = function(e) {
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          chrome.send('importPersonalCertificate', [true]);
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        }
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      }
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.exportButton = $(id + '-export');
88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (this.exportButton !== null) {
89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.exportButton.onclick = function(e) {
90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        var selected = tree.selectedItem;
91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        chrome.send('exportCertificate', [selected.data.id]);
92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.deleteButton = $(id + '-delete');
96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    this.deleteButton.onclick = function(e) {
97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      var data = tree.selectedItem.data;
98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      AlertOverlay.show(
99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          localStrings.getStringF(id + 'DeleteConfirm', data.name),
100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          localStrings.getString(id + 'DeleteImpact'),
10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          localStrings.getString('ok'),
10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          localStrings.getString('cancel'),
10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          function() { chrome.send('deleteCertificate', [data.id]); });
104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  CertificateManagerTab.prototype = {
108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /**
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * Update button state.
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @private
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {!Object} data The data of the selected item.
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     */
114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    updateButtonState: function(data) {
115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var isCert = !!data && data.id.substr(0, 5) == 'cert-';
116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var readOnly = !!data && data.readonly;
117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      var hasChildren = this.tree.items.length > 0;
118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.viewButton.disabled = !isCert;
119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (this.editButton !== null)
120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.editButton.disabled = !isCert;
121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (this.backupButton !== null)
122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.backupButton.disabled = !isCert;
123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (this.backupAllButton !== null)
124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.backupAllButton.disabled = !hasChildren;
125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (this.exportButton !== null)
126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        this.exportButton.disabled = !isCert;
127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      this.deleteButton.disabled = !isCert || readOnly;
128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /**
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * Handles certificate tree selection change.
132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @private
133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {!Event} e The change event object.
134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     */
135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    handleCertificatesTreeChange_: function(e) {
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var data = null;
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (this.tree.selectedItem) {
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        data = this.tree.selectedItem.data;
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.updateButtonState(data);
142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(xiyuan): Use notification from backend instead of polling.
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TPM token check polling timer.
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  var tpmPollingTimer;
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Initiate tpm token check if needed.
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  function checkTpmToken() {
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    var importAndBindButton = $('personalCertsTab-import-and-bind');
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (importAndBindButton && importAndBindButton.disabled)
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      chrome.send('checkTpmTokenReady');
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Stop tpm polling timer.
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  function stopTpmTokenCheckPolling() {
160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (tpmPollingTimer) {
161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      window.clearTimeout(tpmPollingTimer);
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      tpmPollingTimer = undefined;
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /////////////////////////////////////////////////////////////////////////////
167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // CertificateManager class:
168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /**
170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Encapsulated handling of ChromeOS accounts options page.
171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @constructor
172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  function CertificateManager(model) {
174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    OptionsPage.call(this, 'certificates',
17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     templateData.certificateManagerPageTabTitle,
176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     'certificateManagerPage');
177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  cr.addSingletonGetter(CertificateManager);
180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  CertificateManager.prototype = {
182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    __proto__: OptionsPage.prototype,
183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    initializePage: function() {
185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      OptionsPage.prototype.initializePage.call(this);
186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.personalTab = new CertificateManagerTab('personalCertsTab');
188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.serverTab = new CertificateManagerTab('serverCertsTab');
189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.caTab = new CertificateManagerTab('caCertsTab');
190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.otherTab = new CertificateManagerTab('otherCertsTab');
191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.addEventListener('visibleChange', this.handleVisibleChange_);
193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    initalized_: false,
196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /**
198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * Handler for OptionsPage's visible property change event.
199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @private
200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {Event} e Property change event.
201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     */
202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    handleVisibleChange_: function(e) {
203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (!this.initalized_ && this.visible) {
204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        this.initalized_ = true;
205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        chrome.send('populateCertificateManager');
206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      if (cr.isChromeOS) {
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        // Ensure TPM token check on visible and stop polling when hidden.
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        if (this.visible)
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          checkTpmToken();
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        else
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          stopTpmTokenCheckPolling();
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      }
215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // CertificateManagerHandler callbacks.
219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  CertificateManager.onPopulateTree = function(args) {
220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    $(args[0]).populate(args[1]);
221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  CertificateManager.exportPersonalAskPassword = function(args) {
224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    CertificateBackupOverlay.show();
225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  };
226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
227731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  CertificateManager.importPersonalAskPassword = function(args) {
228731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    CertificateRestoreOverlay.show();
229731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  };
230731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  CertificateManager.onCheckTpmTokenReady = function(ready) {
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    var importAndBindButton = $('personalCertsTab-import-and-bind');
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (importAndBindButton) {
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      importAndBindButton.disabled = !ready;
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      // Check again after 5 seconds if Tpm is not ready and certificate manager
237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      // is still visible.
238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      if (!ready && CertificateManager.getInstance().visible)
239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        tpmPollingTimer = window.setTimeout(checkTpmToken, 5000);
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Export
244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return {
245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    CertificateManagerTab: CertificateManagerTab,
246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    CertificateManager: CertificateManager
247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen});
250