summaryrefslogtreecommitdiffstats
path: root/dom/serviceworkers/test/redirect_post.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'dom/serviceworkers/test/redirect_post.sjs')
-rw-r--r--dom/serviceworkers/test/redirect_post.sjs39
1 files changed, 39 insertions, 0 deletions
diff --git a/dom/serviceworkers/test/redirect_post.sjs b/dom/serviceworkers/test/redirect_post.sjs
new file mode 100644
index 0000000000..5483138d2b
--- /dev/null
+++ b/dom/serviceworkers/test/redirect_post.sjs
@@ -0,0 +1,39 @@
+const CC = Components.Constructor;
+const BinaryInputStream = CC(
+ "@mozilla.org/binaryinputstream;1",
+ "nsIBinaryInputStream",
+ "setInputStream"
+);
+
+function handleRequest(request, response) {
+ var query = {};
+ request.queryString.split("&").forEach(function (val) {
+ var [name, value] = val.split("=");
+ query[name] = unescape(value);
+ });
+
+ var bodyStream = new BinaryInputStream(request.bodyInputStream);
+ var bodyBytes = [];
+ while ((bodyAvail = bodyStream.available()) > 0) {
+ Array.prototype.push.apply(bodyBytes, bodyStream.readByteArray(bodyAvail));
+ }
+
+ var body = decodeURIComponent(
+ escape(String.fromCharCode.apply(null, bodyBytes))
+ );
+
+ var currentHop = query.hop ? parseInt(query.hop) : 0;
+
+ var obj = JSON.parse(body);
+ if (currentHop < obj.hops) {
+ var newURL =
+ "/tests/dom/serviceworkers/test/redirect_post.sjs?hop=" +
+ (1 + currentHop);
+ response.setStatusLine(null, 307, "redirect");
+ response.setHeader("Location", newURL);
+ return;
+ }
+
+ response.setHeader("Content-Type", "application/json");
+ response.write(body);
+}