const CC = Components.Constructor; const BinaryInputStream = CC( "@mozilla.org/binaryinputstream;1", "nsIBinaryInputStream", "setInputStream" ); function makeResponse(success) { let res = `
send message, downgraded `; return res; } function makeForm(method, testID) { return ` `; } function handleRequest(request, response) { // avoid confusing cache behaviors response.setHeader("Cache-Control", "no-cache", false); let queryString = request.queryString; // Endpoints to return a form if ( (request.scheme === "https" && queryString === "test=1") || (request.scheme === "http" && queryString === "test=2") ) { response.write(makeForm("GET", queryString.substr(-1, 1))); return; } if (queryString === "test=3" || queryString === "test=4") { response.write(makeForm("POST", queryString.substr(-1, 1))); return; } // Endpoints to trigger downgrades because of timeouts if ( request.scheme === "https" && (queryString === "test=2" || queryString === "test=4") ) { response.processAsync(); return; } // Endpoints for receiving the form data if ( request.method == "GET" && ((queryString.includes("test=1") && request.scheme === "https") || queryString.includes("test=2")) && queryString.includes("result=success") ) { response.write(makeResponse(true)); return; } if (request.method == "POST" && request.scheme === "http") { // extract form parameters let body = new BinaryInputStream(request.bodyInputStream); let avail; let bytes = []; while ((avail = body.available()) > 0) { Array.prototype.push.apply(bytes, body.readByteArray(avail)); } let requestBodyContents = String.fromCharCode.apply(null, bytes); response.write( makeResponse( (requestBodyContents.includes("test=3") || requestBodyContents.includes("test=4")) && requestBodyContents.includes("result=success") ) ); return; } // we should never get here; just in case, return something unexpected response.write(makeResponse(false)); }