1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/unit/test_bug553888.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,60 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +Components.utils.import("resource://testing-common/httpd.js"); 1.9 + 1.10 +var server = new HttpServer(); 1.11 +server.start(-1); 1.12 + 1.13 +const SERVER_PORT = server.identity.primaryPort; 1.14 +const HTTP_BASE = "http://localhost:" + SERVER_PORT; 1.15 +const redirectPath = "/redirect"; 1.16 +const headerCheckPath = "/headerCheck"; 1.17 +const redirectURL = HTTP_BASE + redirectPath; 1.18 +const headerCheckURL = HTTP_BASE + headerCheckPath; 1.19 + 1.20 +function redirectHandler(metadata, response) { 1.21 + response.setStatusLine(metadata.httpVersion, 302, "Found"); 1.22 + response.setHeader("Location", headerCheckURL, false); 1.23 +} 1.24 + 1.25 +function headerCheckHandler(metadata, response) { 1.26 + try { 1.27 + let headerValue = metadata.getHeader("X-Custom-Header"); 1.28 + do_check_eq(headerValue, "present"); 1.29 + } catch(e) { 1.30 + do_throw("No header present after redirect"); 1.31 + } 1.32 + try { 1.33 + metadata.getHeader("X-Unwanted-Header"); 1.34 + do_throw("Unwanted header present after redirect"); 1.35 + } catch (x) { 1.36 + } 1.37 + response.setStatusLine(metadata.httpVersion, 200, "OK"); 1.38 + response.setHeader("Content-Type", "text/plain"); 1.39 + response.write(""); 1.40 +} 1.41 + 1.42 +function run_test() { 1.43 + server.registerPathHandler(redirectPath, redirectHandler); 1.44 + server.registerPathHandler(headerCheckPath, headerCheckHandler); 1.45 + 1.46 + do_test_pending(); 1.47 + var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"] 1.48 + .createInstance(Components.interfaces.nsIXMLHttpRequest); 1.49 + request.open("GET", redirectURL, true); 1.50 + request.setRequestHeader("X-Custom-Header", "present"); 1.51 + request.addEventListener("readystatechange", function() { 1.52 + if (request.readyState == 4) { 1.53 + do_check_eq(request.status, 200); 1.54 + server.stop(do_test_finished); 1.55 + } 1.56 + }, false); 1.57 + request.send(); 1.58 + try { 1.59 + request.setRequestHeader("X-Unwanted-Header", "present"); 1.60 + do_throw("Shouldn't be able to set a header after send"); 1.61 + } catch (x) { 1.62 + } 1.63 +}