<!DOCTYPE HTML> <html> <head> <title>Test for icon filenames</title> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> </head> <body> <pre id="test"> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); // We want to make sure that moz-icon URIs with non-ascii characters work. To that // end, we compare the rendering of an icon without non-ascii characters to that // of one that does include such characters. // First, obtain the file URI to the ourselves: var chromeURI = location.href; var io = Components.classes['@mozilla.org/network/io-service;1'] .getService(Components.interfaces.nsIIOService); chromeURI = io.newURI(chromeURI, null, null); var chromeReg = Components.classes["@mozilla.org/chrome/chrome-registry;1"] .getService(Components.interfaces.nsIChromeRegistry); fileURI = chromeReg.convertChromeURL(chromeURI); fileURI.QueryInterface(Components.interfaces.nsIFileURL); var self = fileURI.file; // Check if the non-ascii-named icon is still hanging around from a previous test var dest = self.parent; dest.append("\u263a.ico"); if (dest.exists()) { dest.remove(false); } // Copy the source icon so that we have an identical icon with non-ascii characters // in its name var src = self.parent; src.append("bug415761.ico"); src.copyTo(null, dest.leafName); // Now load both icons in an Image() with a moz-icon URI var testImage = new Image(); var refImage = new Image(); var loadedImages = 0; testImage.onload = refImage.onload = function() { loadedImages++; if (loadedImages == 2) { finishTest(); } }; testImage.onerror = refImage.onerror = function() { testImage.onload = refImage.onload = function() {}; ok(false, "Icon did not load successfully"); SimpleTest.finish(); }; function finishTest() { ok(true, "Both icons loaded successfully"); // Render the reference to a canvas var refCanvas = document.createElement("canvas"); refCanvas.setAttribute("height", 32); refCanvas.setAttribute("width", 32); refCanvas.getContext('2d').drawImage(refImage, 0, 0, 32, 32); // Render the icon with a non-ascii character in its name to a canvas var testCanvas = document.createElement("canvas"); testCanvas.setAttribute("height", 32); testCanvas.setAttribute("width", 32); testCanvas.getContext('2d').drawImage(testImage, 0, 0, 32, 32); // Assert that they should be the same. assertSnapshots(refCanvas, testCanvas, true, 0, "icon", "reference icon"); SimpleTest.finish(); }; var testURI = io.newFileURI(dest).spec; var refURI = io.newFileURI(src).spec; testImage.src = "moz-icon:" + testURI; refImage.src = "moz-icon:" + refURI; SimpleTest.registerCleanupFunction(function() { // Remove the copied file if it exists. if (dest.exists()) { dest.remove(false); } }); </script> </pre> </body> </html>