1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
<!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>
|