summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/serviceworkers/redirect_post.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/serviceworkers/redirect_post.sjs')
-rw-r--r--dom/workers/test/serviceworkers/redirect_post.sjs35
1 files changed, 35 insertions, 0 deletions
diff --git a/dom/workers/test/serviceworkers/redirect_post.sjs b/dom/workers/test/serviceworkers/redirect_post.sjs
new file mode 100644
index 000000000..8b805be63
--- /dev/null
+++ b/dom/workers/test/serviceworkers/redirect_post.sjs
@@ -0,0 +1,35 @@
+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/workers/test/serviceworkers/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);
+}