michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: Cu.import("resource://testing-common/httpd.js"); michael@0: Cu.import("resource://services-sync/resource.js"); michael@0: michael@0: function run_test() { michael@0: initTestLogging("Trace"); michael@0: run_next_test(); michael@0: } michael@0: michael@0: let httpServer = new HttpServer(); michael@0: httpServer.registerPathHandler("/content", contentHandler); michael@0: httpServer.start(-1); michael@0: michael@0: const HTTP_PORT = httpServer.identity.primaryPort; michael@0: const TEST_URL = "http://localhost:" + HTTP_PORT + "/content"; michael@0: const BODY = "response body"; michael@0: michael@0: // Keep headers for later inspection. michael@0: let auth = null; michael@0: let foo = null; michael@0: function contentHandler(metadata, response) { michael@0: _("Handling request."); michael@0: auth = metadata.getHeader("Authorization"); michael@0: foo = metadata.getHeader("X-Foo"); michael@0: michael@0: _("Extracted headers. " + auth + ", " + foo); michael@0: michael@0: response.setHeader("Content-Type", "text/plain"); michael@0: response.bodyOutputStream.write(BODY, BODY.length); michael@0: } michael@0: michael@0: // Set a proxy function to cause an internal redirect. michael@0: function triggerRedirect() { michael@0: const PROXY_FUNCTION = "function FindProxyForURL(url, host) {" + michael@0: " return 'PROXY a_non_existent_domain_x7x6c572v:80; " + michael@0: "PROXY localhost:" + HTTP_PORT + "';" + michael@0: "}"; michael@0: michael@0: let prefsService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService); michael@0: let prefs = prefsService.getBranch("network.proxy."); michael@0: prefs.setIntPref("type", 2); michael@0: prefs.setCharPref("autoconfig_url", "data:text/plain," + PROXY_FUNCTION); michael@0: } michael@0: michael@0: add_test(function test_headers_copied() { michael@0: triggerRedirect(); michael@0: michael@0: _("Issuing request."); michael@0: let resource = new Resource(TEST_URL); michael@0: resource.setHeader("Authorization", "Basic foobar"); michael@0: resource.setHeader("X-Foo", "foofoo"); michael@0: michael@0: let result = resource.get(TEST_URL); michael@0: _("Result: " + result); michael@0: michael@0: do_check_eq(result, BODY); michael@0: do_check_eq(auth, "Basic foobar"); michael@0: do_check_eq(foo, "foofoo"); michael@0: michael@0: httpServer.stop(run_next_test); michael@0: });