mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 16:46:26 +00:00
ba63607afd
This bug will make jar:http:// no longer eligible for the memory-mapping optimization tested in these test cases, so this patch changes them to use local files, which is the case that that optimization is meant for. Specifically, it changes them to chrome tests and pre-resolves the chrome: URL of the jar file so that nsJARChannel recognizes it as a local file. Note that the bug 945152 test jar file remains in the file list for plain mochitests as well as being added to chrome.ini; there is a test in another directory that uses it, and a later patch in this series will add another.
104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
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, new 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) {
|
|
var jar = event.data;
|
|
|
|
function makeJarURL(entry) {
|
|
return "jar:" + jar + "!/" + entry;
|
|
}
|
|
|
|
function test_mapped_sync() {
|
|
var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true});
|
|
xhr.open('GET', makeJarURL('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', makeJarURL('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', makeJarURL('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();
|
|
};
|