author | Sebastian Hengst <archaeopteryx@coole-files.de> |
Sun, 28 Feb 2016 11:19:45 +0100 | |
changeset 335273 | d4ab19c6f7fb385892efcc4eb2c5e24349901a87 |
parent 335075 | 5e0140b6d11821e0c2a2de25bc5431783f03380a |
child 335274 | 8fa2bb2272951f98b0b6d7153dc6cf83c6a7c77a |
push id | 11752 |
push user | archaeopteryx@coole-files.de |
push date | Sun, 28 Feb 2016 10:20:35 +0000 |
reviewers | MattN |
bugs | 1251916 |
milestone | 47.0a1 |
--- a/toolkit/components/passwordmgr/LoginDoorhangers.jsm +++ b/toolkit/components/passwordmgr/LoginDoorhangers.jsm @@ -42,17 +42,17 @@ this.LoginDoorhangers.FillDoorhanger = f }); this.eventHandlers = []; for (let elementName of Object.keys(this.events)) { let handlers = this.events[elementName]; for (let eventName of Object.keys(handlers)) { let handler = handlers[eventName]; this.eventHandlers.push([elementName, eventName, handler.bind(this)]); } - }; + } for (let name of Object.getOwnPropertyNames(properties)) { this[name] = properties[name]; } }; this.LoginDoorhangers.FillDoorhanger.prototype = { /** * Whether the elements for this doorhanger are currently in the document.
--- a/toolkit/components/passwordmgr/LoginManagerContent.jsm +++ b/toolkit/components/passwordmgr/LoginManagerContent.jsm @@ -1179,17 +1179,17 @@ function UserAutoCompleteResult (aSearch if (userA < userB) return -1; if (userA > userB) return 1; return 0; - }; + } this.searchString = aSearchString; this.logins = matchingLogins.sort(loginSort); this.matchCount = matchingLogins.length; if (this.matchCount > 0) { this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS; this.defaultIndex = 0; @@ -1318,51 +1318,63 @@ var FormLikeFactory = { } if (aField.form) { return this.createFromForm(aField.form); } let doc = aField.ownerDocument; log("Created non-form FormLike for rootElement:", doc.documentElement); + let elements = []; + for (let el of doc.documentElement.querySelectorAll("input")) { + if (!el.form) { + elements.push(el); + } + } let formLike = { action: LoginUtils._getPasswordOrigin(doc.baseURI), autocomplete: "on", // Exclude elements inside the rootElement that are already in a <form> as // they will be handled by their own FormLike. - elements: [for (el of doc.documentElement.querySelectorAll("input")) if (!el.form) el], + elements: elements, ownerDocument: doc, rootElement: doc.documentElement, }; this._addToJSONProperty(formLike); return formLike; }, /** * Add a `toJSON` property to a FormLike so logging which ends up going * through dump doesn't include usless garbage from DOM objects. */ _addToJSONProperty(aFormLike) { function prettyElementOutput(aElement) { let idText = aElement.id ? "#" + aElement.id : ""; - let classText = [for (className of aElement.classList) "." + className].join(""); + let classText = ""; + for (let className of aElement.classList) { + classText += "." + className; + } return `<${aElement.nodeName + idText + classText}>`; } Object.defineProperty(aFormLike, "toJSON", { value: () => { let cleansed = {}; for (let key of Object.keys(aFormLike)) { let value = aFormLike[key]; let cleansedValue = value; switch (key) { case "elements": { - cleansedValue = [for (element of value) prettyElementOutput(element)]; + cleansedValue = []; + for (let element of value) { + cleansedValue.push(prettyElementOutput(element)); + } break; } case "ownerDocument": { cleansedValue = { location: { href: value.location.href, },
--- a/toolkit/components/passwordmgr/content/passwordManager.js +++ b/toolkit/components/passwordmgr/content/passwordManager.js @@ -1,14 +1,16 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*** =================== SAVED SIGNONS CODE =================== ***/ +Cu.import("resource://gre/modules/AppConstants.jsm"); + var kSignonBundle; var showingPasswords = false; var dateFormatter = new Intl.DateTimeFormat(undefined, { day: "numeric", month: "short", year: "numeric" }); var dateAndTimeFormatter = new Intl.DateTimeFormat(undefined, { day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "numeric" }); @@ -238,21 +240,20 @@ function FinalizeSignonDeletions(syncNee deletedSignons.length = 0; } function HandleSignonKeyPress(e) { // If editing is currently performed, don't do anything. if (signonsTree.getAttribute("editing")) { return; } - if (e.keyCode == KeyEvent.DOM_VK_DELETE -#ifdef XP_MACOSX - || e.keyCode == KeyEvent.DOM_VK_BACK_SPACE -#endif - ) { + if (e.keyCode == KeyEvent.DOM_VK_DELETE || + (AppConstants.platform == "macosx" && + e.keyCode == KeyEvent.DOM_VK_BACK_SPACE)) + { DeleteSignon(); } } function getColumnByName(column) { switch (column) { case "hostname": return document.getElementById("siteCol");
--- a/toolkit/components/passwordmgr/content/passwordManagerCommon.js +++ b/toolkit/components/passwordmgr/content/passwordManagerCommon.js @@ -82,17 +82,17 @@ function DeleteAllFromTree(tree, view, t // remove all items from table and place in deleted table for (var i=0; i<table.length; i++) { deletedTable[deletedTable.length] = table[i]; } table.length = 0; // clear out selections - view.selection.select(-1); + view.selection.select(-1); // update the tree view and notify the tree view.rowCount = 0; var box = tree.treeBoxObject; box.rowCountChanged(0, -deletedTable.length); box.invalidate();
--- a/toolkit/components/passwordmgr/content/passwordManagerExceptions.js +++ b/toolkit/components/passwordmgr/content/passwordManagerExceptions.js @@ -1,14 +1,16 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*** =================== REJECTED SIGNONS CODE =================== ***/ +Components.utils.import("resource://gre/modules/AppConstants.jsm"); + function RejectsStartup() { LoadRejects(); let treecols = document.getElementsByTagName("treecols")[0]; treecols.addEventListener("click", HandleTreeColumnClick.bind(null, RejectColumnSort)); } var rejectsTreeView = { @@ -84,21 +86,20 @@ function DeleteAllRejects() { function FinalizeRejectDeletions() { for (var r=0; r<deletedRejects.length; r++) { passwordmanager.setLoginSavingEnabled(deletedRejects[r].host, true); } deletedRejects.length = 0; } function HandleRejectKeyPress(e) { - if (e.keyCode == KeyEvent.DOM_VK_DELETE -#ifdef XP_MACOSX - || e.keyCode == KeyEvent.DOM_VK_BACK_SPACE -#endif - ) { + if (e.keyCode == KeyEvent.DOM_VK_DELETE || + (AppConstants.platform == "macosx" && + e.keyCode == KeyEvent.DOM_VK_BACK_SPACE)) + { DeleteReject(); } } var lastRejectSortColumn = "host"; var lastRejectSortAscending = false; function RejectColumnSort(column) {
--- a/toolkit/components/passwordmgr/crypto-SDR.js +++ b/toolkit/components/passwordmgr/crypto-SDR.js @@ -7,17 +7,17 @@ const { classes: Cc, interfaces: Ci, uti Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "LoginHelper", "resource://gre/modules/LoginHelper.jsm"); function LoginManagerCrypto_SDR() { this.init(); -}; +} LoginManagerCrypto_SDR.prototype = { classID : Components.ID("{dc6c2976-0f73-4f1f-b9ff-3d72b4e28309}"), QueryInterface : XPCOMUtils.generateQI([Ci.nsILoginManagerCrypto]), __sdrSlot : null, // PKCS#11 slot being used by the SDR. get _sdrSlot() {
--- a/toolkit/components/passwordmgr/jar.mn +++ b/toolkit/components/passwordmgr/jar.mn @@ -1,13 +1,13 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. toolkit.jar: % content passwordmgr %content/passwordmgr/ content/passwordmgr/login.xml (content/login.xml) * content/passwordmgr/passwordManager.xul (content/passwordManager.xul) -* content/passwordmgr/passwordManager.js (content/passwordManager.js) -* content/passwordmgr/passwordManagerExceptions.js (content/passwordManagerExceptions.js) + content/passwordmgr/passwordManager.js (content/passwordManager.js) + content/passwordmgr/passwordManagerExceptions.js (content/passwordManagerExceptions.js) content/passwordmgr/passwordManagerExceptions.xul (content/passwordManagerExceptions.xul) content/passwordmgr/passwordManagerCommon.js (content/passwordManagerCommon.js) content/passwordmgr/recipes.json (content/recipes.json)
--- a/toolkit/components/passwordmgr/moz.build +++ b/toolkit/components/passwordmgr/moz.build @@ -27,21 +27,21 @@ XPIDL_SOURCES += [ 'nsILoginMetaInfo.idl', ] XPIDL_MODULE = 'loginmgr' EXTRA_COMPONENTS += [ 'crypto-SDR.js', 'nsLoginInfo.js', + 'nsLoginManager.js', 'nsLoginManagerPrompter.js', ] EXTRA_PP_COMPONENTS += [ - 'nsLoginManager.js', 'passwordmgr.manifest', ] EXTRA_JS_MODULES += [ 'InsecurePasswordUtils.jsm', 'LoginHelper.jsm', 'LoginManagerContent.jsm', 'LoginManagerParent.jsm',
--- a/toolkit/components/passwordmgr/nsLoginManager.js +++ b/toolkit/components/passwordmgr/nsLoginManager.js @@ -1,16 +1,17 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; +Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Timer.jsm"); Cu.import("resource://gre/modules/LoginManagerContent.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Task", @@ -102,21 +103,22 @@ LoginManager.prototype = { this._initStorage(); } Services.obs.addObserver(this._observer, "gather-telemetry", false); }, _initStorage : function () { -#ifdef ANDROID - var contractID = "@mozilla.org/login-manager/storage/mozStorage;1"; -#else - var contractID = "@mozilla.org/login-manager/storage/json;1"; -#endif + var contractID; + if (AppConstants.platform == "android") { + contractID = "@mozilla.org/login-manager/storage/mozStorage;1"; + } else { + contractID = "@mozilla.org/login-manager/storage/json;1"; + } try { var catMan = Cc["@mozilla.org/categorymanager;1"]. getService(Ci.nsICategoryManager); contractID = catMan.getCategoryEntry("login-manager-storage", "nsILoginManagerStorage"); log("Found alternate nsILoginManagerStorage with contract ID:", contractID); } catch (e) { log("No alternate nsILoginManagerStorage registered");
--- a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js +++ b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js @@ -608,27 +608,27 @@ LoginManagerPrompter.prototype = { let newLogin = Cc["@mozilla.org/login-manager/loginInfo;1"]. createInstance(Ci.nsILoginInfo); newLogin.init(hostname, null, httpRealm, username, password, "", ""); if (!selectedLogin) { this.log("New login seen for " + username + " @ " + hostname + " (" + httpRealm + ")"); - var notifyObj = this._getPopupNote() || notifyBox; + let notifyObj = this._getPopupNote() || notifyBox; if (notifyObj) this._showSaveLoginNotification(notifyObj, newLogin); else this._pwmgr.addLogin(newLogin); } else if (password != selectedLogin.password) { this.log("Updating password for " + username + " @ " + hostname + " (" + httpRealm + ")"); - var notifyObj = this._getPopupNote() || notifyBox; + let notifyObj = this._getPopupNote() || notifyBox; if (notifyObj) this._showChangeLoginNotification(notifyObj, selectedLogin, newLogin); else this._updateLogin(selectedLogin, newLogin); } else { this.log("Login unchanged, no further action needed."); this._updateLogin(selectedLogin);
--- a/toolkit/components/passwordmgr/storage-mozStorage.js +++ b/toolkit/components/passwordmgr/storage-mozStorage.js @@ -38,17 +38,17 @@ Transaction.prototype = { rollback : function() { if (this._hasTransaction) this._db.rollbackTransaction(); }, }; -function LoginManagerStorage_mozStorage() { }; +function LoginManagerStorage_mozStorage() { } LoginManagerStorage_mozStorage.prototype = { classID : Components.ID("{8c2023b9-175c-477e-9761-44ae7b549756}"), QueryInterface : XPCOMUtils.generateQI([Ci.nsILoginManagerStorage, Ci.nsIInterfaceRequestor]), getInterface : function(aIID) { if (aIID.equals(Ci.nsIVariant)) {
--- a/toolkit/components/passwordmgr/test/notification_common.js +++ b/toolkit/components/passwordmgr/test/notification_common.js @@ -85,26 +85,26 @@ const kDontChangeButton = 1; function dumpNotifications() { try { // PopupNotifications var container = getPopupNotifications(window.top); ok(true, "is popup panel open? " + container.isPanelOpen); var notes = container._currentNotifications; ok(true, "Found " + notes.length + " popup notifications."); - for (var i = 0; i < notes.length; i++) { + for (let i = 0; i < notes.length; i++) { ok(true, "#" + i + ": " + notes[i].id); } // Notification bars var chromeWin = SpecialPowers.wrap(window.top) .QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIWebNavigation) .QueryInterface(Ci.nsIDocShell) .chromeEventHandler.ownerDocument.defaultView; var nb = chromeWin.getNotificationBox(window.top); - var notes = nb.allNotifications; + notes = nb.allNotifications; ok(true, "Found " + notes.length + " notification bars."); - for (var i = 0; i < notes.length; i++) { + for (let i = 0; i < notes.length; i++) { ok(true, "#" + i + ": " + notes[i].getAttribute("value")); } } catch(e) { todo(false, "WOAH! " + e); } }
--- a/toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html +++ b/toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html @@ -712,17 +712,17 @@ function* runTest() { checkACForm("", ""); // Insert a new username field into the form. We'll then make sure // that invoking the autocomplete doesn't try to fill the form. var newField = document.createElement("input"); newField.setAttribute("type", "text"); newField.setAttribute("name", "uname2"); pword.parentNode.insertBefore(newField, pword); - is($_(7, "uname2").value, "", "Verifying empty uname2");; + is($_(7, "uname2").value, "", "Verifying empty uname2"); // Delete login6B. It was created just to prevent filling in a login // automatically, removing it makes it more likely that we'll catch a // future regression with form filling here. pwmgr.removeLogin(login6B); // Trigger autocomplete popup restoreForm(); @@ -734,17 +734,17 @@ function* runTest() { doKey("down"); checkACForm("", ""); // value shouldn't update doKey("return"); // not "enter"! // The form changes, so we expect the old username field to get the // selected autocomplete value, but neither the new username field nor // the password field should have any values filled in. yield spinEventLoop(); checkACForm("form7user1", ""); - is($_(7, "uname2").value, "", "Verifying empty uname2");; + is($_(7, "uname2").value, "", "Verifying empty uname2"); restoreForm(); // clear field, so reloading test doesn't fail pwmgr.removeLogin(login6A); testNum = 599; yield runNextTest(); /* test 600 */ // Turn our attention to form8
--- a/toolkit/components/passwordmgr/test/test_bug_627616.html +++ b/toolkit/components/passwordmgr/test/test_bug_627616.html @@ -60,17 +60,17 @@ login2 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo); login2.init("http://mochi.test:8888", null, "mochirealm", "user1name", "user1pass", "", ""); pwmgr.addLogin(login2); startCallbackTimer(); } function cleanup() { var pwmgr = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); - pwmgr.removeLogin(login); + pwmgr.removeLogin(login); pwmgr.removeLogin(login2); timer.cancel(); } function makeXHR(expectedStatus, expectedText, extra) { var xhr = new XMLHttpRequest(); xhr.open("GET", "authenticate.sjs?" + "proxy_user=proxy_user&" +
--- a/toolkit/components/passwordmgr/test/test_notifications_popup.html +++ b/toolkit/components/passwordmgr/test/test_notifications_popup.html @@ -56,17 +56,17 @@ PasswordMgrObserver = { if (data == "removeLogin") return; runNextTest(); }, }; // Remember, Never for This Site, Not Now function checkTest() { - var popup, login, logins; + var popup, login, logins, popupWin, popupNotificationsInPopup; switch(testNum) { case 1: popup = getPopup(popupNotifications, "password-save"); ok(popup, "got notification popup"); // Sanity check, no logins should exist yet. logins = pwmgr.getAllLogins(); @@ -100,37 +100,37 @@ function checkTest() { ok(login.timeCreated < login.timeLastUsed, "timeLastUsed bumped"); ok(login.timeLastUsed == login.timePasswordChanged, "timeUsed == timeChanged"); login1.password = "pass2"; pwmgr.removeLogin(login1); login1.password = "notifyp1"; // password-save with chrome visible - var popupWin = iframe.contentWindow.popupWin; + popupWin = iframe.contentWindow.popupWin; ok(popupWin, "Check popupWin is accessible"); - var popupNotificationsInPopup = getPopupNotifications(popupWin); + popupNotificationsInPopup = getPopupNotifications(popupWin); ok(popupNotificationsInPopup, "Got popupNotificationsInPopup"); popup = getPopup(popupNotificationsInPopup, "password-save"); ok(popup, "got notification popup"); clickPopupButton(popup, kRememberButton); popupWin.close(); break; case 4: // Check result of clicking kRememberButton logins = pwmgr.getAllLogins(); is(logins.length, 1, "Should only have 1 login now"); login = SpecialPowers.wrap(logins[0]).QueryInterface(Ci.nsILoginMetaInfo); ok(login.timesUsed, 1, "Check times used on new entry"); // password-change with chrome visible - var popupWin = iframe.contentWindow.popupWin; + popupWin = iframe.contentWindow.popupWin; ok(popupWin, "Check popupWin is accessible"); - var popupNotificationsInPopup = getPopupNotifications(popupWin); + popupNotificationsInPopup = getPopupNotifications(popupWin); ok(popupNotificationsInPopup, "Got popupNotificationsInPopup"); popup = getPopup(popupNotificationsInPopup, "password-change"); ok(popup, "got notification popup"); clickPopupButton(popup, kChangeButton); popupWin.close(); break; case 5:
--- a/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html +++ b/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html @@ -105,16 +105,18 @@ function loadNextTest() { } ok(true, "Starting test #" + testNum); iframe.src = prefix + subtests[testNum-1]; } function checkTest() { var popup; + var gotUser; + var gotPass; switch (testNum) { case 1: // run outside of private mode, popup notification should appear popup = getPopup(popupNotifications, "password-save"); ok(popup, "got popup notification"); popup.remove(); break; @@ -150,42 +152,42 @@ function checkTest() { popup = getPopup(popupNotifications, "password-change"); ok(popup, "got popup notification"); popup.remove(); pwmgr.removeLogin(login); break; case 7: // verify that the user/pass pair was autofilled - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + let gotUser = iframe.contentDocument.getElementById("user").textContent; + let gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "notifyu1", "Checking submitted username"); is(gotPass, "notifyp1", "Checking submitted password"); break; case 8: // verify that the user/pass pair was not autofilled - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "", "Checking submitted username"); is(gotPass, "", "Checking submitted password"); break; case 9: // verify that the user/pass pair was available for autocomplete - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "notifyu1", "Checking submitted username"); is(gotPass, "notifyp1", "Checking submitted password"); break; case 10: // verify that the user/pass pair was autofilled - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "notifyu1", "Checking submitted username"); is(gotPass, "notifyp1", "Checking submitted password"); pwmgr.removeLogin(login); break; default: ok(false, "Unexpected call to checkTest for test #" + testNum);
--- a/toolkit/components/passwordmgr/test/test_prompt_async.html +++ b/toolkit/components/passwordmgr/test/test_prompt_async.html @@ -417,24 +417,27 @@ startCallbackTimer(); } function doCheck(testNum) { var iframe1Doc = SpecialPowers.wrap(iframe1).contentDocument; var iframe2aDoc = SpecialPowers.wrap(iframe2a).contentDocument; var iframe2bDoc = SpecialPowers.wrap(iframe2b).contentDocument; + var authok1; + var proxyok1; + var footnote; switch (testNum) { case 1: ok(true, "doCheck testNum 1"); is(monitor.windowsRegistered, 3, "Registered 3 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; var authok2a = iframe2aDoc.getElementById("ok").textContent; var proxyok2a = iframe2aDoc.getElementById("proxy").textContent; var authok2b = iframe2bDoc.getElementById("ok").textContent; var proxyok2b = iframe2bDoc.getElementById("proxy").textContent; is(authok1, "PASS", "WWW Authorization OK, frame1"); @@ -470,63 +473,63 @@ // ensure that the page content is not displayed on failed proxy auth is(iframe1Doc.getElementById("ok"), null, "frame did not load"); break; case 4: ok(true, "doCheck testNum 4"); is(monitor.windowsRegistered, 2, "Registered 2 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; is(authok1, "FAIL", "WWW Authorization FAILED, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); break; case 5: ok(true, "doCheck testNum 5"); is(monitor.windowsRegistered, 1, "Registered 1 open dialog"); // ensure that the page content is not displayed on failed proxy auth is(iframe1Doc.getElementById("footnote"), null, "frame did not load"); break; case 6: ok(true, "doCheck testNum 6"); is(monitor.windowsRegistered, 2, "Registered 2 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; - var footnote = iframe1Doc.getElementById("footnote").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; + footnote = iframe1Doc.getElementById("footnote").textContent; is(authok1, "FAIL", "WWW Authorization FAILED, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); is(footnote, "This is a footnote after the huge content fill", "Footnote present and loaded completely"); break; case 7: ok(true, "doCheck testNum 7"); is(monitor.windowsRegistered, 1, "Registered 1 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; - var footnote = iframe1Doc.getElementById("footnote").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; + footnote = iframe1Doc.getElementById("footnote").textContent; is(authok1, "PASS", "WWW Authorization OK, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); is(footnote, "This is a footnote after the huge content fill", "Footnote present and loaded completely"); break; case 8: ok(true, "doCheck testNum 8"); is(monitor.windowsRegistered, 5, "Registered 5 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; - var footnote = iframe1Doc.getElementById("footnote").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; + footnote = iframe1Doc.getElementById("footnote").textContent; is(authok1, "PASS", "WWW Authorization OK, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); is(footnote, "This is a footnote after the huge content fill", "Footnote present and loaded completely"); break; default:
--- a/toolkit/components/passwordmgr/test/unit/test_OSCrypto_win.js +++ b/toolkit/components/passwordmgr/test/unit/test_OSCrypto_win.js @@ -1,77 +1,77 @@ -/** - * Tests the OSCrypto object. - */ - -"use strict"; - -//////////////////////////////////////////////////////////////////////////////// -//// Globals - -XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto", - "resource://gre/modules/OSCrypto.jsm"); - -var crypto = new OSCrypto(); - -//////////////////////////////////////////////////////////////////////////////// -//// Tests - -add_task(function test_getIELoginHash() -{ - do_check_eq(crypto.getIELoginHash("https://bugzilla.mozilla.org/page.cgi"), - "4A66FE96607885790F8E67B56EEE52AB539BAFB47D"); - - do_check_eq(crypto.getIELoginHash("https://github.com/login"), - "0112F7DCE67B8579EA01367678AA44AB9868B5A143"); - - do_check_eq(crypto.getIELoginHash("https://login.live.com/login.srf"), - "FBF92E5D804C82717A57856533B779676D92903688"); - - do_check_eq(crypto.getIELoginHash("https://preview.c9.io/riadh/w1/pass.1.html"), - "6935CF27628830605927F86AB53831016FC8973D1A"); - - - do_check_eq(crypto.getIELoginHash("https://reviewboard.mozilla.org/account/login/"), - "09141FD287E2E59A8B1D3BB5671537FD3D6B61337A"); - - do_check_eq(crypto.getIELoginHash("https://www.facebook.com/"), - "EF44D3E034009CB0FD1B1D81A1FF3F3335213BD796"); - -}); - -add_task(function test_decryptData_encryptData() -{ - function decryptEncryptTest(key) { - do_check_eq(crypto.decryptData(crypto.encryptData("", key), key), - ""); - - do_check_eq(crypto.decryptData(crypto.encryptData("secret", key), key), - "secret"); - - do_check_eq(crypto.decryptData(crypto.encryptData("https://www.mozilla.org", key), - key), - "https://www.mozilla.org"); - - do_check_eq(crypto.decryptData(crypto.encryptData("https://reviewboard.mozilla.org", key), - key), - "https://reviewboard.mozilla.org"); - - do_check_eq(crypto.decryptData(crypto.encryptData("https://bugzilla.mozilla.org/page.cgi", - key), - key), - "https://bugzilla.mozilla.org/page.cgi"); - } - - let keys = [null, "a", "keys", "abcdedf", "pass", "https://bugzilla.mozilla.org/page.cgi", - "https://login.live.com/login.srf"]; - for (let key of keys) { - decryptEncryptTest(key); - } - let url = "https://twitter.com/"; - let value = [1, 0, 0, 0, 208, 140, 157, 223, 1, 21, 209, 17, 140, 122, 0, 192, 79, 194, 151, 235, 1, 0, 0, 0, 254, 58, 230, 75, 132, 228, 181, 79, 184, 160, 37, 106, 201, 29, 42, 152, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 16, 102, 0, 0, 0, 1, 0, 0, 32, 0, 0, 0, 90, 136, 17, 124, 122, 57, 178, 24, 34, 86, 209, 198, 184, 107, 58, 58, 32, 98, 61, 239, 129, 101, 56, 239, 114, 159, 139, 165, 183, 40, 183, 85, 0, 0, 0, 0, 14, 128, 0, 0, 0, 2, 0, 0, 32, 0, 0, 0, 147, 170, 34, 21, 53, 227, 191, 6, 201, 84, 106, 31, 57, 227, 46, 127, 219, 199, 80, 142, 37, 104, 112, 223, 26, 165, 223, 55, 176, 89, 55, 37, 112, 0, 0, 0, 98, 70, 221, 109, 5, 152, 46, 11, 190, 213, 226, 58, 244, 20, 180, 217, 63, 155, 227, 132, 7, 151, 235, 6, 37, 232, 176, 182, 141, 191, 251, 50, 20, 123, 53, 11, 247, 233, 112, 121, 130, 27, 168, 68, 92, 144, 192, 7, 12, 239, 53, 217, 253, 155, 54, 109, 236, 216, 225, 245, 79, 234, 165, 225, 104, 36, 77, 13, 195, 237, 143, 165, 100, 107, 230, 70, 54, 19, 179, 35, 8, 101, 93, 202, 121, 210, 222, 28, 93, 122, 36, 84, 185, 249, 238, 3, 102, 149, 248, 94, 137, 16, 192, 22, 251, 220, 22, 223, 16, 58, 104, 187, 64, 0, 0, 0, 70, 72, 15, 119, 144, 66, 117, 203, 190, 82, 131, 46, 111, 130, 238, 191, 170, 63, 186, 117, 46, 88, 171, 3, 94, 146, 75, 86, 243, 159, 63, 195, 149, 25, 105, 141, 42, 217, 108, 18, 63, 62, 98, 182, 241, 195, 12, 216, 152, 230, 176, 253, 202, 129, 41, 185, 135, 111, 226, 92, 27, 78, 27, 198]; - - let arr1 = crypto.arrayToString(value) - let arr2 = crypto.stringToArray(crypto.decryptData(crypto.encryptData(arr1, url), url)); - for(let i = 0; i < arr1.length; i++) { - do_check_eq(arr2[i], value[i]); - } -}); +/** + * Tests the OSCrypto object. + */ + +"use strict"; + +//////////////////////////////////////////////////////////////////////////////// +//// Globals + +XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto", + "resource://gre/modules/OSCrypto.jsm"); + +var crypto = new OSCrypto(); + +//////////////////////////////////////////////////////////////////////////////// +//// Tests + +add_task(function test_getIELoginHash() +{ + do_check_eq(crypto.getIELoginHash("https://bugzilla.mozilla.org/page.cgi"), + "4A66FE96607885790F8E67B56EEE52AB539BAFB47D"); + + do_check_eq(crypto.getIELoginHash("https://github.com/login"), + "0112F7DCE67B8579EA01367678AA44AB9868B5A143"); + + do_check_eq(crypto.getIELoginHash("https://login.live.com/login.srf"), + "FBF92E5D804C82717A57856533B779676D92903688"); + + do_check_eq(crypto.getIELoginHash("https://preview.c9.io/riadh/w1/pass.1.html"), + "6935CF27628830605927F86AB53831016FC8973D1A"); + + + do_check_eq(crypto.getIELoginHash("https://reviewboard.mozilla.org/account/login/"), + "09141FD287E2E59A8B1D3BB5671537FD3D6B61337A"); + + do_check_eq(crypto.getIELoginHash("https://www.facebook.com/"), + "EF44D3E034009CB0FD1B1D81A1FF3F3335213BD796"); + +}); + +add_task(function test_decryptData_encryptData() +{ + function decryptEncryptTest(key) { + do_check_eq(crypto.decryptData(crypto.encryptData("", key), key), + ""); + + do_check_eq(crypto.decryptData(crypto.encryptData("secret", key), key), + "secret"); + + do_check_eq(crypto.decryptData(crypto.encryptData("https://www.mozilla.org", key), + key), + "https://www.mozilla.org"); + + do_check_eq(crypto.decryptData(crypto.encryptData("https://reviewboard.mozilla.org", key), + key), + "https://reviewboard.mozilla.org"); + + do_check_eq(crypto.decryptData(crypto.encryptData("https://bugzilla.mozilla.org/page.cgi", + key), + key), + "https://bugzilla.mozilla.org/page.cgi"); + } + + let keys = [null, "a", "keys", "abcdedf", "pass", "https://bugzilla.mozilla.org/page.cgi", + "https://login.live.com/login.srf"]; + for (let key of keys) { + decryptEncryptTest(key); + } + let url = "https://twitter.com/"; + let value = [1, 0, 0, 0, 208, 140, 157, 223, 1, 21, 209, 17, 140, 122, 0, 192, 79, 194, 151, 235, 1, 0, 0, 0, 254, 58, 230, 75, 132, 228, 181, 79, 184, 160, 37, 106, 201, 29, 42, 152, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 16, 102, 0, 0, 0, 1, 0, 0, 32, 0, 0, 0, 90, 136, 17, 124, 122, 57, 178, 24, 34, 86, 209, 198, 184, 107, 58, 58, 32, 98, 61, 239, 129, 101, 56, 239, 114, 159, 139, 165, 183, 40, 183, 85, 0, 0, 0, 0, 14, 128, 0, 0, 0, 2, 0, 0, 32, 0, 0, 0, 147, 170, 34, 21, 53, 227, 191, 6, 201, 84, 106, 31, 57, 227, 46, 127, 219, 199, 80, 142, 37, 104, 112, 223, 26, 165, 223, 55, 176, 89, 55, 37, 112, 0, 0, 0, 98, 70, 221, 109, 5, 152, 46, 11, 190, 213, 226, 58, 244, 20, 180, 217, 63, 155, 227, 132, 7, 151, 235, 6, 37, 232, 176, 182, 141, 191, 251, 50, 20, 123, 53, 11, 247, 233, 112, 121, 130, 27, 168, 68, 92, 144, 192, 7, 12, 239, 53, 217, 253, 155, 54, 109, 236, 216, 225, 245, 79, 234, 165, 225, 104, 36, 77, 13, 195, 237, 143, 165, 100, 107, 230, 70, 54, 19, 179, 35, 8, 101, 93, 202, 121, 210, 222, 28, 93, 122, 36, 84, 185, 249, 238, 3, 102, 149, 248, 94, 137, 16, 192, 22, 251, 220, 22, 223, 16, 58, 104, 187, 64, 0, 0, 0, 70, 72, 15, 119, 144, 66, 117, 203, 190, 82, 131, 46, 111, 130, 238, 191, 170, 63, 186, 117, 46, 88, 171, 3, 94, 146, 75, 86, 243, 159, 63, 195, 149, 25, 105, 141, 42, 217, 108, 18, 63, 62, 98, 182, 241, 195, 12, 216, 152, 230, 176, 253, 202, 129, 41, 185, 135, 111, 226, 92, 27, 78, 27, 198]; + + let arr1 = crypto.arrayToString(value) + let arr2 = crypto.stringToArray(crypto.decryptData(crypto.encryptData(arr1, url), url)); + for(let i = 0; i < arr1.length; i++) { + do_check_eq(arr2[i], value[i]); + } +});
--- a/toolkit/components/passwordmgr/test/unit/test_notifications.js +++ b/toolkit/components/passwordmgr/test/unit/test_notifications.js @@ -61,18 +61,18 @@ var testuser1 = new LoginInfo("http://te var testuser2 = new LoginInfo("http://testhost2", "", null, "dummydude2", "itsasecret2", "put_user2_here", "put_pw2_here"); Services.obs.addObserver(TestObserver, "passwordmgr-storage-changed", false); /* ========== 1 ========== */ -var testnum = 1; -var testdesc = "Initial connection to storage module" +testnum = 1; +testdesc = "Initial connection to storage module" /* ========== 2 ========== */ testnum++; testdesc = "addLogin"; expectedNotification = "addLogin"; expectedData = testuser1; Services.logins.addLogin(testuser1);