summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/common/CustomCorsResponse.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/web-platform/tests/common/CustomCorsResponse.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/testing/web-platform/tests/common/CustomCorsResponse.py b/testing/web-platform/tests/common/CustomCorsResponse.py
new file mode 100644
index 0000000000..fc4d122f1b
--- /dev/null
+++ b/testing/web-platform/tests/common/CustomCorsResponse.py
@@ -0,0 +1,30 @@
+import json
+
+def main(request, response):
+ '''Handler for getting an HTTP response customised by the given query
+ parameters.
+
+ The returned response will have
+ - HTTP headers defined by the 'headers' query parameter
+ - Must be a serialized JSON dictionary mapping header names to header
+ values
+ - HTTP status code defined by the 'status' query parameter
+ - Must be a positive serialized JSON integer like the string '200'
+ - Response content defined by the 'content' query parameter
+ - Must be a serialized JSON string representing the desired response body
+ '''
+ def query_parameter_or_default(param, default):
+ return request.GET.first(param) if param in request.GET else default
+
+ headers = json.loads(query_parameter_or_default(b'headers', b'"{}"'))
+ for k, v in headers.items():
+ response.headers.set(k, v)
+
+ # Note that, in order to have out-of-the-box support for tests that don't call
+ # setup({'allow_uncaught_exception': true})
+ # we return a no-op JS payload. This approach will avoid syntax errors in
+ # script resources that would otherwise cause the test harness to fail.
+ response.content = json.loads(query_parameter_or_default(b'content',
+ b'"/* CustomCorsResponse.py content */"'))
+ response.status_code = json.loads(query_parameter_or_default(b'status',
+ b'200'))