<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Test for Handling of unsafe bidi chars</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <p id="display"></p> <iframe id="test"></iframe> <script type="text/javascript"> <![CDATA[ var unsafeBidiChars = [ "\xe2\x80\xaa", // LRE "\xe2\x80\xab", // RLE "\xe2\x80\xac", // PDF "\xe2\x80\xad", // LRO "\xe2\x80\xae" // RLO ]; var tests = [ "{1}.test", "{1}File.test", "Fi{1}le.test", "File{1}.test", "File.{1}test", "File.te{1}st", "File.test{1}", "File.{1}", ]; function replace(name, x) { return name.replace(/\{1\}/, x); } function sanitize(name) { return replace(name, '_'); } add_task(function* () { let url = SimpleTest.getTestFileURL("unsafeBidi_chromeScript.js"); let chromeScript = SpecialPowers.loadChromeScript(url); for (let test of tests) { for (let char of unsafeBidiChars) { let promiseName = new Promise(function(resolve) { chromeScript.addMessageListener("suggestedFileName", function listener(data) { chromeScript.removeMessageListener("suggestedFileName", listener); resolve(data); }); }); let name = replace(test, char); let expected = sanitize(test); document.getElementById("test").src = "unsafeBidiFileName.sjs?name=" + encodeURIComponent(name); is((yield promiseName), expected, "got the expected sanitized name"); } } let promise = new Promise(function(resolve) { chromeScript.addMessageListener("unregistered", function listener() { chromeScript.removeMessageListener("unregistered", listener); resolve(); }); }); chromeScript.sendAsyncMessage("unregister"); yield promise; chromeScript.destroy(); }); ]]> </script> </body> </html>