1<html>
2<body onload=init()>
3
4<p>Tests if input chars are secured correctly
5<input type='text' id='textnode' />
6<input type='password' id='passnode' />
7<ul id="console"></ul>
8<script language="javascript" type="text/javascript">
9
10var tests = [
11 //format: node_id, [preedit1, preedit2,...,commit_text], text_length, secured_right_after?, secured_after_delay?
12 ["textnode", ['2','2','b'], 1, false, false], // test text input is not secured any time.
13 ["passnode", ['2','2','b'], 1, false, true], // test password (when only 1 char) is only secured after a delay.
14 ["passnode", ['3','3','3','f'], 2, false, true],// test password (when more than 1 char) is only secured after a delay.
15 ["passnode", ['backspace'], 1, true, true] // test password is secured all the time when deleting.
16 ];
17
18var testIdx = -1;
19
20function secureChar()
21{
22 var element = document.getElementById('passnode');
23 var securechar = document.defaultView.getComputedStyle(element, "").getPropertyValue("-webkit-text-security");
24 switch(securechar) {
25 case "square":
26 return String.fromCharCode(0x25A0);
27 case "disc":
28 return String.fromCharCode(0x2022);
29 case "circle":
30 return String.fromCharCode(0x25E6);
31 }
32}
33
34function secureText(textLength)
35{
36 var text = "";
37 for(var counter=0; counter<textLength; counter++)
38 text += secureChar();
39 return text;
40}
41
42function log(msg)
43{
44 var console = document.getElementById("console");
45 var li = document.createElement("li");
46 li.appendChild(document.createTextNode(msg));
47 console.appendChild(li);
48}
49
50function assert(expected, actual, msg)
51{
52 if (expected != actual)
53 log("Error: " + msg + " expected=" + expected + ", actual=" + actual);
54 else
55 log("Success: " + msg + " expected=" + expected + ", actual=" + actual);
56}
57
58function run()
59{
60 var expectedSecureTextLen;
61 if (testIdx >= 0) {
62 expectedSecureTextLen = tests[testIdx][2];
63 textInputController.doCommand("moveForward:");
64 assert(tests[testIdx][4], window.find(secureText(expectedSecureTextLen), false, true), "secured after delay.");
65 }
66 testIdx++;
67 if (testIdx >= tests.length) {
68 layoutTestController.notifyDone();
69 return;
70 }
71
72 var node = document.getElementById(tests[testIdx][0]);
73 node.focus();
74 textInputController.doCommand("moveForward:");
75
76 expectedSecureTextLen = tests[testIdx][2];
77 var charSequence = tests[testIdx][1];
78 for(var i = 0; i < charSequence.length - 1; i++) {
79 textInputController.setMarkedText(charSequence[i], node.value.length, node.value.length);
80 }
81 if (charSequence[charSequence.length - 1] == "backspace") {
82 textInputController.doCommand("deleteBackward:");
83 } else {
84 textInputController.insertText(charSequence[charSequence.length - 1]);
85 }
86 assert(tests[testIdx][3], window.find(secureText(expectedSecureTextLen), false, true), "secured right after.");
87 window.setTimeout(run, 1200);
88}
89
90function init()
91{
92 if (window.layoutTestController) {
93 layoutTestController.dumpAsText();
94 layoutTestController.waitUntilDone();
95 run();
96 }
97}
98</script>
99</body>
100</html>
101