michael@0: Cu.import("resource://testing-common/httpd.js"); michael@0: michael@0: var httpserver = new HttpServer(); michael@0: var index = 0; michael@0: var tests = [ michael@0: {url: "/test/cegzip1", michael@0: flags: CL_EXPECT_GZIP, michael@0: ce: "gzip", michael@0: body: [ michael@0: 0x1f, 0x8b, 0x08, 0x08, 0x5a, 0xa0, 0x31, 0x4f, 0x00, 0x03, 0x74, 0x78, 0x74, 0x00, 0x2b, 0xc9, michael@0: 0xc8, 0x2c, 0x56, 0x00, 0xa2, 0x92, 0xd4, 0xe2, 0x12, 0x43, 0x2e, 0x00, 0xb9, 0x23, 0xd7, 0x3b, michael@0: 0x0e, 0x00, 0x00, 0x00], michael@0: datalen: 14 // the data length of the uncompressed document michael@0: }, michael@0: michael@0: {url: "/test/cegzip2", michael@0: flags: CL_EXPECT_GZIP, michael@0: ce: "gzip, gzip", michael@0: body: [ michael@0: 0x1f, 0x8b, 0x08, 0x00, 0x72, 0xa1, 0x31, 0x4f, 0x00, 0x03, 0x93, 0xef, 0xe6, 0xe0, 0x88, 0x5a, michael@0: 0x60, 0xe8, 0xcf, 0xc0, 0x5c, 0x52, 0x51, 0xc2, 0xa0, 0x7d, 0xf2, 0x84, 0x4e, 0x18, 0xc3, 0xa2, michael@0: 0x49, 0x57, 0x1e, 0x09, 0x39, 0xeb, 0x31, 0xec, 0x54, 0xbe, 0x6e, 0xcd, 0xc7, 0xc0, 0xc0, 0x00, michael@0: 0x00, 0x6e, 0x90, 0x7a, 0x85, 0x24, 0x00, 0x00, 0x00], michael@0: datalen: 14 // the data length of the uncompressed document michael@0: }, michael@0: ]; michael@0: michael@0: function setupChannel(url) { michael@0: var ios = Components.classes["@mozilla.org/network/io-service;1"]. michael@0: getService(Ci.nsIIOService); michael@0: var chan = ios.newChannel("http://localhost:" + michael@0: httpserver.identity.primaryPort + url, "", null); michael@0: return chan; michael@0: } michael@0: michael@0: function startIter() { michael@0: var channel = setupChannel(tests[index].url); michael@0: channel.asyncOpen(new ChannelListener(completeIter, channel, tests[index].flags), null); michael@0: } michael@0: michael@0: function completeIter(request, data, ctx) { michael@0: do_check_true(data.length == tests[index].datalen); michael@0: if (++index < tests.length) { michael@0: startIter(); michael@0: } else { michael@0: httpserver.stop(do_test_finished); michael@0: } michael@0: } michael@0: michael@0: function run_test() { michael@0: httpserver.registerPathHandler("/test/cegzip1", handler); michael@0: httpserver.registerPathHandler("/test/cegzip2", handler); michael@0: httpserver.start(-1); michael@0: michael@0: startIter(); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: function handler(metadata, response) { michael@0: response.setStatusLine(metadata.httpVersion, 200, "OK"); michael@0: response.setHeader("Content-Type", "text/plain", false); michael@0: response.setHeader("Content-Encoding", tests[index].ce, false); michael@0: response.setHeader("Content-Length", "" + tests[index].body.length, false); michael@0: michael@0: var bos = Components.classes["@mozilla.org/binaryoutputstream;1"] michael@0: .createInstance(Components.interfaces.nsIBinaryOutputStream); michael@0: bos.setOutputStream(response.bodyOutputStream); michael@0: michael@0: response.processAsync(); michael@0: bos.writeByteArray(tests[index].body, tests[index].body.length); michael@0: response.finish(); michael@0: } michael@0: