diff options
Diffstat (limited to 'dom/base/test/file_bug1008126_worker.js')
-rw-r--r-- | dom/base/test/file_bug1008126_worker.js | 176 |
1 files changed, 176 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 000000000..4c8b8e6dd --- /dev/null +++ b/dom/base/test/file_bug1008126_worker.js @@ -0,0 +1,176 @@ +/** + * 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: msg }); +} + +function is(a, b, msg) { + postMessage({type: "status", status: a === b, msg: msg }); +} + +function checkData(xhr, data, mapped, cb) { + var ct = xhr.getResponseHeader("Content-Type"); + if (mapped) { + ok(ct.indexOf("mem-mapped") != -1, "Data is memory-mapped"); + } else { + ok(ct.indexOf("mem-mapped") == -1, "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; + } + + function test_chunked_arraybuffer() { + ok(true, "Test chunked arraybuffer"); + + var lastIndex = 0; + xhr.onprogress = function(event) { + if (xhr.response) { + var buf = new Uint8Array(xhr.response); + var allMatched = true; + // The content of data cycles from 0 to 9 (i.e. 01234567890123......). + for (var i = 0; i < buf.length; i++) { + if (String.fromCharCode(buf[i]) != lastIndex % 10) { + allMatched = false; + break; + } + lastIndex++; + } + ok(allMatched, "Data chunk is correct. Loaded " + + event.loaded + "/" + event.total + " bytes."); + } + }; + xhr.onload = runTests; + xhr.open("GET", makeJarURL(gEntry3), true); + xhr.responseType = "moz-chunked-arraybuffer"; + xhr.send(); + } + + 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_chunked_arraybuffer, + 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(); +}; |