From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- netwerk/test/unit/test_redirect_history.js | 73 ++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 netwerk/test/unit/test_redirect_history.js (limited to 'netwerk/test/unit/test_redirect_history.js') diff --git a/netwerk/test/unit/test_redirect_history.js b/netwerk/test/unit/test_redirect_history.js new file mode 100644 index 0000000000..986aff2675 --- /dev/null +++ b/netwerk/test/unit/test_redirect_history.js @@ -0,0 +1,73 @@ +"use strict"; + +const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js"); +const ReferrerInfo = Components.Constructor( + "@mozilla.org/referrer-info;1", + "nsIReferrerInfo", + "init" +); + +XPCOMUtils.defineLazyGetter(this, "URL", function () { + return "http://localhost:" + httpServer.identity.primaryPort; +}); + +var httpServer = null; +var redirects = []; +const numRedirects = 10; + +function make_channel(url, callback, ctx) { + return NetUtil.newChannel({ uri: url, loadUsingSystemPrincipal: true }); +} + +const responseBody = "response body"; + +function contentHandler(request, response) { + response.setHeader("Content-Type", "text/plain"); + response.bodyOutputStream.write(responseBody, responseBody.length); +} + +function finish_test(request, buffer) { + Assert.equal(buffer, responseBody); + let chan = request.QueryInterface(Ci.nsIChannel); + let redirectChain = chan.loadInfo.redirectChain; + + Assert.equal(numRedirects - 1, redirectChain.length); + for (let i = 0; i < numRedirects - 1; ++i) { + let principal = redirectChain[i].principal; + Assert.equal(URL + redirects[i], principal.spec); + Assert.equal(redirectChain[i].referrerURI.spec, "http://test.com/"); + Assert.equal(redirectChain[i].remoteAddress, "127.0.0.1"); + } + httpServer.stop(do_test_finished); +} + +function redirectHandler(index, request, response) { + response.setStatusLine(request.httpVersion, 301, "Moved"); + let path = redirects[index + 1]; + response.setHeader("Location", URL + path, false); +} + +function run_test() { + httpServer = new HttpServer(); + for (let i = 0; i < numRedirects; ++i) { + var randomPath = "/redirect/" + Math.random(); + redirects.push(randomPath); + if (i < numRedirects - 1) { + httpServer.registerPathHandler(randomPath, redirectHandler.bind(this, i)); + } else { + // The last one doesn't redirect + httpServer.registerPathHandler( + redirects[numRedirects - 1], + contentHandler + ); + } + } + httpServer.start(-1); + + var chan = make_channel(URL + redirects[0]); + var uri = NetUtil.newURI("http://test.com"); + var httpChan = chan.QueryInterface(Ci.nsIHttpChannel); + httpChan.referrerInfo = new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY, true, uri); + chan.asyncOpen(new ChannelListener(finish_test, null)); + do_test_pending(); +} -- cgit v1.2.3