summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_307_redirect.js
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/test/unit/test_307_redirect.js')
-rw-r--r--netwerk/test/unit/test_307_redirect.js91
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();
+}