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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=936340
-->
<head>
<title>Test for beacon</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=936340">Mozilla Bug 936340</a>
<p id="display"></p>
<div id="content">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
// not enabled by default yet.
SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({'set': [["beacon.enabled", true]]}, runNextTest);
function getBeaconServerStatus(callback) {
var request = new XMLHttpRequest();
request.open("GET", "http://mochi.test:8888/tests/dom/tests/mochitest/beacon/beacon-handler.sjs?getLastBeacon", true);
request.onload = function() {
if (request.readyState === request.DONE) {
callback(request.responseText);
}
};
request.send(null);
}
function createIframeWithData(data, mimetype, convert) {
beaconConvert = convert;
var frame = document.createElement("IFRAME");
frame.setAttribute("src", "beacon-frame.html");
frame.id = "frame";
frame.setAttribute("data", data.toString());
frame.setAttribute("mimetype", mimetype);
var c = document.getElementById("content");
c.appendChild(frame);
}
function beaconSent(result) {
// This function gets called from beacon-frame.html in the inner frame
// Check that the beacon was actually sent
ok(result, "Beacon was not sent")
// remove the frame.
var frame = document.getElementById("frame");
var data = frame.getAttribute("data");
var mimetype = frame.getAttribute("mimetype");
var c = document.getElementById("content");
c.removeChild(frame);
getBeaconServerStatus( function(response) {
console.log(response);
var result = JSON.parse(response);
is(result.data, data, "Beacon status should match expected. is: " + result.data + " should be: " + data);
is(result.mimetype, mimetype, "Beacon mimetype should match expected. is: " + result.mimetype + " should be: " + mimetype);
runNextTest();
});
}
function runNextTest() {
var test = tests.shift();
setTimeout(test, 0);
}
var beaconConvert = function() {};
function stringToArrayBuffer(input) {
var buffer = new ArrayBuffer(input.length * 2);
var array = new Uint16Array(buffer);
// dumbly copy over the bytes
for (var i = 0, len = input.length; i < len; i++) {
array[i] = input.charCodeAt(i);
}
return array;
}
function stringToBlob(input) {
var blob = new Blob([input], {type : 'text/html'});
return blob;
}
function stringToFormData(input) {
var formdata = new FormData();
formdata.append(input, new Blob(['hi']));
return formdata;
}
function identity(data) {
return data;
}
var tests = [
function() { createIframeWithData("hi!", "text/plain;charset=UTF-8", identity); },
function() { createIframeWithData("123", "application/octet-stream", stringToArrayBuffer); },
function() { createIframeWithData("abc", "text/html", stringToBlob); },
function() { createIframeWithData("qwerty", "multipart/form-data", stringToFormData); },
function() { SimpleTest.finish(); },
];
</script>
</pre>
</body>
</html>
|