|
1 <html xmlns="http://www.w3.org/1999/xhtml"> |
|
2 <head> |
|
3 <title>Test for Handling of unsafe bidi chars</title> |
|
4 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
5 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> |
|
6 </head> |
|
7 <body onload="load();"> |
|
8 <p id="display"></p> |
|
9 <iframe id="test"></iframe> |
|
10 <script type="text/javascript"> |
|
11 <![CDATA[ |
|
12 |
|
13 var unsafeBidiChars = { |
|
14 LRE: "\xe2\x80\xaa", |
|
15 RLE: "\xe2\x80\xab", |
|
16 PDF: "\xe2\x80\xac", |
|
17 LRO: "\xe2\x80\xad", |
|
18 RLO: "\xe2\x80\xae" |
|
19 }; |
|
20 |
|
21 var tests = [ |
|
22 "{1}.test", |
|
23 "{1}File.test", |
|
24 "Fi{1}le.test", |
|
25 "File{1}.test", |
|
26 "File.{1}test", |
|
27 "File.te{1}st", |
|
28 "File.test{1}", |
|
29 "File.{1}", |
|
30 ]; |
|
31 |
|
32 function replace(name, x) { |
|
33 return name.replace(/\{1\}/, x); |
|
34 } |
|
35 |
|
36 function sanitize(name) { |
|
37 return replace(name, '_'); |
|
38 } |
|
39 |
|
40 var gTests = []; |
|
41 function make_test(param, expected) { |
|
42 gTests.push({ |
|
43 param: param, |
|
44 expected: expected, |
|
45 }); |
|
46 } |
|
47 |
|
48 SimpleTest.waitForExplicitFinish(); |
|
49 |
|
50 function load() { |
|
51 var iframe = document.getElementById("test"); |
|
52 var gCallback = null; |
|
53 function run_test(test, cb) { |
|
54 var url = "unsafeBidiFileName.sjs?name=" + encodeURIComponent(test.param); |
|
55 gCallback = cb; |
|
56 iframe.src = url; |
|
57 } |
|
58 |
|
59 var gCounter = -1; |
|
60 function run_next_test() { |
|
61 if (++gCounter == gTests.length) |
|
62 finish_test(); |
|
63 else |
|
64 run_test(gTests[gCounter], run_next_test); |
|
65 } |
|
66 |
|
67 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); |
|
68 |
|
69 const HELPERAPP_DIALOG_CONTRACT = "@mozilla.org/helperapplauncherdialog;1"; |
|
70 const HELPERAPP_DIALOG_CID = SpecialPowers.wrap(SpecialPowers.Components).ID(SpecialPowers.Cc[HELPERAPP_DIALOG_CONTRACT].number); |
|
71 |
|
72 const FAKE_CID = SpecialPowers.Cc["@mozilla.org/uuid-generator;1"]. |
|
73 getService(SpecialPowers.Ci.nsIUUIDGenerator).generateUUID(); |
|
74 |
|
75 function HelperAppLauncherDialog() {} |
|
76 HelperAppLauncherDialog.prototype = { |
|
77 REASON_CANTHANDLE: 0, |
|
78 REASON_SERVERREQUEST: 1, |
|
79 REASON_TYPESNIFFED: 2, |
|
80 show: function(aLauncher, aWindowContext, aReason) { |
|
81 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); |
|
82 var test = gTests[gCounter]; |
|
83 is(aLauncher.suggestedFileName, test.expected, |
|
84 "The filename should be correctly sanitized"); |
|
85 gCallback(); |
|
86 }, |
|
87 promptForSaveToFile: function(aLauncher, aWindowContext, aDefaultFileName, aSuggestedFileExtension, aForcePrompt) { |
|
88 return null; |
|
89 }, |
|
90 QueryInterface: function(aIID) { |
|
91 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); |
|
92 if (aIID.equals(SpecialPowers.Ci.nsISupports) || |
|
93 aIID.equals(SpecialPowers.Ci.nsIHelperAppLauncherDialog)) |
|
94 return this; |
|
95 throw SpecialPowers.Cr.NS_ERROR_NO_INTERFACE; |
|
96 } |
|
97 }; |
|
98 |
|
99 var factory = { |
|
100 createInstance: function(aOuter, aIID) { |
|
101 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); |
|
102 if (aOuter != null) |
|
103 throw SpecialPowers.Cr.NS_ERROR_NO_AGGREGATION; |
|
104 return new HelperAppLauncherDialog().QueryInterface(aIID); |
|
105 } |
|
106 }; |
|
107 |
|
108 SpecialPowers.wrap(SpecialPowers.Components).manager |
|
109 .QueryInterface(SpecialPowers.Ci.nsIComponentRegistrar) |
|
110 .registerFactory(FAKE_CID, "", |
|
111 HELPERAPP_DIALOG_CONTRACT, |
|
112 factory); |
|
113 |
|
114 function finish_test() { |
|
115 SpecialPowers.wrap(SpecialPowers.Components).manager |
|
116 .QueryInterface(SpecialPowers.Ci.nsIComponentRegistrar) |
|
117 .registerFactory(HELPERAPP_DIALOG_CID, "", |
|
118 HELPERAPP_DIALOG_CONTRACT, |
|
119 null); |
|
120 SimpleTest.finish(); |
|
121 } |
|
122 |
|
123 var i,j; |
|
124 |
|
125 for (i = 0; i < tests.length; ++i) { |
|
126 for (j in unsafeBidiChars) { |
|
127 make_test(replace(tests[i], unsafeBidiChars[j]), |
|
128 sanitize(tests[i])); |
|
129 } |
|
130 } |
|
131 |
|
132 run_next_test(); |
|
133 } |
|
134 |
|
135 ]]> |
|
136 </script> |
|
137 </body> |
|
138 </html> |
|
139 |