redirect_post.sjs (1094B)
1 const CC = Components.Constructor; 2 const BinaryInputStream = CC( 3 "@mozilla.org/binaryinputstream;1", 4 "nsIBinaryInputStream", 5 "setInputStream" 6 ); 7 8 function handleRequest(request, response) { 9 var query = {}; 10 request.queryString.split("&").forEach(function (val) { 11 var [name, value] = val.split("="); 12 query[name] = unescape(value); 13 }); 14 15 var bodyStream = new BinaryInputStream(request.bodyInputStream); 16 var bodyBytes = []; 17 while ((bodyAvail = bodyStream.available()) > 0) { 18 Array.prototype.push.apply(bodyBytes, bodyStream.readByteArray(bodyAvail)); 19 } 20 21 var body = decodeURIComponent( 22 escape(String.fromCharCode.apply(null, bodyBytes)) 23 ); 24 25 var currentHop = query.hop ? parseInt(query.hop) : 0; 26 27 var obj = JSON.parse(body); 28 if (currentHop < obj.hops) { 29 var newURL = 30 "/tests/dom/serviceworkers/test/redirect_post.sjs?hop=" + 31 (1 + currentHop); 32 response.setStatusLine(null, 307, "redirect"); 33 response.setHeader("Location", newURL); 34 return; 35 } 36 37 response.setHeader("Content-Type", "application/json"); 38 response.write(body); 39 }