diff options
Diffstat (limited to 'netwerk/test/unit/test_307_redirect.js')
-rw-r--r-- | netwerk/test/unit/test_307_redirect.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_307_redirect.js b/netwerk/test/unit/test_307_redirect.js new file mode 100644 index 000000000..fbbcdf000 --- /dev/null +++ b/netwerk/test/unit/test_307_redirect.js @@ -0,0 +1,91 @@ +Cu.import("resource://testing-common/httpd.js"); +Cu.import("resource://gre/modules/NetUtil.jsm"); + +XPCOMUtils.defineLazyGetter(this, "URL", function() { + return "http://localhost:" + httpserver.identity.primaryPort; +}); + +XPCOMUtils.defineLazyGetter(this, "uri", function() { + return URL + "/redirect"; +}); + +XPCOMUtils.defineLazyGetter(this, "noRedirectURI", function() { + return URL + "/content"; +}); + +var httpserver = null; + +function make_channel(url) { + return NetUtil.newChannel({uri: url, loadUsingSystemPrincipal: true}); +} + +const requestBody = "request body"; + +function redirectHandler(metadata, response) +{ + response.setStatusLine(metadata.httpVersion, 307, "Moved Temporarily"); + response.setHeader("Location", noRedirectURI, false); + return; +} + +function contentHandler(metadata, response) +{ + response.setHeader("Content-Type", "text/plain"); + response.bodyOutputStream.writeFrom(metadata.bodyInputStream, + metadata.bodyInputStream.available()); +} + +function noRedirectStreamObserver(request, buffer) +{ + do_check_eq(buffer, requestBody); + var chan = make_channel(uri); + var uploadStream = Cc["@mozilla.org/io/string-input-stream;1"] + .createInstance(Ci.nsIStringInputStream); + uploadStream.setData(requestBody, requestBody.length); + chan.QueryInterface(Ci.nsIUploadChannel).setUploadStream(uploadStream, + "text/plain", + -1); + chan.asyncOpen2(new ChannelListener(noHeaderStreamObserver, null)); +} + +function noHeaderStreamObserver(request, buffer) +{ + do_check_eq(buffer, requestBody); + var chan = make_channel(uri); + var uploadStream = Cc["@mozilla.org/io/string-input-stream;1"] + .createInstance(Ci.nsIStringInputStream); + var streamBody = "Content-Type: text/plain\r\n" + + "Content-Length: " + requestBody.length + "\r\n\r\n" + + requestBody; + uploadStream.setData(streamBody, streamBody.length); + chan.QueryInterface(Ci.nsIUploadChannel).setUploadStream(uploadStream, "", -1); + chan.asyncOpen2(new ChannelListener(headerStreamObserver, null)); +} + +function headerStreamObserver(request, buffer) +{ + do_check_eq(buffer, requestBody); + httpserver.stop(do_test_finished); +} + +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 chan = make_channel(noRedirectURI); + var uploadStream = Cc["@mozilla.org/io/string-input-stream;1"] + .createInstance(Ci.nsIStringInputStream); + uploadStream.setData(requestBody, requestBody.length); + chan.QueryInterface(Ci.nsIUploadChannel).setUploadStream(uploadStream, + "text/plain", + -1); + chan.asyncOpen2(new ChannelListener(noRedirectStreamObserver, null)); + do_test_pending(); +} |