summaryrefslogtreecommitdiffstats
path: root/dom/base/test/file_bug1268962.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/file_bug1268962.sjs')
-rw-r--r--dom/base/test/file_bug1268962.sjs90
1 files changed, 90 insertions, 0 deletions
diff --git a/dom/base/test/file_bug1268962.sjs b/dom/base/test/file_bug1268962.sjs
new file mode 100644
index 000000000..42b1ecef3
--- /dev/null
+++ b/dom/base/test/file_bug1268962.sjs
@@ -0,0 +1,90 @@
+// 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);
+ }
+}