| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 cr.define('options.passwordManager', function() { | 5 cr.define('options.passwordManager', function() { | 
| 6   const ArrayDataModel = cr.ui.ArrayDataModel; | 6   const ArrayDataModel = cr.ui.ArrayDataModel; | 
| 7   const DeletableItemList = options.DeletableItemList; | 7   const DeletableItemList = options.DeletableItemList; | 
| 8   const DeletableItem = options.DeletableItem; | 8   const DeletableItem = options.DeletableItem; | 
| 9   const List = cr.ui.List; | 9   const List = cr.ui.List; | 
| 10 | 10 | 
| 11   /** | 11   /** | 
| 12    * Creates a new passwords list item. | 12    * Creates a new passwords list item. | 
| 13    * @param {Array} entry An array of the form [url, username, password]. | 13    * @param {Array} entry An array of the form [url, username, password]. | 
| 14    * @constructor | 14    * @constructor | 
| 15    * @extends {cr.ui.ListItem} | 15    * @extends {cr.ui.ListItem} | 
| 16    */ | 16    */ | 
| 17   function PasswordListItem(entry) { | 17   function PasswordListItem(entry, showPasswords) { | 
| 18     var el = cr.doc.createElement('div'); | 18     var el = cr.doc.createElement('div'); | 
| 19     el.dataItem = entry; | 19     el.dataItem = entry; | 
| 20     el.__proto__ = PasswordListItem.prototype; | 20     el.__proto__ = PasswordListItem.prototype; | 
| 21     el.decorate(); | 21     el.decorate(showPasswords); | 
| 22 | 22 | 
| 23     return el; | 23     return el; | 
| 24   } | 24   } | 
| 25 | 25 | 
| 26   PasswordListItem.prototype = { | 26   PasswordListItem.prototype = { | 
| 27     __proto__: DeletableItem.prototype, | 27     __proto__: DeletableItem.prototype, | 
| 28 | 28 | 
| 29     /** @inheritDoc */ | 29     /** @inheritDoc */ | 
| 30     decorate: function() { | 30     decorate: function(showPasswords) { | 
| 31       DeletableItem.prototype.decorate.call(this); | 31       DeletableItem.prototype.decorate.call(this); | 
| 32 | 32 | 
| 33       // The URL of the site. | 33       // The URL of the site. | 
| 34       var urlLabel = this.ownerDocument.createElement('div'); | 34       var urlLabel = this.ownerDocument.createElement('div'); | 
| 35       urlLabel.classList.add('favicon-cell'); | 35       urlLabel.classList.add('favicon-cell'); | 
| 36       urlLabel.classList.add('url'); | 36       urlLabel.classList.add('url'); | 
| 37       urlLabel.textContent = this.url; | 37       urlLabel.textContent = this.url; | 
| 38       urlLabel.style.backgroundImage = url('chrome://favicon/' + this.url); | 38       urlLabel.style.backgroundImage = url('chrome://favicon/' + this.url); | 
| 39       this.contentElement.appendChild(urlLabel); | 39       this.contentElement.appendChild(urlLabel); | 
| 40 | 40 | 
| 41       // The stored username. | 41       // The stored username. | 
| 42       var usernameLabel = this.ownerDocument.createElement('div'); | 42       var usernameLabel = this.ownerDocument.createElement('div'); | 
| 43       usernameLabel.className = 'name'; | 43       usernameLabel.className = 'name'; | 
| 44       usernameLabel.textContent = this.username; | 44       usernameLabel.textContent = this.username; | 
| 45       this.contentElement.appendChild(usernameLabel); | 45       this.contentElement.appendChild(usernameLabel); | 
| 46 | 46 | 
| 47       // The stored password. | 47       // The stored password. | 
| 48       var passwordInputDiv = this.ownerDocument.createElement('div'); | 48       var passwordInputDiv = this.ownerDocument.createElement('div'); | 
| 49       passwordInputDiv.className = 'password'; | 49       passwordInputDiv.className = 'password'; | 
| 50 | 50 | 
| 51       // The password input field. | 51       // The password input field. | 
| 52       var passwordInput = this.ownerDocument.createElement('input'); | 52       var passwordInput = this.ownerDocument.createElement('input'); | 
| 53       passwordInput.type = 'password'; | 53       passwordInput.type = 'password'; | 
| 54       passwordInput.className = 'inactive-password'; | 54       passwordInput.className = 'inactive-password'; | 
| 55       passwordInput.readOnly = true; | 55       passwordInput.readOnly = true; | 
| 56       passwordInput.value = this.password; | 56       passwordInput.value = showPasswords ? this.password : "********"; | 
| 57       passwordInputDiv.appendChild(passwordInput); | 57       passwordInputDiv.appendChild(passwordInput); | 
| 58 | 58 | 
| 59       // The show/hide button. | 59       // The show/hide button. | 
| 60       var button = this.ownerDocument.createElement('button'); | 60       if (showPasswords) { | 
| 61       button.classList.add('hidden'); | 61         var button = this.ownerDocument.createElement('button'); | 
| 62       button.classList.add('password-button'); | 62         button.classList.add('hidden'); | 
| 63       button.textContent = localStrings.getString('passwordShowButton'); | 63         button.classList.add('password-button'); | 
| 64       button.addEventListener('click', this.onClick_, true); | 64         button.textContent = localStrings.getString('passwordShowButton'); | 
| 65       passwordInputDiv.appendChild(button); | 65         button.addEventListener('click', this.onClick_, true); | 
|  | 66         passwordInputDiv.appendChild(button); | 
|  | 67       } | 
| 66 | 68 | 
| 67       this.contentElement.appendChild(passwordInputDiv); | 69       this.contentElement.appendChild(passwordInputDiv); | 
| 68     }, | 70     }, | 
| 69 | 71 | 
| 70     /** @inheritDoc */ | 72     /** @inheritDoc */ | 
| 71     selectionChanged: function() { | 73     selectionChanged: function() { | 
| 72       var passwordInput = this.querySelector('input[type=password]'); | 74       var passwordInput = this.querySelector('input[type=password]'); | 
| 73       var textInput = this.querySelector('input[type=text]'); | 75       var textInput = this.querySelector('input[type=text]'); | 
| 74       var input = passwordInput || textInput; | 76       var input = passwordInput || textInput; | 
| 75       var button = input.nextSibling; | 77       var button = input.nextSibling; | 
|  | 78       // |button| doesn't exist when passwords can't be shown. | 
|  | 79       if (!button) | 
|  | 80         return; | 
| 76       if (this.selected) { | 81       if (this.selected) { | 
| 77         input.classList.remove('inactive-password'); | 82         input.classList.remove('inactive-password'); | 
| 78         button.classList.remove('hidden'); | 83         button.classList.remove('hidden'); | 
| 79       } else { | 84       } else { | 
| 80         input.classList.add('inactive-password'); | 85         input.classList.add('inactive-password'); | 
| 81         button.classList.add('hidden'); | 86         button.classList.add('hidden'); | 
| 82       } | 87       } | 
| 83     }, | 88     }, | 
| 84 | 89 | 
| 85     /** | 90     /** | 
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 182   /** | 187   /** | 
| 183    * Create a new passwords list. | 188    * Create a new passwords list. | 
| 184    * @constructor | 189    * @constructor | 
| 185    * @extends {cr.ui.List} | 190    * @extends {cr.ui.List} | 
| 186    */ | 191    */ | 
| 187   var PasswordsList = cr.ui.define('list'); | 192   var PasswordsList = cr.ui.define('list'); | 
| 188 | 193 | 
| 189   PasswordsList.prototype = { | 194   PasswordsList.prototype = { | 
| 190     __proto__: DeletableItemList.prototype, | 195     __proto__: DeletableItemList.prototype, | 
| 191 | 196 | 
|  | 197     /** | 
|  | 198      * Whether passwords can be revealed or not. | 
|  | 199      * @type {boolean} | 
|  | 200      * @private | 
|  | 201      */ | 
|  | 202     showPasswords_: true, | 
|  | 203 | 
| 192     /** @inheritDoc */ | 204     /** @inheritDoc */ | 
| 193     createItem: function(entry) { | 205     decorate: function() { | 
| 194       return new PasswordListItem(entry); | 206       DeletableItemList.prototype.decorate.call(this); | 
|  | 207       Preferences.getInstance().addEventListener( | 
|  | 208           "profile.password_manager_allow_show_passwords", | 
|  | 209           this.onPreferenceChanged_.bind(this)); | 
|  | 210     }, | 
|  | 211 | 
|  | 212     /** | 
|  | 213      * Listener for changes on the preference. | 
|  | 214      * @param {Event} event The preference update event. | 
|  | 215      * @private | 
|  | 216      */ | 
|  | 217     onPreferenceChanged_: function(event) { | 
|  | 218       this.showPasswords_ = event.value.value; | 
|  | 219       this.redraw(); | 
| 195     }, | 220     }, | 
| 196 | 221 | 
| 197     /** @inheritDoc */ | 222     /** @inheritDoc */ | 
|  | 223     createItem: function(entry) { | 
|  | 224       return new PasswordListItem(entry, this.showPasswords_); | 
|  | 225     }, | 
|  | 226 | 
|  | 227     /** @inheritDoc */ | 
| 198     deleteItemAtIndex: function(index) { | 228     deleteItemAtIndex: function(index) { | 
| 199       PasswordManager.removeSavedPassword(index); | 229       PasswordManager.removeSavedPassword(index); | 
| 200     }, | 230     }, | 
| 201 | 231 | 
| 202     /** | 232     /** | 
| 203      * The length of the list. | 233      * The length of the list. | 
| 204      */ | 234      */ | 
| 205     get length() { | 235     get length() { | 
| 206       return this.dataModel.length; | 236       return this.dataModel.length; | 
| 207     }, | 237     }, | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 235     }, | 265     }, | 
| 236   }; | 266   }; | 
| 237 | 267 | 
| 238   return { | 268   return { | 
| 239     PasswordListItem: PasswordListItem, | 269     PasswordListItem: PasswordListItem, | 
| 240     PasswordExceptionsListItem: PasswordExceptionsListItem, | 270     PasswordExceptionsListItem: PasswordExceptionsListItem, | 
| 241     PasswordsList: PasswordsList, | 271     PasswordsList: PasswordsList, | 
| 242     PasswordExceptionsList: PasswordExceptionsList, | 272     PasswordExceptionsList: PasswordExceptionsList, | 
| 243   }; | 273   }; | 
| 244 }); | 274 }); | 
| OLD | NEW | 
|---|