Index: third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/subresource/subresource.py |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/subresource/subresource.py b/third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/subresource/subresource.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7571b32d0fa758919790dbb2f0abc9a2925e4b75 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/subresource/subresource.py |
@@ -0,0 +1,94 @@ |
+import os, sys, json, urlparse, urllib |
+ |
+def get_template(template_basename): |
+ script_directory = os.path.dirname(os.path.abspath(__file__)) |
+ template_directory = os.path.abspath(os.path.join(script_directory, |
+ "..", |
+ "template")) |
+ template_filename = os.path.join(template_directory, template_basename); |
+ |
+ with open(template_filename, "r") as f: |
+ return f.read() |
+ |
+# TODO(kristijanburnik): subdomain_prefix is a hardcoded value aligned with |
+# referrer-policy-test-case.js. The prefix should be configured in one place. |
+def get_swapped_origin_netloc(netloc, subdomain_prefix = "www1."): |
+ if netloc.startswith(subdomain_prefix): |
+ return netloc[len(subdomain_prefix):] |
+ else: |
+ return subdomain_prefix + netloc |
+ |
+def create_redirect_url(request, cross_origin = False): |
+ parsed = urlparse.urlsplit(request.url) |
+ destination_netloc = parsed.netloc |
+ if cross_origin: |
+ destination_netloc = get_swapped_origin_netloc(parsed.netloc) |
+ |
+ destination_url = urlparse.urlunsplit(urlparse.SplitResult( |
+ scheme = parsed.scheme, |
+ netloc = destination_netloc, |
+ path = parsed.path, |
+ query = None, |
+ fragment = None)) |
+ |
+ return destination_url |
+ |
+ |
+def redirect(url, response): |
+ response.add_required_headers = False |
+ response.writer.write_status(301) |
+ response.writer.write_header("access-control-allow-origin", "*") |
+ response.writer.write_header("location", url) |
+ response.writer.end_headers() |
+ response.writer.write("") |
+ |
+ |
+def preprocess_redirection(request, response): |
+ if "redirection" not in request.GET: |
+ return False |
+ |
+ redirection = request.GET["redirection"] |
+ |
+ if redirection == "no-redirect": |
+ return False |
+ elif redirection == "keep-origin-redirect": |
+ redirect_url = create_redirect_url(request, cross_origin = False) |
+ elif redirection == "swap-origin-redirect": |
+ redirect_url = create_redirect_url(request, cross_origin = True) |
+ else: |
+ raise ValueError("Invalid redirection type '%s'" % redirection) |
+ |
+ redirect(redirect_url, response) |
+ return True |
+ |
+ |
+def __noop(request, response): |
+ return "" |
+ |
+ |
+def respond(request, |
+ response, |
+ status_code = 200, |
+ content_type = "text/html", |
+ payload_generator = __noop, |
+ cache_control = "no-cache; must-revalidate", |
+ access_control_allow_origin = "*"): |
+ if preprocess_redirection(request, response): |
+ return |
+ |
+ response.add_required_headers = False |
+ response.writer.write_status(status_code) |
+ |
+ if access_control_allow_origin != None: |
+ response.writer.write_header("access-control-allow-origin", |
+ access_control_allow_origin) |
+ response.writer.write_header("content-type", content_type) |
+ response.writer.write_header("cache-control", cache_control) |
+ response.writer.end_headers() |
+ |
+ server_data = {"headers": json.dumps(request.headers, indent = 4)} |
+ |
+ payload = payload_generator(server_data) |
+ response.writer.write(payload) |
+ |
+ |