gecko/netwerk/test/unit/test_bug401564.js
Scott West 5c2e99cf97 Bug 401564 - Test and fix for redirection losing Accept header. r=mcmanus
The test has a redirect where the initial GET request had Accept:
application/json, and ensures that this is also the type of the
redirected request.

The fix is done in the setup of the replicated HttpBaseChannel, where
the previous channel's Accept header is copied to the new one, if it
exists.
2014-02-26 09:03:14 -05:00

50 lines
1.5 KiB
JavaScript

/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
"use strict";
Cu.import("resource://testing-common/httpd.js");
var httpserver = null;
const noRedirectURI = "/content";
const pageValue = "Final page";
const acceptType = "application/json";
function redirectHandler(metadata, response)
{
response.setStatusLine(metadata.httpVersion, 302, "Moved Temporarily");
response.setHeader("Location", noRedirectURI, false);
}
function contentHandler(metadata, response)
{
do_check_eq(metadata.getHeader("Accept"), acceptType);
httpserver.stop(do_test_finished);
}
function dummyHandler(request, buffer)
{
}
function run_test()
{
httpserver = new HttpServer();
httpserver.registerPathHandler("/redirect", redirectHandler);
httpserver.registerPathHandler("/content", contentHandler);
httpserver.start(-1);
var prefs = Cc["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
prefs.setBoolPref("network.http.prompt-temp-redirect", false);
var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var chan = ios.newChannel("http://localhost:" +
httpserver.identity.primaryPort + "/redirect",
"",
null);
chan.QueryInterface(Ci.nsIHttpChannel);
chan.setRequestHeader("Accept", acceptType, false);
chan.asyncOpen(new ChannelListener(dummyHandler, null), null);
do_test_pending();
}