michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: const LOGIN_HOST = "http://example.com"; michael@0: const LOGIN_COUNT = 5; michael@0: michael@0: let nsLoginInfo = new Components.Constructor( michael@0: "@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init"); michael@0: let pmDialog = window.openDialog( michael@0: "chrome://passwordmgr/content/passwordManager.xul", michael@0: "Toolkit:PasswordManager", ""); michael@0: let pmexDialog = window.openDialog( michael@0: "chrome://passwordmgr/content/passwordManagerExceptions.xul", michael@0: "Toolkit:PasswordManagerExceptions", ""); michael@0: let logins = []; michael@0: let loginCounter = 0; michael@0: let loginOrder = null; michael@0: let modifiedLogin; michael@0: let testNumber = 0; michael@0: let testObserver = { michael@0: observe: function (subject, topic, data) { michael@0: if (topic == "passwordmgr-dialog-updated") { michael@0: switch (testNumber) { michael@0: case 1: michael@0: case 2: michael@0: case 3: michael@0: case 4: michael@0: case 5: michael@0: is(countLogins(), loginCounter, "Verify login added"); michael@0: ok(getLoginOrder().startsWith(loginOrder), "Verify login order"); michael@0: runNextTest(); michael@0: break; michael@0: case 6: michael@0: is(countLogins(), loginCounter, "Verify login count"); michael@0: is(getLoginOrder(), loginOrder, "Verify login order"); michael@0: is(getLoginPassword(), "newpassword0", "Verify login modified"); michael@0: runNextTest(); michael@0: break; michael@0: case 7: michael@0: is(countLogins(), loginCounter, "Verify login removed"); michael@0: ok(loginOrder.endsWith(getLoginOrder()), "Verify login order"); michael@0: runNextTest(); michael@0: break; michael@0: case 8: michael@0: is(countLogins(), 0, "Verify all logins removed"); michael@0: runNextTest(); michael@0: break; michael@0: case 9: michael@0: is(countDisabledHosts(), 1, "Verify disabled host added"); michael@0: runNextTest(); michael@0: break; michael@0: case 10: michael@0: is(countDisabledHosts(), 0, "Verify disabled host removed"); michael@0: runNextTest(); michael@0: break; michael@0: } michael@0: } michael@0: } michael@0: }; michael@0: michael@0: SimpleTest.waitForFocus(startTest, pmDialog); michael@0: michael@0: function createLogins() { michael@0: let login; michael@0: for (let i = 0; i < LOGIN_COUNT; i++) { michael@0: login = new nsLoginInfo(LOGIN_HOST + "?n=" + i, LOGIN_HOST + "?n=" + i, michael@0: null, "user" + i, "password" + i, "u" + i, "p" + i); michael@0: logins.push(login); michael@0: } michael@0: modifiedLogin = new nsLoginInfo(LOGIN_HOST + "?n=0", LOGIN_HOST + "?n=0", michael@0: null, "user0", "newpassword0", "u0", "p0"); michael@0: is(logins.length, LOGIN_COUNT, "Verify logins created"); michael@0: } michael@0: michael@0: function countDisabledHosts() { michael@0: let doc = pmexDialog.document; michael@0: let rejectsTree = doc.getElementById("rejectsTree"); michael@0: return rejectsTree.view.rowCount; michael@0: } michael@0: michael@0: function countLogins() { michael@0: let doc = pmDialog.document; michael@0: let signonsTree = doc.getElementById("signonsTree"); michael@0: return signonsTree.view.rowCount; michael@0: } michael@0: michael@0: function getLoginOrder() { michael@0: let doc = pmDialog.document; michael@0: let signonsTree = doc.getElementById("signonsTree"); michael@0: let column = signonsTree.columns[0]; // host column michael@0: let order = []; michael@0: for (let i = 0; i < signonsTree.view.rowCount; i++) { michael@0: order.push(signonsTree.view.getCellText(i, column)); michael@0: } michael@0: return order.join(','); michael@0: } michael@0: michael@0: function getLoginPassword() { michael@0: let doc = pmDialog.document; michael@0: let loginsTree = doc.getElementById("signonsTree"); michael@0: let column = loginsTree.columns[2]; // password column michael@0: return loginsTree.view.getCellText(0, column); michael@0: } michael@0: michael@0: function startTest() { michael@0: Services.obs.addObserver( michael@0: testObserver, "passwordmgr-dialog-updated", false); michael@0: is(countLogins(), 0, "Verify starts with 0 logins"); michael@0: createLogins(); michael@0: runNextTest(); michael@0: } michael@0: michael@0: function runNextTest() { michael@0: switch (++testNumber) { michael@0: case 1: // add the logins michael@0: for (let i = 0; i < logins.length; i++) { michael@0: loginCounter++; michael@0: loginOrder = getLoginOrder(); michael@0: Services.logins.addLogin(logins[i]); michael@0: } michael@0: break; michael@0: case 6: // modify a login michael@0: loginOrder = getLoginOrder(); michael@0: Services.logins.modifyLogin(logins[0], modifiedLogin); michael@0: break; michael@0: case 7: // remove a login michael@0: loginCounter--; michael@0: loginOrder = getLoginOrder(); michael@0: Services.logins.removeLogin(modifiedLogin); michael@0: break; michael@0: case 8: // remove all logins michael@0: Services.logins.removeAllLogins(); michael@0: break; michael@0: case 9: // save a disabled host michael@0: pmDialog.close(); michael@0: SimpleTest.waitForFocus(function() { michael@0: Services.logins.setLoginSavingEnabled(LOGIN_HOST, false); michael@0: }, pmexDialog); michael@0: break; michael@0: case 10: // remove a disabled host michael@0: Services.logins.setLoginSavingEnabled(LOGIN_HOST, true); michael@0: break; michael@0: case 11: // finish michael@0: Services.obs.removeObserver( michael@0: testObserver, "passwordmgr-dialog-updated", false); michael@0: pmexDialog.close(); michael@0: finish(); michael@0: break; michael@0: } michael@0: } michael@0: }