diff --git a/content/base/test/file_bug945152.jar b/content/base/test/file_bug945152.jar new file mode 100644 index 000000000000..23cc979b170d Binary files /dev/null and b/content/base/test/file_bug945152.jar differ diff --git a/content/base/test/file_bug945152_worker.js b/content/base/test/file_bug945152_worker.js new file mode 100644 index 000000000000..c0520bbd83a9 --- /dev/null +++ b/content/base/test/file_bug945152_worker.js @@ -0,0 +1,98 @@ +var gData1 = "TEST_DATA_1:ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +var gData2 = "TEST_DATA_2:1234567890"; +var gPaddingChar = '.'; +var gPaddingSize = 10000; +var gPadding = ""; + +for (var i = 0; i < gPaddingSize; i++) { + gPadding += gPaddingChar; +} + +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(response, data_head, cb) { + ok(response, "Data is non-null"); + var str = String.fromCharCode.apply(null, Uint8Array(response)); + ok(str.length == data_head.length + gPaddingSize, "Data size is correct"); + ok(str.slice(0, data_head.length) == data_head, "Data head is correct"); + ok(str.slice(data_head.length) == gPadding, "Data padding is correct"); + cb(); +} + +self.onmessage = function onmessage(event) { + + function test_mapped_sync() { + var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true}); + xhr.open('GET', 'jar:http://example.org/tests/content/base/test/file_bug945152.jar!/data_1.txt', false); + xhr.responseType = 'arraybuffer'; + xhr.send(); + if (xhr.status) { + ok(xhr.status == 200, "Status is 200"); + var ct = xhr.getResponseHeader("Content-Type"); + ok(ct.indexOf("mem-mapped") != -1, "Data is memory-mapped"); + checkData(xhr.response, gData1, runTests); + } + } + + function test_mapped_async() { + var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true}); + xhr.open('GET', 'jar:http://example.org/tests/content/base/test/file_bug945152.jar!/data_1.txt'); + xhr.responseType = 'arraybuffer'; + xhr.onreadystatechange = function() { + if (xhr.readyState !== xhr.DONE) { + return; + } + if (xhr.status) { + ok(xhr.status == 200, "Status is 200"); + var ct = xhr.getResponseHeader("Content-Type"); + ok(ct.indexOf("mem-mapped") != -1, "Data is memory-mapped"); + checkData(xhr.response, gData1, runTests); + } + } + xhr.send(); + } + + // Make sure array buffer retrieved from compressed file in package is + // handled by memory allocation instead of memory mapping. + function test_non_mapped() { + var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true}); + xhr.open('GET', 'jar:http://example.org/tests/content/base/test/file_bug945152.jar!/data_2.txt'); + xhr.responseType = 'arraybuffer'; + xhr.onreadystatechange = function() { + if (xhr.readyState !== xhr.DONE) { + return; + } + if (xhr.status) { + ok(xhr.status == 200, "Status is 200"); + var ct = xhr.getResponseHeader("Content-Type"); + ok(ct.indexOf("mem-mapped") == -1, "Data is not memory-mapped"); + checkData(xhr.response, gData2, runTests); + } + } + xhr.send(); + } + + var tests = [ + test_mapped_sync, + test_mapped_async, + test_non_mapped + ]; + + function runTests() { + if (!tests.length) { + postMessage({type: 'finish' }); + return; + } + + var test = tests.shift(); + test(); + } + + runTests(); +}; diff --git a/content/base/test/mochitest.ini b/content/base/test/mochitest.ini index 7c9270779a17..408d081a5d6f 100644 --- a/content/base/test/mochitest.ini +++ b/content/base/test/mochitest.ini @@ -135,6 +135,8 @@ support-files = file_bug902350.html file_bug902350_frame.html file_bug907892.html + file_bug945152.jar + file_bug945152_worker.js file_general_document.html file_html_in_xhr.html file_html_in_xhr.sjs @@ -544,6 +546,8 @@ skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #needs plugin suppor [test_bug907892.html] [test_bug922681.html] [test_bug927196.html] +[test_bug945152.html] +run-if = os == 'linux' [test_caretPositionFromPoint.html] [test_classList.html] # This test fails on the Mac for some reason diff --git a/content/base/test/test_bug945152.html b/content/base/test/test_bug945152.html new file mode 100644 index 000000000000..3f7144f158c7 --- /dev/null +++ b/content/base/test/test_bug945152.html @@ -0,0 +1,51 @@ + + + + + + Test for Bug 945152 + + + + +Mozilla Bug 945152 +

+ +
+
+
+ +