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/test", michael@0: datalen : 16}, michael@0: michael@0: // Test that the http channel fails and the response body is suppressed michael@0: // bug 255119 michael@0: {url: "/test/test", michael@0: responseheader: [ "Location: javascript:alert()"], michael@0: flags : CL_EXPECT_FAILURE, michael@0: datalen : 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/test", 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: var body = "thequickbrownfox"; michael@0: response.setHeader("Content-Type", "text/plain", false); michael@0: michael@0: var header = tests[index].responseheader; michael@0: if (header != undefined) { michael@0: for (var i = 0; i < header.length; i++) { michael@0: var splitHdr = header[i].split(": "); michael@0: response.setHeader(splitHdr[0], splitHdr[1], false); michael@0: } michael@0: } michael@0: michael@0: response.setStatusLine(metadata.httpVersion, 302, "Redirected"); michael@0: response.bodyOutputStream.write(body, body.length); michael@0: } michael@0: