// Test server for bug 1268962 'use strict'; Components.utils.importGlobalProperties(["URLSearchParams"]); const HTTPStatus = new Map([ [100, 'Continue'], [101, 'Switching Protocol'], [200, 'OK'], [201, 'Created'], [202, 'Accepted'], [203, 'Non-Authoritative Information'], [204, 'No Content'], [205, 'Reset Content'], [206, 'Partial Content'], [300, 'Multiple Choice'], [301, 'Moved Permanently'], [302, 'Found'], [303, 'See Other'], [304, 'Not Modified'], [305, 'Use Proxy'], [306, 'unused'], [307, 'Temporary Redirect'], [308, 'Permanent Redirect'], [400, 'Bad Request'], [401, 'Unauthorized'], [402, 'Payment Required'], [403, 'Forbidden'], [404, 'Not Found'], [405, 'Method Not Allowed'], [406, 'Not Acceptable'], [407, 'Proxy Authentication Required'], [408, 'Request Timeout'], [409, 'Conflict'], [410, 'Gone'], [411, 'Length Required'], [412, 'Precondition Failed'], [413, 'Request Entity Too Large'], [414, 'Request-URI Too Long'], [415, 'Unsupported Media Type'], [416, 'Requested Range Not Satisfiable'], [417, 'Expectation Failed'], [500, 'Internal Server Error'], [501, 'Not Implemented'], [502, 'Bad Gateway'], [503, 'Service Unavailable'], [504, 'Gateway Timeout'], [505, 'HTTP Version Not Supported'] ]); const SAME_ORIGIN = 'http://mochi.test:8888/tests/dom/base/test/file_bug1268962.sjs'; const CROSS_ORIGIN = 'http://example.com/tests/dom/base/test/file_bug1268962.sjs'; function handleRequest(request, response) { const queryMap = new URLSearchParams(request.queryString); // Check redirection before everything else. if (queryMap.has('redirect')) { let redirect = queryMap.get('redirect'); let location; if (redirect == 'sameorigin') { location = SAME_ORIGIN; } else if (redirect == 'crossorigin') { location = CROSS_ORIGIN; } if (location) { // Use HTTP 302 redirection. response.setStatusLine('1.1', 302, HTTPStatus.get(302)); // Forward query strings except the redirect option. queryMap.delete('redirect'); response.setHeader('Location', location + '?' + queryMap.toString()); return; } } if (queryMap.has('statusCode')) { let statusCode = parseInt(queryMap.get('statusCode')); let statusText = HTTPStatus.get(statusCode); response.setStatusLine('1.1', statusCode, statusText); } if (queryMap.has('cacheControl')) { let cacheControl = queryMap.get('cacheControl'); response.setHeader('Cache-Control', cacheControl); } if (queryMap.has('allowOrigin')) { let allowOrigin = queryMap.get('allowOrigin'); response.setHeader('Access-Control-Allow-Origin', allowOrigin); } }