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

Side by Side Diff: chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.js

Issue 2627123002: Load Passwords and Autofill in the corresponding sub page. (Closed)
Patch Set: rebase Created 3 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 /** 5 /**
6 * @fileoverview 'settings-passwords-and-forms-page' is the settings page 6 * @fileoverview 'settings-passwords-and-forms-page' is the settings page
7 * for passwords and auto fill. 7 * for passwords and auto fill.
8 */ 8 */
9 9
10 /**
11 * Interface for all callbacks to the password API.
12 * @interface
13 */
14 function PasswordManager() {}
15
16 /** @typedef {chrome.passwordsPrivate.PasswordUiEntry} */
17 PasswordManager.PasswordUiEntry;
18
19 /** @typedef {chrome.passwordsPrivate.LoginPair} */
20 PasswordManager.LoginPair;
21
22 /** @typedef {chrome.passwordsPrivate.ExceptionPair} */
23 PasswordManager.ExceptionPair;
24
25 /** @typedef {chrome.passwordsPrivate.PlaintextPasswordEventParameters} */
26 PasswordManager.PlaintextPasswordEvent;
27
28 PasswordManager.prototype = {
29 /**
30 * Add an observer to the list of saved passwords.
31 * @param {function(!Array<!PasswordManager.PasswordUiEntry>):void} listener
32 */
33 addSavedPasswordListChangedListener: assertNotReached,
34
35 /**
36 * Remove an observer from the list of saved passwords.
37 * @param {function(!Array<!PasswordManager.PasswordUiEntry>):void} listener
38 */
39 removeSavedPasswordListChangedListener: assertNotReached,
40
41 /**
42 * Request the list of saved passwords.
43 * @param {function(!Array<!PasswordManager.PasswordUiEntry>):void} callback
44 */
45 getSavedPasswordList: assertNotReached,
46
47 /**
48 * Should remove the saved password and notify that the list has changed.
49 * @param {!PasswordManager.LoginPair} loginPair The saved password that
50 * should be removed from the list. No-op if |loginPair| is not found.
51 */
52 removeSavedPassword: assertNotReached,
53
54 /**
55 * Add an observer to the list of password exceptions.
56 * @param {function(!Array<!PasswordManager.ExceptionPair>):void} listener
57 */
58 addExceptionListChangedListener: assertNotReached,
59
60 /**
61 * Remove an observer from the list of password exceptions.
62 * @param {function(!Array<!PasswordManager.ExceptionPair>):void} listener
63 */
64 removeExceptionListChangedListener: assertNotReached,
65
66 /**
67 * Request the list of password exceptions.
68 * @param {function(!Array<!PasswordManager.ExceptionPair>):void} callback
69 */
70 getExceptionList: assertNotReached,
71
72 /**
73 * Should remove the password exception and notify that the list has changed.
74 * @param {string} exception The exception that should be removed from the
75 * list. No-op if |exception| is not in the list.
76 */
77 removeException: assertNotReached,
78
79 /**
80 * Gets the saved password for a given login pair.
81 * @param {!PasswordManager.LoginPair} loginPair The saved password that
82 * should be retrieved.
83 * @param {function(!PasswordManager.PlaintextPasswordEvent):void} callback
84 */
85 getPlaintextPassword: assertNotReached,
86 };
87
88 /**
89 * Interface for all callbacks to the autofill API.
90 * @interface
91 */
92 function AutofillManager() {}
93
94 /** @typedef {chrome.autofillPrivate.AddressEntry} */
95 AutofillManager.AddressEntry;
96
97 /** @typedef {chrome.autofillPrivate.CreditCardEntry} */
98 AutofillManager.CreditCardEntry;
99
100 AutofillManager.prototype = {
101 /**
102 * Add an observer to the list of addresses.
103 * @param {function(!Array<!AutofillManager.AddressEntry>):void} listener
104 */
105 addAddressListChangedListener: assertNotReached,
106
107 /**
108 * Remove an observer from the list of addresses.
109 * @param {function(!Array<!AutofillManager.AddressEntry>):void} listener
110 */
111 removeAddressListChangedListener: assertNotReached,
112
113 /**
114 * Request the list of addresses.
115 * @param {function(!Array<!AutofillManager.AddressEntry>):void} callback
116 */
117 getAddressList: assertNotReached,
118
119 /**
120 * Saves the given address.
121 * @param {!AutofillManager.AddressEntry} address
122 */
123 saveAddress: assertNotReached,
124
125 /** @param {string} guid The guid of the address to remove. */
126 removeAddress: assertNotReached,
127
128 /**
129 * Add an observer to the list of credit cards.
130 * @param {function(!Array<!AutofillManager.CreditCardEntry>):void} listener
131 */
132 addCreditCardListChangedListener: assertNotReached,
133
134 /**
135 * Remove an observer from the list of credit cards.
136 * @param {function(!Array<!AutofillManager.CreditCardEntry>):void} listener
137 */
138 removeCreditCardListChangedListener: assertNotReached,
139
140 /**
141 * Request the list of credit cards.
142 * @param {function(!Array<!AutofillManager.CreditCardEntry>):void} callback
143 */
144 getCreditCardList: assertNotReached,
145
146 /** @param {string} guid The GUID of the credit card to remove. */
147 removeCreditCard: assertNotReached,
148
149 /** @param {string} guid The GUID to credit card to remove from the cache. */
150 clearCachedCreditCard: assertNotReached,
151
152 /**
153 * Saves the given credit card.
154 * @param {!AutofillManager.CreditCardEntry} creditCard
155 */
156 saveCreditCard: assertNotReached,
157 };
158
159 /**
160 * Implementation that accesses the private API.
161 * @implements {PasswordManager}
162 * @constructor
163 */
164 function PasswordManagerImpl() {}
165 cr.addSingletonGetter(PasswordManagerImpl);
166
167 PasswordManagerImpl.prototype = {
168 __proto__: PasswordManager,
169
170 /** @override */
171 addSavedPasswordListChangedListener: function(listener) {
172 chrome.passwordsPrivate.onSavedPasswordsListChanged.addListener(listener);
173 },
174
175 /** @override */
176 removeSavedPasswordListChangedListener: function(listener) {
177 chrome.passwordsPrivate.onSavedPasswordsListChanged.removeListener(
178 listener);
179 },
180
181 /** @override */
182 getSavedPasswordList: function(callback) {
183 chrome.passwordsPrivate.getSavedPasswordList(callback);
184 },
185
186 /** @override */
187 removeSavedPassword: function(loginPair) {
188 chrome.passwordsPrivate.removeSavedPassword(loginPair);
189 },
190
191 /** @override */
192 addExceptionListChangedListener: function(listener) {
193 chrome.passwordsPrivate.onPasswordExceptionsListChanged.addListener(
194 listener);
195 },
196
197 /** @override */
198 removeExceptionListChangedListener: function(listener) {
199 chrome.passwordsPrivate.onPasswordExceptionsListChanged.removeListener(
200 listener);
201 },
202
203 /** @override */
204 getExceptionList: function(callback) {
205 chrome.passwordsPrivate.getPasswordExceptionList(callback);
206 },
207
208 /** @override */
209 removeException: function(exception) {
210 chrome.passwordsPrivate.removePasswordException(exception);
211 },
212
213 /** @override */
214 getPlaintextPassword: function(loginPair, callback) {
215 var listener = function(reply) {
216 // Only handle the reply for our loginPair request.
217 if (reply.loginPair.originUrl == loginPair.originUrl &&
218 reply.loginPair.username == loginPair.username) {
219 chrome.passwordsPrivate.onPlaintextPasswordRetrieved.removeListener(
220 listener);
221 callback(reply);
222 }
223 };
224 chrome.passwordsPrivate.onPlaintextPasswordRetrieved.addListener(listener);
225 chrome.passwordsPrivate.requestPlaintextPassword(loginPair);
226 },
227 };
228
229 /**
230 * Implementation that accesses the private API.
231 * @implements {AutofillManager}
232 * @constructor
233 */
234 function AutofillManagerImpl() {}
235 cr.addSingletonGetter(AutofillManagerImpl);
236
237 AutofillManagerImpl.prototype = {
238 __proto__: AutofillManager,
239
240 /** @override */
241 addAddressListChangedListener: function(listener) {
242 chrome.autofillPrivate.onAddressListChanged.addListener(listener);
243 },
244
245 /** @override */
246 removeAddressListChangedListener: function(listener) {
247 chrome.autofillPrivate.onAddressListChanged.removeListener(listener);
248 },
249
250 /** @override */
251 getAddressList: function(callback) {
252 chrome.autofillPrivate.getAddressList(callback);
253 },
254
255 /** @override */
256 saveAddress: function(address) {
257 chrome.autofillPrivate.saveAddress(address);
258 },
259
260 /** @override */
261 removeAddress: function(guid) {
262 assert(guid);
263 chrome.autofillPrivate.removeEntry(guid);
264 },
265
266 /** @override */
267 addCreditCardListChangedListener: function(listener) {
268 chrome.autofillPrivate.onCreditCardListChanged.addListener(listener);
269 },
270
271 /** @override */
272 removeCreditCardListChangedListener: function(listener) {
273 chrome.autofillPrivate.onCreditCardListChanged.removeListener(listener);
274 },
275
276 /** @override */
277 getCreditCardList: function(callback) {
278 chrome.autofillPrivate.getCreditCardList(callback);
279 },
280
281 /** @override */
282 removeCreditCard: function(guid) {
283 assert(guid);
284 chrome.autofillPrivate.removeEntry(guid);
285 },
286
287 /** @override */
288 clearCachedCreditCard: function(guid) {
289 assert(guid);
290 chrome.autofillPrivate.maskCreditCard(guid);
291 },
292
293 /** @override */
294 saveCreditCard: function(creditCard) {
295 chrome.autofillPrivate.saveCreditCard(creditCard);
296 }
297 };
298
299 (function() { 10 (function() {
300 'use strict'; 11 'use strict';
301 12
302 Polymer({ 13 Polymer({
303 is: 'settings-passwords-and-forms-page', 14 is: 'settings-passwords-and-forms-page',
304 15
305 behaviors: [PrefsBehavior], 16 behaviors: [PrefsBehavior],
306 17
307 properties: { 18 properties: {
308 /**
309 * An array of passwords to display.
310 * @type {!Array<!PasswordManager.PasswordUiEntry>}
311 */
312 savedPasswords: Array,
313
314 /**
315 * An array of sites to display.
316 * @type {!Array<!PasswordManager.ExceptionPair>}
317 */
318 passwordExceptions: Array,
319
320 /** @private Filter applied to passwords and password exceptions. */ 19 /** @private Filter applied to passwords and password exceptions. */
321 passwordFilter_: String, 20 passwordFilter_: String,
322
323 /**
324 * An array of saved addresses.
325 * @type {!Array<!AutofillManager.AddressEntry>}
326 */
327 addresses: Array,
328
329 /**
330 * An array of saved addresses.
331 * @type {!Array<!AutofillManager.CreditCardEntry>}
332 */
333 creditCards: Array,
334 },
335
336 listeners: {
337 'clear-credit-card': 'clearCreditCard_',
338 'remove-address': 'removeAddress_',
339 'remove-credit-card': 'removeCreditCard_',
340 'remove-password-exception': 'removePasswordException_',
341 'remove-saved-password': 'removeSavedPassword_',
342 'save-address': 'saveAddress_',
343 'save-credit-card': 'saveCreditCard_',
344 'show-password': 'showPassword_',
345 },
346
347 /** @type {?function(!Array<PasswordManager.PasswordUiEntry>):void} */
348 setSavedPasswordsListener_: null,
349
350 /** @type {?function(!Array<PasswordManager.ExceptionPair>):void} */
351 setPasswordExceptionsListener_: null,
352
353 /** @type {?function(!Array<!AutofillManager.AddressEntry>)} */
354 setAddressesListener_: null,
355
356 /** @type {?function(!Array<!AutofillManager.CreditCardEntry>)} */
357 setCreditCardsListener_: null,
358
359 /** @override */
360 ready: function() {
361 // Create listener functions.
362 this.setSavedPasswordsListener_ = function(list) {
363 this.savedPasswords = list;
364 }.bind(this);
365
366 this.setPasswordExceptionsListener_ = function(list) {
367 this.passwordExceptions = list;
368 }.bind(this);
369
370 this.setAddressesListener_ = function(list) {
371 this.addresses = list;
372 }.bind(this);
373
374 this.setCreditCardsListener_ = function(list) {
375 this.creditCards = list;
376 }.bind(this);
377
378 // Set the managers. These can be overridden by tests.
379 this.passwordManager_ = PasswordManagerImpl.getInstance();
380 this.autofillManager_ = AutofillManagerImpl.getInstance();
381
382 // Request initial data.
383 this.passwordManager_.getSavedPasswordList(this.setSavedPasswordsListener_);
384 this.passwordManager_.getExceptionList(this.setPasswordExceptionsListener_);
385 this.autofillManager_.getAddressList(this.setAddressesListener_);
386 this.autofillManager_.getCreditCardList(this.setCreditCardsListener_);
387
388 // Listen for changes.
389 this.passwordManager_.addSavedPasswordListChangedListener(
390 this.setSavedPasswordsListener_);
391 this.passwordManager_.addExceptionListChangedListener(
392 this.setPasswordExceptionsListener_);
393 this.autofillManager_.addAddressListChangedListener(
394 this.setAddressesListener_);
395 this.autofillManager_.addCreditCardListChangedListener(
396 this.setCreditCardsListener_);
397 },
398
399 /** @override */
400 detached: function() {
401 this.passwordManager_.removeSavedPasswordListChangedListener(
402 this.setSavedPasswordsListener_);
403 this.passwordManager_.removeExceptionListChangedListener(
404 this.setPasswordExceptionsListener_);
405 this.autofillManager_.removeAddressListChangedListener(
406 this.setAddressesListener_);
407 this.autofillManager_.removeCreditCardListChangedListener(
408 this.setCreditCardsListener_);
409 }, 21 },
410 22
411 /** 23 /**
412 * Listens for the remove-password-exception event, and calls the private API.
413 * @param {!Event} event
414 * @private
415 */
416 removePasswordException_: function(event) {
417 this.passwordManager_.removeException(event.detail);
418 },
419
420 /**
421 * Listens for the remove-saved-password event, and calls the private API.
422 * @param {!Event} event
423 * @private
424 */
425 removeSavedPassword_: function(event) {
426 this.passwordManager_.removeSavedPassword(event.detail);
427 },
428
429 /**
430 * Listens for the remove-address event, and calls the private API.
431 * @param {!Event} event
432 * @private
433 */
434 removeAddress_: function(event) {
435 this.autofillManager_.removeAddress(event.detail.guid);
436 },
437
438 /**
439 * Listens for the remove-credit-card event, and calls the private API.
440 * @param {!Event} event
441 * @private
442 */
443 removeCreditCard_: function(event) {
444 this.autofillManager_.removeCreditCard(event.detail.guid);
445 },
446
447 /**
448 * Listens for the clear-credit-card event, and calls the private API.
449 * @param {!Event} event
450 * @private
451 */
452 clearCreditCard_: function(event) {
453 this.autofillManager_.clearCachedCreditCard(event.detail.guid);
454 },
455
456 /**
457 * Shows the manage autofill sub page. 24 * Shows the manage autofill sub page.
458 * @param {!Event} event 25 * @param {!Event} event
459 * @private 26 * @private
460 */ 27 */
461 onAutofillTap_: function(event) { 28 onAutofillTap_: function(event) {
462 // Ignore clicking on the toggle button and verify autofill is enabled. 29 // Ignore clicking on the toggle button and verify autofill is enabled.
463 if (Polymer.dom(event).localTarget != this.$.autofillToggle && 30 if (Polymer.dom(event).localTarget != this.$.autofillToggle &&
464 this.getPref('autofill.enabled').value) { 31 this.getPref('autofill.enabled').value) {
465 settings.navigateTo(settings.Route.AUTOFILL); 32 settings.navigateTo(settings.Route.AUTOFILL);
466 } 33 }
467 }, 34 },
468 35
469 /** 36 /**
470 * Shows the manage passwords sub page. 37 * Shows the manage passwords sub page.
471 * @param {!Event} event 38 * @param {!Event} event
472 * @private 39 * @private
473 */ 40 */
474 onPasswordsTap_: function(event) { 41 onPasswordsTap_: function(event) {
475 // Ignore clicking on the toggle button and only expand if the manager is 42 // Ignore clicking on the toggle button and only expand if the manager is
476 // enabled. 43 // enabled.
477 if (Polymer.dom(event).localTarget != this.$.passwordToggle && 44 if (Polymer.dom(event).localTarget != this.$.passwordToggle &&
478 this.getPref('credentials_enable_service').value) { 45 this.getPref('credentials_enable_service').value) {
479 settings.navigateTo(settings.Route.MANAGE_PASSWORDS); 46 settings.navigateTo(settings.Route.MANAGE_PASSWORDS);
480 } 47 }
481 }, 48 },
482
483 /**
484 * Listens for the save-address event, and calls the private API.
485 * @param {!Event} event
486 * @private
487 */
488 saveAddress_: function(event) {
489 this.autofillManager_.saveAddress(event.detail);
490 },
491
492 /**
493 * Listens for the save-credit-card event, and calls the private API.
494 * @param {!Event} event
495 * @private
496 */
497 saveCreditCard_: function(event) {
498 this.autofillManager_.saveCreditCard(event.detail);
499 },
500
501 /**
502 * Listens for the show-password event, and calls the private API.
503 * @param {!Event} event
504 * @private
505 */
506 showPassword_: function(event) {
507 this.passwordManager_.getPlaintextPassword(event.detail, function(e) {
508 this.$$('#passwordSection').setPassword(e.loginPair, e.plaintextPassword);
509 }.bind(this));
510 },
511 }); 49 });
512 })(); 50 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698