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 const OptionsPage = options.OptionsPage; 7 8 /** 9 * CertificateEditCaTrustOverlay class 10 * Encapsulated handling of the 'edit ca trust' and 'import ca' overlay pages. 11 * @class 12 */ 13 function CertificateEditCaTrustOverlay() { 14 OptionsPage.call(this, 'certificateEditCaTrustOverlay', 15 '', 16 'certificateEditCaTrustOverlay'); 17 } 18 19 cr.addSingletonGetter(CertificateEditCaTrustOverlay); 20 21 CertificateEditCaTrustOverlay.prototype = { 22 __proto__: OptionsPage.prototype, 23 24 /** 25 * Dismisses the overlay. 26 * @private 27 */ 28 dismissOverlay_: function() { 29 OptionsPage.closeOverlay(); 30 }, 31 32 /** 33 * Enables or disables input fields. 34 * @private 35 */ 36 enableInputs_: function(enabled) { 37 $('certificateCaTrustSSLCheckbox').disabled = 38 $('certificateCaTrustEmailCheckbox').disabled = 39 $('certificateCaTrustObjSignCheckbox').disabled = 40 $('certificateEditCaTrustCancelButton').disabled = 41 $('certificateEditCaTrustOkButton').disabled = !enabled; 42 }, 43 44 /** 45 * Attempt the Edit operation. 46 * The overlay will be left up with inputs disabled until the backend 47 * finishes and dismisses it. 48 * @private 49 */ 50 finishEdit_: function() { 51 // TODO(mattm): Send checked values as booleans. For now send them as 52 // strings, since WebUIBindings::send does not support any other types :( 53 chrome.send('editCaCertificateTrust', 54 [this.certId, 55 $('certificateCaTrustSSLCheckbox').checked.toString(), 56 $('certificateCaTrustEmailCheckbox').checked.toString(), 57 $('certificateCaTrustObjSignCheckbox').checked.toString()]); 58 this.enableInputs_(false); 59 }, 60 61 /** 62 * Cancel the Edit operation. 63 * @private 64 */ 65 cancelEdit_: function() { 66 this.dismissOverlay_(); 67 }, 68 69 /** 70 * Attempt the Import operation. 71 * The overlay will be left up with inputs disabled until the backend 72 * finishes and dismisses it. 73 * @private 74 */ 75 finishImport_: function() { 76 // TODO(mattm): Send checked values as booleans. For now send them as 77 // strings, since WebUIBindings::send does not support any other types :( 78 chrome.send('importCaCertificateTrustSelected', 79 [$('certificateCaTrustSSLCheckbox').checked.toString(), 80 $('certificateCaTrustEmailCheckbox').checked.toString(), 81 $('certificateCaTrustObjSignCheckbox').checked.toString()]); 82 this.enableInputs_(false); 83 }, 84 85 /** 86 * Cancel the Import operation. 87 * @private 88 */ 89 cancelImport_: function() { 90 chrome.send('cancelImportExportCertificate'); 91 this.dismissOverlay_(); 92 }, 93 }; 94 95 /** 96 * Callback from CertificateManagerHandler with the trust values. 97 * @param {boolean} trustSSL The initial value of SSL trust checkbox. 98 * @param {boolean} trustEmail The initial value of Email trust checkbox. 99 * @param {boolean} trustObjSign The initial value of Object Signing trust 100 */ 101 CertificateEditCaTrustOverlay.populateTrust = function( 102 trustSSL, trustEmail, trustObjSign) { 103 $('certificateCaTrustSSLCheckbox').checked = trustSSL; 104 $('certificateCaTrustEmailCheckbox').checked = trustEmail; 105 $('certificateCaTrustObjSignCheckbox').checked = trustObjSign; 106 CertificateEditCaTrustOverlay.getInstance().enableInputs_(true); 107 } 108 109 /** 110 * Show the Edit CA Trust overlay. 111 * @param {string} certId The id of the certificate to be passed to the 112 * certificate manager model. 113 * @param {string} certName The display name of the certificate. 114 * checkbox. 115 */ 116 CertificateEditCaTrustOverlay.show = function(certId, certName) { 117 var self = CertificateEditCaTrustOverlay.getInstance(); 118 self.certId = certId; 119 $('certificateEditCaTrustCancelButton').onclick = function(event) { 120 self.cancelEdit_(); 121 } 122 $('certificateEditCaTrustOkButton').onclick = function(event) { 123 self.finishEdit_(); 124 } 125 $('certificateEditCaTrustDescription').textContent = 126 localStrings.getStringF('certificateEditCaTrustDescriptionFormat', 127 certName); 128 self.enableInputs_(false); 129 OptionsPage.navigateToPage('certificateEditCaTrustOverlay'); 130 chrome.send('getCaCertificateTrust', [certId]); 131 } 132 133 /** 134 * Show the Import CA overlay. 135 * @param {string} certId The id of the certificate to be passed to the 136 * certificate manager model. 137 * @param {string} certName The display name of the certificate. 138 * checkbox. 139 */ 140 CertificateEditCaTrustOverlay.showImport = function(certName) { 141 var self = CertificateEditCaTrustOverlay.getInstance(); 142 // TODO(mattm): do we want a view certificate button here like firefox has? 143 $('certificateEditCaTrustCancelButton').onclick = function(event) { 144 self.cancelImport_(); 145 } 146 $('certificateEditCaTrustOkButton').onclick = function(event) { 147 self.finishImport_(); 148 } 149 $('certificateEditCaTrustDescription').textContent = 150 localStrings.getStringF('certificateImportCaDescriptionFormat', 151 certName); 152 CertificateEditCaTrustOverlay.populateTrust(false, false, false); 153 OptionsPage.navigateToPage('certificateEditCaTrustOverlay'); 154 } 155 156 CertificateEditCaTrustOverlay.dismiss = function() { 157 CertificateEditCaTrustOverlay.getInstance().dismissOverlay_(); 158 }; 159 160 // Export 161 return { 162 CertificateEditCaTrustOverlay: CertificateEditCaTrustOverlay 163 }; 164 }); 165