1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/components/passwordmgr/test/browser/browser_passwordmgr_observers.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,154 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +function test() { 1.8 + waitForExplicitFinish(); 1.9 + 1.10 + const LOGIN_HOST = "http://example.com"; 1.11 + const LOGIN_COUNT = 5; 1.12 + 1.13 + let nsLoginInfo = new Components.Constructor( 1.14 + "@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init"); 1.15 + let pmDialog = window.openDialog( 1.16 + "chrome://passwordmgr/content/passwordManager.xul", 1.17 + "Toolkit:PasswordManager", ""); 1.18 + let pmexDialog = window.openDialog( 1.19 + "chrome://passwordmgr/content/passwordManagerExceptions.xul", 1.20 + "Toolkit:PasswordManagerExceptions", ""); 1.21 + let logins = []; 1.22 + let loginCounter = 0; 1.23 + let loginOrder = null; 1.24 + let modifiedLogin; 1.25 + let testNumber = 0; 1.26 + let testObserver = { 1.27 + observe: function (subject, topic, data) { 1.28 + if (topic == "passwordmgr-dialog-updated") { 1.29 + switch (testNumber) { 1.30 + case 1: 1.31 + case 2: 1.32 + case 3: 1.33 + case 4: 1.34 + case 5: 1.35 + is(countLogins(), loginCounter, "Verify login added"); 1.36 + ok(getLoginOrder().startsWith(loginOrder), "Verify login order"); 1.37 + runNextTest(); 1.38 + break; 1.39 + case 6: 1.40 + is(countLogins(), loginCounter, "Verify login count"); 1.41 + is(getLoginOrder(), loginOrder, "Verify login order"); 1.42 + is(getLoginPassword(), "newpassword0", "Verify login modified"); 1.43 + runNextTest(); 1.44 + break; 1.45 + case 7: 1.46 + is(countLogins(), loginCounter, "Verify login removed"); 1.47 + ok(loginOrder.endsWith(getLoginOrder()), "Verify login order"); 1.48 + runNextTest(); 1.49 + break; 1.50 + case 8: 1.51 + is(countLogins(), 0, "Verify all logins removed"); 1.52 + runNextTest(); 1.53 + break; 1.54 + case 9: 1.55 + is(countDisabledHosts(), 1, "Verify disabled host added"); 1.56 + runNextTest(); 1.57 + break; 1.58 + case 10: 1.59 + is(countDisabledHosts(), 0, "Verify disabled host removed"); 1.60 + runNextTest(); 1.61 + break; 1.62 + } 1.63 + } 1.64 + } 1.65 + }; 1.66 + 1.67 + SimpleTest.waitForFocus(startTest, pmDialog); 1.68 + 1.69 + function createLogins() { 1.70 + let login; 1.71 + for (let i = 0; i < LOGIN_COUNT; i++) { 1.72 + login = new nsLoginInfo(LOGIN_HOST + "?n=" + i, LOGIN_HOST + "?n=" + i, 1.73 + null, "user" + i, "password" + i, "u" + i, "p" + i); 1.74 + logins.push(login); 1.75 + } 1.76 + modifiedLogin = new nsLoginInfo(LOGIN_HOST + "?n=0", LOGIN_HOST + "?n=0", 1.77 + null, "user0", "newpassword0", "u0", "p0"); 1.78 + is(logins.length, LOGIN_COUNT, "Verify logins created"); 1.79 + } 1.80 + 1.81 + function countDisabledHosts() { 1.82 + let doc = pmexDialog.document; 1.83 + let rejectsTree = doc.getElementById("rejectsTree"); 1.84 + return rejectsTree.view.rowCount; 1.85 + } 1.86 + 1.87 + function countLogins() { 1.88 + let doc = pmDialog.document; 1.89 + let signonsTree = doc.getElementById("signonsTree"); 1.90 + return signonsTree.view.rowCount; 1.91 + } 1.92 + 1.93 + function getLoginOrder() { 1.94 + let doc = pmDialog.document; 1.95 + let signonsTree = doc.getElementById("signonsTree"); 1.96 + let column = signonsTree.columns[0]; // host column 1.97 + let order = []; 1.98 + for (let i = 0; i < signonsTree.view.rowCount; i++) { 1.99 + order.push(signonsTree.view.getCellText(i, column)); 1.100 + } 1.101 + return order.join(','); 1.102 + } 1.103 + 1.104 + function getLoginPassword() { 1.105 + let doc = pmDialog.document; 1.106 + let loginsTree = doc.getElementById("signonsTree"); 1.107 + let column = loginsTree.columns[2]; // password column 1.108 + return loginsTree.view.getCellText(0, column); 1.109 + } 1.110 + 1.111 + function startTest() { 1.112 + Services.obs.addObserver( 1.113 + testObserver, "passwordmgr-dialog-updated", false); 1.114 + is(countLogins(), 0, "Verify starts with 0 logins"); 1.115 + createLogins(); 1.116 + runNextTest(); 1.117 + } 1.118 + 1.119 + function runNextTest() { 1.120 + switch (++testNumber) { 1.121 + case 1: // add the logins 1.122 + for (let i = 0; i < logins.length; i++) { 1.123 + loginCounter++; 1.124 + loginOrder = getLoginOrder(); 1.125 + Services.logins.addLogin(logins[i]); 1.126 + } 1.127 + break; 1.128 + case 6: // modify a login 1.129 + loginOrder = getLoginOrder(); 1.130 + Services.logins.modifyLogin(logins[0], modifiedLogin); 1.131 + break; 1.132 + case 7: // remove a login 1.133 + loginCounter--; 1.134 + loginOrder = getLoginOrder(); 1.135 + Services.logins.removeLogin(modifiedLogin); 1.136 + break; 1.137 + case 8: // remove all logins 1.138 + Services.logins.removeAllLogins(); 1.139 + break; 1.140 + case 9: // save a disabled host 1.141 + pmDialog.close(); 1.142 + SimpleTest.waitForFocus(function() { 1.143 + Services.logins.setLoginSavingEnabled(LOGIN_HOST, false); 1.144 + }, pmexDialog); 1.145 + break; 1.146 + case 10: // remove a disabled host 1.147 + Services.logins.setLoginSavingEnabled(LOGIN_HOST, true); 1.148 + break; 1.149 + case 11: // finish 1.150 + Services.obs.removeObserver( 1.151 + testObserver, "passwordmgr-dialog-updated", false); 1.152 + pmexDialog.close(); 1.153 + finish(); 1.154 + break; 1.155 + } 1.156 + } 1.157 +}