| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 */ var ArrayDataModel = cr.ui.ArrayDataModel; | 6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; |
| 7 /** @const */ var DeletableItemList = options.DeletableItemList; | 7 /** @const */ var DeletableItemList = options.DeletableItemList; |
| 8 /** @const */ var DeletableItem = options.DeletableItem; | 8 /** @const */ var DeletableItem = options.DeletableItem; |
| 9 /** @const */ var List = cr.ui.List; | 9 /** @const */ var List = cr.ui.List; |
| 10 | 10 |
| 11 // The following constants should be synchronized with the constants in | 11 // The following constants should be synchronized with the constants in |
| 12 // chrome/browser/ui/webui/options/password_manager_handler.cc. | 12 // chrome/browser/ui/webui/options/password_manager_handler.cc. |
| 13 /** @const */ var ORIGIN_FIELD = 'origin'; | 13 /** @const */ var URL_FIELD = 'url'; |
| 14 /** @const */ var SHOWN_URL_FIELD = 'shownUrl'; | 14 /** @const */ var SHOWN_ORIGIN_FIELD = 'shownOrigin'; |
| 15 /** @const */ var IS_ANDROID_URI_FIELD = 'isAndroidUri'; | 15 /** @const */ var IS_ANDROID_URI_FIELD = 'isAndroidUri'; |
| 16 /** @const */ var IS_CLICKABLE_FIELD = 'isClickable'; |
| 16 /** @const */ var IS_SECURE_FIELD = 'isSecure'; | 17 /** @const */ var IS_SECURE_FIELD = 'isSecure'; |
| 17 /** @const */ var USERNAME_FIELD = 'username'; | 18 /** @const */ var USERNAME_FIELD = 'username'; |
| 18 /** @const */ var PASSWORD_FIELD = 'password'; | 19 /** @const */ var PASSWORD_FIELD = 'password'; |
| 19 /** @const */ var FEDERATION_FIELD = 'federation'; | 20 /** @const */ var FEDERATION_FIELD = 'federation'; |
| 20 /** @const */ var ORIGINAL_INDEX_FIELD = 'index'; | 21 /** @const */ var ORIGINAL_INDEX_FIELD = 'index'; |
| 21 | 22 |
| 22 /** | 23 /** |
| 23 * Creates a new passwords list item. | 24 * Creates a new passwords list item. |
| 24 * @param {cr.ui.ArrayDataModel} dataModel The data model that contains this | 25 * @param {cr.ui.ArrayDataModel} dataModel The data model that contains this |
| 25 * item. | 26 * item. |
| 26 * @param {Object} entry A dictionary of data on new list item. When the | 27 * @param {Object} entry A dictionary of data on new list item. When the |
| 27 * list has been filtered, one more element [index] may be present. | 28 * list has been filtered, one more element [index] may be present. |
| 28 * @param {boolean} showPasswords If true, add a button to the element to | 29 * @param {boolean} showPasswords If true, add a button to the element to |
| 29 * allow the user to reveal the saved password. | 30 * allow the user to reveal the saved password. |
| 30 * @constructor | 31 * @constructor |
| 31 * @extends {options.DeletableItem} | 32 * @extends {options.DeletableItem} |
| 32 */ | 33 */ |
| 33 function PasswordListItem(dataModel, entry, showPasswords) { | 34 function PasswordListItem(dataModel, entry, showPasswords) { |
| 34 var el = cr.doc.createElement('div'); | 35 var el = cr.doc.createElement('div'); |
| 35 el.dataItem = entry; | 36 el.dataItem = entry; |
| 36 el.dataModel = dataModel; | 37 el.dataModel = dataModel; |
| 37 el.__proto__ = PasswordListItem.prototype; | 38 el.__proto__ = PasswordListItem.prototype; |
| 38 el.showPasswords_ = showPasswords; | 39 el.showPasswords_ = showPasswords; |
| 39 el.decorate(); | 40 el.decorate(); |
| 40 | 41 |
| 41 return el; | 42 return el; |
| 42 } | 43 } |
| 43 | 44 |
| 44 /** | 45 /** |
| 45 * Returns title for password's origin. If the origin is Android URI, returns | 46 * Returns title for password's origin. If the origin is not clickable, |
| 46 * the origin as it is. Removes the scheme if the url is insecure and removes | 47 * returns the origin as it is. For clickable origins, removes the scheme if |
| 47 * trailing punctuation symbols. | 48 * the url is insecure and removes trailing punctuation symbols. |
| 48 * @param {Object} item A dictionary of data on the list item. | 49 * @param {Object} item A dictionary of data on the list item. |
| 49 * @return {string} The title for password's origin. | 50 * @return {string} The title for password's origin. |
| 50 */ | 51 */ |
| 51 function getTitleForPasswordOrigin(item) { | 52 function getTitleForPasswordOrigin(item) { |
| 52 var title = item.url; | 53 var title = item.url; |
| 53 if (item.isAndroidUri) | 54 if (!item.isClickable) |
| 54 return title; | 55 return title; |
| 55 if (!item.isSecure) { | 56 if (!item.isSecure) { |
| 56 var ind = title.indexOf('://'); | 57 var ind = title.indexOf('://'); |
| 57 if (ind >= 0) { | 58 if (ind >= 0) { |
| 58 title = title.substring(ind + 3); | 59 title = title.substring(ind + 3); |
| 59 } | 60 } |
| 60 } | 61 } |
| 61 // Since the direction is switched to RTL, punctuation symbols appear on the | 62 // Since the direction is switched to RTL, punctuation symbols appear on the |
| 62 // left side, that is wrong. So, just remove trailing punctuation symbols. | 63 // left side, that is wrong. So, just remove trailing punctuation symbols. |
| 63 title = title.replace(/[^A-Za-z0-9]+$/, ''); | 64 title = title.replace(/[^A-Za-z0-9]+$/, ''); |
| 64 return title; | 65 return title; |
| 65 } | 66 } |
| 66 | 67 |
| 67 /** | 68 /** |
| 68 * Helper function that creates an HTML element for displaying the origin of | 69 * Helper function that creates an HTML element for displaying the origin of |
| 69 * saved password. | 70 * saved password. |
| 70 * @param {Object} item A dictionary of data on the list item. | 71 * @param {Object} item A dictionary of data on the list item. |
| 71 * @param {Element} urlDiv div-element that will enclose the created | 72 * @param {Element} urlDiv div-element that will enclose the created |
| 72 * element. | 73 * element. |
| 73 * @return {Element} The element for displaying password origin. | 74 * @return {Element} The element for displaying password origin. |
| 74 */ | 75 */ |
| 75 function createUrlLink(item, urlDiv) { | 76 function createUrlLink(item, urlDiv) { |
| 76 var urlLink; | 77 var urlLink; |
| 77 if (!item.isAndroidUri) { | 78 if (item.isClickable) { |
| 78 urlLink = item.ownerDocument.createElement('a'); | 79 urlLink = item.ownerDocument.createElement('a'); |
| 79 urlLink.href = item.url; | 80 urlLink.href = item.url; |
| 80 urlLink.setAttribute('target', '_blank'); | 81 urlLink.setAttribute('target', '_blank'); |
| 81 urlLink.textContent = item.shownUrl.split('').reverse().join(''); | 82 var linkText = item.shownOrigin; |
| 82 | 83 // Since the string will be reversed for RTL direction, the string starts |
| 84 // with closed bracket and ends with open bracket. |
| 85 if (item.isAndroidUri) |
| 86 linkText += ' )Android('; |
| 87 urlLink.textContent = linkText.split('').reverse().join(''); |
| 83 urlDiv.classList.add('left-elided-url'); | 88 urlDiv.classList.add('left-elided-url'); |
| 84 } else { | 89 } else { |
| 85 urlLink = item.ownerDocument.createElement('span'); | 90 urlLink = item.ownerDocument.createElement('span'); |
| 86 urlLink.textContent = item.shownUrl; | 91 urlLink.textContent = item.shownOrigin; |
| 87 } | 92 } |
| 88 urlLink.addEventListener('focus', function() { | 93 urlLink.addEventListener('focus', function() { |
| 89 item.handleFocus(); | 94 item.handleFocus(); |
| 90 }.bind(item)); | 95 }.bind(item)); |
| 91 return urlLink; | 96 return urlLink; |
| 92 } | 97 } |
| 93 | 98 |
| 94 PasswordListItem.prototype = { | 99 PasswordListItem.prototype = { |
| 95 __proto__: DeletableItem.prototype, | 100 __proto__: DeletableItem.prototype, |
| 96 | 101 |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 } else { | 264 } else { |
| 260 this.hidePassword(); | 265 this.hidePassword(); |
| 261 } | 266 } |
| 262 }, | 267 }, |
| 263 | 268 |
| 264 /** | 269 /** |
| 265 * Get and set the URL for the entry. | 270 * Get and set the URL for the entry. |
| 266 * @type {string} | 271 * @type {string} |
| 267 */ | 272 */ |
| 268 get url() { | 273 get url() { |
| 269 return this.dataItem[ORIGIN_FIELD]; | 274 return this.dataItem[URL_FIELD]; |
| 270 }, | 275 }, |
| 271 set url(url) { | 276 set url(url) { |
| 272 this.dataItem[ORIGIN_FIELD] = url; | 277 this.dataItem[URL_FIELD] = url; |
| 273 }, | 278 }, |
| 274 | 279 |
| 275 /** | 280 /** |
| 276 * Get and set the shown url for the entry. | 281 * Get and set the shown origin for the entry. |
| 277 * @type {string} | 282 * @type {string} |
| 278 */ | 283 */ |
| 279 get shownUrl() { | 284 get shownOrigin() { |
| 280 return this.dataItem[SHOWN_URL_FIELD]; | 285 return this.dataItem[SHOWN_ORIGIN_FIELD]; |
| 281 }, | 286 }, |
| 282 set shownUrl(shownUrl) { | 287 set shownOrigin(shownOrigin) { |
| 283 this.dataItem[SHOWN_URL_FIELD] = shownUrl; | 288 this.dataItem[SHOWN_ORIGIN_FIELD] = shownOrigin; |
| 284 }, | 289 }, |
| 285 | 290 |
| 286 /** | 291 /** |
| 287 * Get and set whether the origin is Android URI. | 292 * Get and set whether the origin is Android URI. |
| 288 * @type {boolean} | 293 * @type {boolean} |
| 289 */ | 294 */ |
| 290 get isAndroidUri() { | 295 get isAndroidUri() { |
| 291 return this.dataItem[IS_ANDROID_URI_FIELD]; | 296 return this.dataItem[IS_ANDROID_URI_FIELD]; |
| 292 }, | 297 }, |
| 293 set isAndroidUri(isAndroidUri) { | 298 set isAndroidUri(isAndroidUri) { |
| 294 this.dataItem[IS_ANDROID_URI_FIELD] = isAndroidUri; | 299 this.dataItem[IS_ANDROID_URI_FIELD] = isAndroidUri; |
| 295 }, | 300 }, |
| 296 | 301 |
| 297 /** | 302 /** |
| 303 * Get and set whether the origin is clickable. |
| 304 * @type {boolean} |
| 305 */ |
| 306 get isClickable() { |
| 307 return this.dataItem[IS_CLICKABLE_FIELD]; |
| 308 }, |
| 309 set isClickable(isClickable) { |
| 310 this.dataItem[IS_CLICKABLE_FIELD] = isClickable; |
| 311 }, |
| 312 |
| 313 /** |
| 298 * Get and set whether the origin uses secure scheme. | 314 * Get and set whether the origin uses secure scheme. |
| 299 * @type {boolean} | 315 * @type {boolean} |
| 300 */ | 316 */ |
| 301 get isSecure() { | 317 get isSecure() { |
| 302 return this.dataItem[IS_SECURE_FIELD]; | 318 return this.dataItem[IS_SECURE_FIELD]; |
| 303 }, | 319 }, |
| 304 set isSecure(isSecure) { | 320 set isSecure(isSecure) { |
| 305 this.dataItem[IS_SECURE_FIELD] = isSecure; | 321 this.dataItem[IS_SECURE_FIELD] = isSecure; |
| 306 }, | 322 }, |
| 307 | 323 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 var tabIndex = focusable ? 0 : -1; | 411 var tabIndex = focusable ? 0 : -1; |
| 396 this.urlLink.tabIndex = tabIndex; | 412 this.urlLink.tabIndex = tabIndex; |
| 397 this.closeButtonElement.tabIndex = tabIndex; | 413 this.closeButtonElement.tabIndex = tabIndex; |
| 398 }, | 414 }, |
| 399 | 415 |
| 400 /** | 416 /** |
| 401 * Get the url for the entry. | 417 * Get the url for the entry. |
| 402 * @type {string} | 418 * @type {string} |
| 403 */ | 419 */ |
| 404 get url() { | 420 get url() { |
| 405 return this.dataItem[ORIGIN_FIELD]; | 421 return this.dataItem[URL_FIELD]; |
| 406 }, | 422 }, |
| 407 set url(url) { | 423 set url(url) { |
| 408 this.dataItem[ORIGIN_FIELD] = url; | 424 this.dataItem[URL_FIELD] = url; |
| 409 }, | 425 }, |
| 410 | 426 |
| 411 /** | 427 /** |
| 412 * Get and set the shown url for the entry. | 428 * Get and set the shown origin for the entry. |
| 413 * @type {string} | 429 * @type {string} |
| 414 */ | 430 */ |
| 415 get shownUrl() { | 431 get shownOrigin() { |
| 416 return this.dataItem[SHOWN_URL_FIELD]; | 432 return this.dataItem[SHOWN_ORIGIN_FIELD]; |
| 417 }, | 433 }, |
| 418 set shownUrl(shownUrl) { | 434 set shownOrigin(shownOrigin) { |
| 419 this.dataItem[SHOWN_URL_FIELD] = shownUrl; | 435 this.dataItem[SHOWN_ORIGIN_FIELD] = shownOrigin; |
| 420 }, | 436 }, |
| 421 | 437 |
| 422 /** | 438 /** |
| 423 * Get and set whether the origin is Android URI. | 439 * Get and set whether the origin is Android URI. |
| 424 * @type {boolean} | 440 * @type {boolean} |
| 425 */ | 441 */ |
| 426 get isAndroidUri() { | 442 get isAndroidUri() { |
| 427 return this.dataItem[IS_ANDROID_URI_FIELD]; | 443 return this.dataItem[IS_ANDROID_URI_FIELD]; |
| 428 }, | 444 }, |
| 429 set isAndroidUri(isAndroidUri) { | 445 set isAndroidUri(isAndroidUri) { |
| 430 this.dataItem[IS_ANDROID_URI_FIELD] = isAndroidUri; | 446 this.dataItem[IS_ANDROID_URI_FIELD] = isAndroidUri; |
| 431 }, | 447 }, |
| 432 | 448 |
| 433 /** | 449 /** |
| 450 * Get and set whether the origin is clickable. |
| 451 * @type {boolean} |
| 452 */ |
| 453 get isClickable() { |
| 454 return this.dataItem[IS_CLICKABLE_FIELD]; |
| 455 }, |
| 456 set isClickable(isClickable) { |
| 457 this.dataItem[IS_CLICKABLE_FIELD] = isClickable; |
| 458 }, |
| 459 |
| 460 /** |
| 434 * Get and set whether the origin uses secure scheme. | 461 * Get and set whether the origin uses secure scheme. |
| 435 * @type {boolean} | 462 * @type {boolean} |
| 436 */ | 463 */ |
| 437 get isSecure() { | 464 get isSecure() { |
| 438 return this.dataItem[IS_SECURE_FIELD]; | 465 return this.dataItem[IS_SECURE_FIELD]; |
| 439 }, | 466 }, |
| 440 set isSecure(isSecure) { | 467 set isSecure(isSecure) { |
| 441 this.dataItem[IS_SECURE_FIELD] = isSecure; | 468 this.dataItem[IS_SECURE_FIELD] = isSecure; |
| 442 }, | 469 }, |
| 443 }; | 470 }; |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 get length() { | 576 get length() { |
| 550 return this.dataModel.length; | 577 return this.dataModel.length; |
| 551 }, | 578 }, |
| 552 }; | 579 }; |
| 553 | 580 |
| 554 return { | 581 return { |
| 555 PasswordListItem: PasswordListItem, | 582 PasswordListItem: PasswordListItem, |
| 556 PasswordExceptionsListItem: PasswordExceptionsListItem, | 583 PasswordExceptionsListItem: PasswordExceptionsListItem, |
| 557 PasswordsList: PasswordsList, | 584 PasswordsList: PasswordsList, |
| 558 PasswordExceptionsList: PasswordExceptionsList, | 585 PasswordExceptionsList: PasswordExceptionsList, |
| 559 ORIGIN_FIELD: ORIGIN_FIELD, | 586 URL_FIELD: URL_FIELD, |
| 560 SHOWN_URL_FIELD: SHOWN_URL_FIELD, | 587 SHOWN_ORIGIN_FIELD: SHOWN_ORIGIN_FIELD, |
| 588 IS_ANDROID_URI_FIELD: IS_ANDROID_URI_FIELD, |
| 589 IS_CLICKABLE_FIELD: IS_CLICKABLE_FIELD, |
| 561 IS_SECURE_FIELD: IS_SECURE_FIELD, | 590 IS_SECURE_FIELD: IS_SECURE_FIELD, |
| 562 USERNAME_FIELD: USERNAME_FIELD, | 591 USERNAME_FIELD: USERNAME_FIELD, |
| 563 PASSWORD_FIELD: PASSWORD_FIELD, | 592 PASSWORD_FIELD: PASSWORD_FIELD, |
| 564 FEDERATION_FIELD: FEDERATION_FIELD, | 593 FEDERATION_FIELD: FEDERATION_FIELD, |
| 565 ORIGINAL_INDEX_FIELD: ORIGINAL_INDEX_FIELD | 594 ORIGINAL_INDEX_FIELD: ORIGINAL_INDEX_FIELD |
| 566 }; | 595 }; |
| 567 }); | 596 }); |
| OLD | NEW |