Index: third_party/WebKit/LayoutTests/external/wpt/mixed-content/generic/expect.py |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mixed-content/generic/expect.py b/third_party/WebKit/LayoutTests/external/wpt/mixed-content/generic/expect.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a3ea61b21392e495bb6e1ef1a291ba11888859f6 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/mixed-content/generic/expect.py |
@@ -0,0 +1,102 @@ |
+import json, os, urllib, urlparse |
+ |
+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 create_redirect_url(request, swap_scheme = False): |
+ parsed = urlparse.urlsplit(request.url) |
+ destination_netloc = parsed.netloc |
+ scheme = parsed.scheme |
+ |
+ if swap_scheme: |
+ scheme = "http" if parsed.scheme == "https" else "https" |
+ hostname = parsed.netloc.split(':')[0] |
+ port = request.server.config["ports"][scheme][0] |
+ destination_netloc = ":".join([hostname, str(port)]) |
+ |
+ # Remove "redirection" from query to avoid redirect loops. |
+ parsed_query = dict(urlparse.parse_qsl(parsed.query)) |
+ assert "redirection" in parsed_query |
+ del parsed_query["redirection"] |
+ |
+ destination_url = urlparse.urlunsplit(urlparse.SplitResult( |
+ scheme = scheme, |
+ netloc = destination_netloc, |
+ path = parsed.path, |
+ query = urllib.urlencode(parsed_query), |
+ fragment = None)) |
+ |
+ return destination_url |
+ |
+def main(request, response): |
+ if "redirection" in request.GET: |
+ redirection = request.GET["redirection"] |
+ if redirection == "no-redirect": |
+ pass |
+ elif redirection == "keep-scheme-redirect": |
+ redirect(create_redirect_url(request, swap_scheme=False), response) |
+ return |
+ elif redirection == "swap-scheme-redirect": |
+ redirect(create_redirect_url(request, swap_scheme=True), response) |
+ return |
+ else: |
+ raise ValueError ("Invalid redirect type: %s" % redirection) |
+ |
+ content_type = "text/plain" |
+ response_data = "" |
+ |
+ if "action" in request.GET: |
+ action = request.GET["action"] |
+ |
+ if "content_type" in request.GET: |
+ content_type = request.GET["content_type"] |
+ |
+ key = request.GET["key"] |
+ stash = request.server.stash |
+ path = request.GET.get("path", request.url.split('?'))[0] |
+ |
+ if action == "put": |
+ value = request.GET["value"] |
+ stash.take(key=key, path=path) |
+ stash.put(key=key, value=value, path=path) |
+ response_data = json.dumps({"status": "success", "result": key}) |
+ elif action == "purge": |
+ value = stash.take(key=key, path=path) |
+ if content_type == "image/png": |
+ response_data = open(os.path.join(request.doc_root, |
+ "images", |
+ "smiley.png"), "rb").read() |
+ elif content_type == "audio/mpeg": |
+ response_data = open(os.path.join(request.doc_root, |
+ "media", |
+ "sound_5.oga"), "rb").read() |
+ elif content_type == "video/mp4": |
+ response_data = open(os.path.join(request.doc_root, |
+ "media", |
+ "movie_5.mp4"), "rb").read() |
+ elif content_type == "application/javascript": |
+ response_data = open(os.path.join(request.doc_root, |
+ "mixed-content", |
+ "generic", |
+ "worker.js"), "rb").read() |
+ else: |
+ response_data = "/* purged */" |
+ elif action == "take": |
+ value = stash.take(key=key, path=path) |
+ if value is None: |
+ status = "allowed" |
+ else: |
+ status = "blocked" |
+ response_data = json.dumps({"status": status, "result": value}) |
+ |
+ response.add_required_headers = False |
+ response.writer.write_status(200) |
+ response.writer.write_header("content-type", content_type) |
+ response.writer.write_header("cache-control", "no-cache; must-revalidate") |
+ response.writer.end_headers() |
+ response.writer.write(response_data) |