diff options
Diffstat (limited to 'dom/base/test/file_bug1008126_worker.js')
-rw-r--r-- | dom/base/test/file_bug1008126_worker.js | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/dom/base/test/file_bug1008126_worker.js b/dom/base/test/file_bug1008126_worker.js new file mode 100644 index 0000000000..aaba278de5 --- /dev/null +++ b/dom/base/test/file_bug1008126_worker.js @@ -0,0 +1,151 @@ +/** + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gEntry1 = "data_1.txt"; +var gEntry2 = "data_2.txt"; +var gEntry3 = "data_big.txt"; +var gPaddingChar = "."; +var gPaddingSize = 10000; +var gPadding = ""; +for (var i = 0; i < gPaddingSize; i++) { + gPadding += gPaddingChar; +} +var gData1 = "TEST_DATA_1:ABCDEFGHIJKLMNOPQRSTUVWXYZ" + gPadding; +var gData2 = "TEST_DATA_2:1234567890" + gPadding; + +function ok(a, msg) { + postMessage({ type: "status", status: !!a, msg }); +} + +function is(a, b, msg) { + postMessage({ type: "status", status: a === b, msg }); +} + +function checkData(xhr, data, mapped, cb) { + var ct = xhr.getResponseHeader("Content-Type"); + if (mapped) { + ok(ct.includes("mem-mapped"), "Data is memory-mapped"); + } else { + ok(!ct.includes("mem-mapped"), "Data is not memory-mapped"); + } + ok(xhr.response, "Data is non-null"); + var str = String.fromCharCode.apply(null, new Uint8Array(xhr.response)); + ok(str == data, "Data is correct"); + cb(); +} + +self.onmessage = function onmessage(event) { + var jar = event.data; + + function makeJarURL(entry) { + return "jar:" + jar + "!/" + entry; + } + + var xhr = new XMLHttpRequest({ mozAnon: true, mozSystem: true }); + + function reset_event_hander() { + xhr.onerror = function (e) { + ok(false, "Error: " + e.error + "\n"); + }; + xhr.onprogress = null; + xhr.onreadystatechange = null; + xhr.onload = null; + xhr.onloadend = null; + } + + var readystatechangeCount = 0; + var loadCount = 0; + var loadendCount = 0; + + function checkEventCount(cb) { + ok( + readystatechangeCount == 1 && loadCount == 1 && loadendCount == 1, + "Saw all expected events" + ); + cb(); + } + + function test_multiple_events() { + ok(true, "Test multiple events"); + xhr.abort(); + + xhr.onreadystatechange = function () { + if (xhr.readyState == xhr.DONE) { + readystatechangeCount++; + checkData(xhr, gData2, false, function () {}); + } + }; + xhr.onload = function () { + loadCount++; + checkData(xhr, gData2, false, function () {}); + }; + xhr.onloadend = function () { + loadendCount++; + checkData(xhr, gData2, false, function () {}); + }; + xhr.open("GET", makeJarURL(gEntry2), false); + xhr.responseType = "arraybuffer"; + xhr.send(); + checkEventCount(runTests); + } + + function test_sync_xhr_data1() { + ok(true, "Test sync XHR with data1"); + xhr.open("GET", makeJarURL(gEntry1), false); + xhr.responseType = "arraybuffer"; + xhr.send(); + checkData(xhr, gData1, true, runTests); + } + + function test_sync_xhr_data2() { + ok(true, "Test sync XHR with data2"); + xhr.open("GET", makeJarURL(gEntry2), false); + xhr.responseType = "arraybuffer"; + xhr.send(); + checkData(xhr, gData2, false, runTests); + } + + function test_async_xhr_data1() { + ok(true, "Test async XHR with data1"); + xhr.onload = function () { + checkData(xhr, gData1, true, runTests); + }; + xhr.open("GET", makeJarURL(gEntry1), true); + xhr.responseType = "arraybuffer"; + xhr.send(); + } + + function test_async_xhr_data2() { + ok(true, "Test async XHR with data2"); + xhr.onload = function () { + checkData(xhr, gData2, false, runTests); + }; + xhr.open("GET", makeJarURL(gEntry2), true); + xhr.responseType = "arraybuffer"; + xhr.send(); + } + + var tests = [ + test_multiple_events, + test_sync_xhr_data1, + test_sync_xhr_data2, + test_async_xhr_data1, + test_async_xhr_data2, + ]; + + function runTests() { + if (!tests.length) { + postMessage({ type: "finish" }); + return; + } + + reset_event_hander(); + + var test = tests.shift(); + test(); + } + + runTests(); +}; |