mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
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.
This commit is contained in:
parent
b4c21f0962
commit
5c2e99cf97
@ -1810,6 +1810,17 @@ HttpBaseChannel::SetupReplacementChannel(nsIURI *newURI,
|
||||
// convey the new redirection limit
|
||||
httpChannel->SetRedirectionLimit(mRedirectionLimit - 1);
|
||||
|
||||
// convey the Accept header value
|
||||
{
|
||||
nsAutoCString oldAcceptValue;
|
||||
nsresult hasHeader = mRequestHead.GetHeader(nsHttp::Accept, oldAcceptValue);
|
||||
if (NS_SUCCEEDED(hasHeader)) {
|
||||
httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("Accept"),
|
||||
oldAcceptValue,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIHttpChannelInternal> httpInternal = do_QueryInterface(newChannel);
|
||||
if (httpInternal) {
|
||||
// convey the mForceAllowThirdPartyCookie flag
|
||||
|
49
netwerk/test/unit/test_bug401564.js
Normal file
49
netwerk/test/unit/test_bug401564.js
Normal file
@ -0,0 +1,49 @@
|
||||
/* -*- 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();
|
||||
}
|
@ -96,6 +96,7 @@ skip-if = "FTP channel implementation needs to migrate to the new cache backend
|
||||
[test_bug380994.js]
|
||||
[test_bug388281.js]
|
||||
[test_bug396389.js]
|
||||
[test_bug401564.js]
|
||||
[test_bug411952.js]
|
||||
[test_bug412945.js]
|
||||
[test_bug414122.js]
|
||||
|
Loading…
Reference in New Issue
Block a user