|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 function test() { |
|
5 waitForExplicitFinish(); |
|
6 |
|
7 const LOGIN_HOST = "http://example.com"; |
|
8 const LOGIN_COUNT = 5; |
|
9 |
|
10 let nsLoginInfo = new Components.Constructor( |
|
11 "@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init"); |
|
12 let pmDialog = window.openDialog( |
|
13 "chrome://passwordmgr/content/passwordManager.xul", |
|
14 "Toolkit:PasswordManager", ""); |
|
15 let pmexDialog = window.openDialog( |
|
16 "chrome://passwordmgr/content/passwordManagerExceptions.xul", |
|
17 "Toolkit:PasswordManagerExceptions", ""); |
|
18 let logins = []; |
|
19 let loginCounter = 0; |
|
20 let loginOrder = null; |
|
21 let modifiedLogin; |
|
22 let testNumber = 0; |
|
23 let testObserver = { |
|
24 observe: function (subject, topic, data) { |
|
25 if (topic == "passwordmgr-dialog-updated") { |
|
26 switch (testNumber) { |
|
27 case 1: |
|
28 case 2: |
|
29 case 3: |
|
30 case 4: |
|
31 case 5: |
|
32 is(countLogins(), loginCounter, "Verify login added"); |
|
33 ok(getLoginOrder().startsWith(loginOrder), "Verify login order"); |
|
34 runNextTest(); |
|
35 break; |
|
36 case 6: |
|
37 is(countLogins(), loginCounter, "Verify login count"); |
|
38 is(getLoginOrder(), loginOrder, "Verify login order"); |
|
39 is(getLoginPassword(), "newpassword0", "Verify login modified"); |
|
40 runNextTest(); |
|
41 break; |
|
42 case 7: |
|
43 is(countLogins(), loginCounter, "Verify login removed"); |
|
44 ok(loginOrder.endsWith(getLoginOrder()), "Verify login order"); |
|
45 runNextTest(); |
|
46 break; |
|
47 case 8: |
|
48 is(countLogins(), 0, "Verify all logins removed"); |
|
49 runNextTest(); |
|
50 break; |
|
51 case 9: |
|
52 is(countDisabledHosts(), 1, "Verify disabled host added"); |
|
53 runNextTest(); |
|
54 break; |
|
55 case 10: |
|
56 is(countDisabledHosts(), 0, "Verify disabled host removed"); |
|
57 runNextTest(); |
|
58 break; |
|
59 } |
|
60 } |
|
61 } |
|
62 }; |
|
63 |
|
64 SimpleTest.waitForFocus(startTest, pmDialog); |
|
65 |
|
66 function createLogins() { |
|
67 let login; |
|
68 for (let i = 0; i < LOGIN_COUNT; i++) { |
|
69 login = new nsLoginInfo(LOGIN_HOST + "?n=" + i, LOGIN_HOST + "?n=" + i, |
|
70 null, "user" + i, "password" + i, "u" + i, "p" + i); |
|
71 logins.push(login); |
|
72 } |
|
73 modifiedLogin = new nsLoginInfo(LOGIN_HOST + "?n=0", LOGIN_HOST + "?n=0", |
|
74 null, "user0", "newpassword0", "u0", "p0"); |
|
75 is(logins.length, LOGIN_COUNT, "Verify logins created"); |
|
76 } |
|
77 |
|
78 function countDisabledHosts() { |
|
79 let doc = pmexDialog.document; |
|
80 let rejectsTree = doc.getElementById("rejectsTree"); |
|
81 return rejectsTree.view.rowCount; |
|
82 } |
|
83 |
|
84 function countLogins() { |
|
85 let doc = pmDialog.document; |
|
86 let signonsTree = doc.getElementById("signonsTree"); |
|
87 return signonsTree.view.rowCount; |
|
88 } |
|
89 |
|
90 function getLoginOrder() { |
|
91 let doc = pmDialog.document; |
|
92 let signonsTree = doc.getElementById("signonsTree"); |
|
93 let column = signonsTree.columns[0]; // host column |
|
94 let order = []; |
|
95 for (let i = 0; i < signonsTree.view.rowCount; i++) { |
|
96 order.push(signonsTree.view.getCellText(i, column)); |
|
97 } |
|
98 return order.join(','); |
|
99 } |
|
100 |
|
101 function getLoginPassword() { |
|
102 let doc = pmDialog.document; |
|
103 let loginsTree = doc.getElementById("signonsTree"); |
|
104 let column = loginsTree.columns[2]; // password column |
|
105 return loginsTree.view.getCellText(0, column); |
|
106 } |
|
107 |
|
108 function startTest() { |
|
109 Services.obs.addObserver( |
|
110 testObserver, "passwordmgr-dialog-updated", false); |
|
111 is(countLogins(), 0, "Verify starts with 0 logins"); |
|
112 createLogins(); |
|
113 runNextTest(); |
|
114 } |
|
115 |
|
116 function runNextTest() { |
|
117 switch (++testNumber) { |
|
118 case 1: // add the logins |
|
119 for (let i = 0; i < logins.length; i++) { |
|
120 loginCounter++; |
|
121 loginOrder = getLoginOrder(); |
|
122 Services.logins.addLogin(logins[i]); |
|
123 } |
|
124 break; |
|
125 case 6: // modify a login |
|
126 loginOrder = getLoginOrder(); |
|
127 Services.logins.modifyLogin(logins[0], modifiedLogin); |
|
128 break; |
|
129 case 7: // remove a login |
|
130 loginCounter--; |
|
131 loginOrder = getLoginOrder(); |
|
132 Services.logins.removeLogin(modifiedLogin); |
|
133 break; |
|
134 case 8: // remove all logins |
|
135 Services.logins.removeAllLogins(); |
|
136 break; |
|
137 case 9: // save a disabled host |
|
138 pmDialog.close(); |
|
139 SimpleTest.waitForFocus(function() { |
|
140 Services.logins.setLoginSavingEnabled(LOGIN_HOST, false); |
|
141 }, pmexDialog); |
|
142 break; |
|
143 case 10: // remove a disabled host |
|
144 Services.logins.setLoginSavingEnabled(LOGIN_HOST, true); |
|
145 break; |
|
146 case 11: // finish |
|
147 Services.obs.removeObserver( |
|
148 testObserver, "passwordmgr-dialog-updated", false); |
|
149 pmexDialog.close(); |
|
150 finish(); |
|
151 break; |
|
152 } |
|
153 } |
|
154 } |