summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/mixed-content/generic/expect.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/mixed-content/generic/expect.py')
-rw-r--r--testing/web-platform/tests/mixed-content/generic/expect.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/testing/web-platform/tests/mixed-content/generic/expect.py b/testing/web-platform/tests/mixed-content/generic/expect.py
new file mode 100644
index 000000000..a3ea61b21
--- /dev/null
+++ b/testing/web-platform/tests/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)