content/base/test/unit/test_bug553888.js

changeset 0
6474c204b198
     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 +}

mercurial