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

Unified Diff: chrome/browser/resources/options2/password_manager.js

Issue 8895023: Options2: Pull the trigger. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DIAF. Created 9 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options2/password_manager.js
diff --git a/chrome/browser/resources/options2/password_manager.js b/chrome/browser/resources/options2/password_manager.js
new file mode 100644
index 0000000000000000000000000000000000000000..273d2c01e472d5a5af17777708c9024463204864
--- /dev/null
+++ b/chrome/browser/resources/options2/password_manager.js
@@ -0,0 +1,228 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+cr.define('options', function() {
+ const OptionsPage = options.OptionsPage;
+ const ArrayDataModel = cr.ui.ArrayDataModel;
+
+ /////////////////////////////////////////////////////////////////////////////
+ // PasswordManager class:
+
+ /**
+ * Encapsulated handling of password and exceptions page.
+ * @constructor
+ */
+ function PasswordManager() {
+ this.activeNavTab = null;
+ OptionsPage.call(this,
+ 'passwords',
+ templateData.passwordsPageTabTitle,
+ 'password-manager');
+ }
+
+ cr.addSingletonGetter(PasswordManager);
+
+ PasswordManager.prototype = {
+ __proto__: OptionsPage.prototype,
+
+ /**
+ * The saved passwords list.
+ * @type {DeletableItemList}
+ * @private
+ */
+ savedPasswordsList_: null,
+
+ /**
+ * The password exceptions list.
+ * @type {DeletableItemList}
+ * @private
+ */
+ passwordExceptionsList_: null,
+
+ /**
+ * The timer id of the timer set on search query change events.
+ * @type {number}
+ * @private
+ */
+ queryDelayTimerId_: 0,
+
+ /**
+ * The most recent search query, or null if the query is empty.
+ * @type {?string}
+ * @private
+ */
+ lastQuery_: null,
+
+ /** @inheritDoc */
+ initializePage: function() {
+ OptionsPage.prototype.initializePage.call(this);
+
+ $('password-search-box').addEventListener('search',
+ this.handleSearchQueryChange_.bind(this));
+
+ this.createSavedPasswordsList_();
+ this.createPasswordExceptionsList_();
+ },
+
+ /** @inheritDoc */
+ canShowPage: function() {
+ return !PersonalOptions.disablePasswordManagement();
+ },
+
+ /** @inheritDoc */
+ didShowPage: function() {
+ // Updating the password lists may cause a blocking platform dialog pop up
+ // (Mac, Linux), so we delay this operation until the page is shown.
+ chrome.send('updatePasswordLists');
+ $('password-search-box').focus();
+ },
+
+ /**
+ * Creates, decorates and initializes the saved passwords list.
+ * @private
+ */
+ createSavedPasswordsList_: function() {
+ this.savedPasswordsList_ = $('saved-passwords-list');
+ options.passwordManager.PasswordsList.decorate(this.savedPasswordsList_);
+ this.savedPasswordsList_.autoExpands = true;
+ },
+
+ /**
+ * Creates, decorates and initializes the password exceptions list.
+ * @private
+ */
+ createPasswordExceptionsList_: function() {
+ this.passwordExceptionsList_ = $('password-exceptions-list');
+ options.passwordManager.PasswordExceptionsList.decorate(
+ this.passwordExceptionsList_);
+ this.passwordExceptionsList_.autoExpands = true;
+ },
+
+ /**
+ * Handles search query changes.
+ * @param {!Event} e The event object.
+ * @private
+ */
+ handleSearchQueryChange_: function(e) {
+ if (this.queryDelayTimerId_)
+ window.clearTimeout(this.queryDelayTimerId_);
+
+ // Searching cookies uses a timeout of 500ms. We use a shorter timeout
+ // because there are probably fewer passwords and we want the UI to be
+ // snappier since users will expect that it's "less work."
+ this.queryDelayTimerId_ = window.setTimeout(
+ this.searchPasswords_.bind(this), 250);
+ },
+
+ /**
+ * Search passwords using text in |password-search-box|.
+ * @private
+ */
+ searchPasswords_: function() {
+ this.queryDelayTimerId_ = 0;
+ var filter = $('password-search-box').value;
+ filter = (filter == '') ? null : filter;
+ if (this.lastQuery_ != filter) {
+ this.lastQuery_ = filter;
+ // Searching for passwords has the side effect of requerying the
+ // underlying password store. This is done intentionally, as on OS X and
+ // Linux they can change from outside and we won't be notified of it.
+ chrome.send('updatePasswordLists');
+ }
+ },
+
+ /**
+ * Updates the visibility of the list and empty list placeholder.
+ * @param {!List} list The list to toggle visilibility for.
+ */
+ updateListVisibility_: function(list) {
+ var empty = list.dataModel.length == 0;
+ var listPlaceHolderID = list.id + '-empty-placeholder';
+ list.hidden = empty;
+ $(listPlaceHolderID).hidden = !empty;
+ },
+
+ /**
+ * Updates the data model for the saved passwords list with the values from
+ * |entries|.
+ * @param {Array} entries The list of saved password data.
+ */
+ setSavedPasswordsList_: function(entries) {
+ if (this.lastQuery_) {
+ // Implement password searching here in javascript, rather than in C++.
+ // The number of saved passwords shouldn't be too big for us to handle.
+ var query = this.lastQuery_;
+ var filter = function(entry, index, list) {
+ // Search both URL and username.
+ if (entry[0].indexOf(query) >= 0 || entry[1].indexOf(query) >= 0) {
+ // Keep the original index so we can delete correctly. See also
+ // deleteItemAtIndex() in password_manager_list.js that uses this.
+ entry[3] = index;
+ return true;
+ }
+ return false;
+ };
+ entries = entries.filter(filter);
+ }
+ this.savedPasswordsList_.dataModel = new ArrayDataModel(entries);
+ this.updateListVisibility_(this.savedPasswordsList_);
+ },
+
+ /**
+ * Updates the data model for the password exceptions list with the values
+ * from |entries|.
+ * @param {Array} entries The list of password exception data.
+ */
+ setPasswordExceptionsList_: function(entries) {
+ this.passwordExceptionsList_.dataModel = new ArrayDataModel(entries);
+ this.updateListVisibility_(this.passwordExceptionsList_);
+ },
+ };
+
+ /**
+ * Call to remove a saved password.
+ * @param rowIndex indicating the row to remove.
+ */
+ PasswordManager.removeSavedPassword = function(rowIndex) {
+ chrome.send('removeSavedPassword', [String(rowIndex)]);
+ };
+
+ /**
+ * Call to remove a password exception.
+ * @param rowIndex indicating the row to remove.
+ */
+ PasswordManager.removePasswordException = function(rowIndex) {
+ chrome.send('removePasswordException', [String(rowIndex)]);
+ };
+
+ /**
+ * Call to remove all saved passwords.
+ * @param tab contentType of the tab currently on.
+ */
+ PasswordManager.removeAllPasswords = function() {
+ chrome.send('removeAllSavedPasswords');
+ };
+
+ /**
+ * Call to remove all saved passwords.
+ * @param tab contentType of the tab currently on.
+ */
+ PasswordManager.removeAllPasswordExceptions = function() {
+ chrome.send('removeAllPasswordExceptions');
+ };
+
+ PasswordManager.setSavedPasswordsList = function(entries) {
+ PasswordManager.getInstance().setSavedPasswordsList_(entries);
+ };
+
+ PasswordManager.setPasswordExceptionsList = function(entries) {
+ PasswordManager.getInstance().setPasswordExceptionsList_(entries);
+ };
+
+ // Export
+ return {
+ PasswordManager: PasswordManager
+ };
+
+});
« no previous file with comments | « chrome/browser/resources/options2/password_manager.html ('k') | chrome/browser/resources/options2/password_manager_list.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698