mirror of
https://github.com/servo/servo.git
synced 2025-09-06 21:18:20 +01:00
Update web-platform-tests to revision 0a28ecf697d96db228f8382db0e41f1c54314dad
This commit is contained in:
parent
1ff56aa84f
commit
52045cb370
106 changed files with 1208 additions and 778 deletions
|
@ -0,0 +1,18 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(request, server_data):
|
||||
file = os.path.join(request.doc_root, "webaudio", "resources",
|
||||
"sin_440Hz_-6dBFS_1s.wav")
|
||||
return open(file, "rb").read()
|
||||
|
||||
|
||||
def main(request, response):
|
||||
handler = lambda data: generate_payload(request, data)
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = handler,
|
||||
access_control_allow_origin = "*",
|
||||
content_type = "audio/wav")
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(server_data):
|
||||
return subresource.get_template("document.html.template") % server_data
|
||||
|
||||
def main(request, response):
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = generate_payload)
|
|
@ -0,0 +1,14 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(server_data):
|
||||
return ''
|
||||
|
||||
def main(request, response):
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = generate_payload,
|
||||
access_control_allow_origin = "*",
|
||||
content_type = "text/plain")
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
import os, sys, base64
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(request, server_data):
|
||||
data = ('{"headers": %(headers)s}') % server_data
|
||||
if "id" in request.GET:
|
||||
request.server.stash.put(request.GET["id"], data)
|
||||
# Simple base64 encoded .tff font
|
||||
return base64.decodestring("AAEAAAANAIAAAwBQRkZUTU6u6MkAAAXcAAAAHE9TLzJWYW"
|
||||
"QKAAABWAAAAFZjbWFwAA8D7wAAAcAAAAFCY3Z0IAAhAnkA"
|
||||
"AAMEAAAABGdhc3D//wADAAAF1AAAAAhnbHlmCC6aTwAAAx"
|
||||
"QAAACMaGVhZO8ooBcAAADcAAAANmhoZWEIkAV9AAABFAAA"
|
||||
"ACRobXR4EZQAhQAAAbAAAAAQbG9jYQBwAFQAAAMIAAAACm"
|
||||
"1heHAASQA9AAABOAAAACBuYW1lehAVOgAAA6AAAAIHcG9z"
|
||||
"dP+uADUAAAWoAAAAKgABAAAAAQAAMhPyuV8PPPUACwPoAA"
|
||||
"AAAMU4Lm0AAAAAxTgubQAh/5wFeAK8AAAACAACAAAAAAAA"
|
||||
"AAEAAAK8/5wAWgXcAAAAAAV4AAEAAAAAAAAAAAAAAAAAAA"
|
||||
"AEAAEAAAAEAAwAAwAAAAAAAgAAAAEAAQAAAEAALgAAAAAA"
|
||||
"AQXcAfQABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAIABg"
|
||||
"kAAAAAAAAAAAABAAAAAAAAAAAAAAAAUGZFZABAAEEAQQMg"
|
||||
"/zgAWgK8AGQAAAABAAAAAAAABdwAIQAAAAAF3AAABdwAZA"
|
||||
"AAAAMAAAADAAAAHAABAAAAAAA8AAMAAQAAABwABAAgAAAA"
|
||||
"BAAEAAEAAABB//8AAABB////wgABAAAAAAAAAQYAAAEAAA"
|
||||
"AAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAhAnkAAAAqACoAKgBGAAAAAgAhAA"
|
||||
"ABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCx"
|
||||
"AwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6M"
|
||||
"fHApr9ZiECWAAAAwBk/5wFeAK8AAMABwALAAABNSEVATUh"
|
||||
"FQE1IRUB9AH0/UQDhPu0BRQB9MjI/tTIyP7UyMgAAAAAAA"
|
||||
"4ArgABAAAAAAAAACYATgABAAAAAAABAAUAgQABAAAAAAAC"
|
||||
"AAYAlQABAAAAAAADACEA4AABAAAAAAAEAAUBDgABAAAAAA"
|
||||
"AFABABNgABAAAAAAAGAAUBUwADAAEECQAAAEwAAAADAAEE"
|
||||
"CQABAAoAdQADAAEECQACAAwAhwADAAEECQADAEIAnAADAA"
|
||||
"EECQAEAAoBAgADAAEECQAFACABFAADAAEECQAGAAoBRwBD"
|
||||
"AG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOA"
|
||||
"AgAE0AbwB6AGkAbABsAGEAIABDAG8AcgBwAG8AcgBhAHQA"
|
||||
"aQBvAG4AAENvcHlyaWdodCAoYykgMjAwOCBNb3ppbGxhIE"
|
||||
"NvcnBvcmF0aW9uAABNAGEAcgBrAEEAAE1hcmtBAABNAGUA"
|
||||
"ZABpAHUAbQAATWVkaXVtAABGAG8AbgB0AEYAbwByAGcAZQ"
|
||||
"AgADIALgAwACAAOgAgAE0AYQByAGsAQQAgADoAIAA1AC0A"
|
||||
"MQAxAC0AMgAwADAAOAAARm9udEZvcmdlIDIuMCA6IE1hcm"
|
||||
"tBIDogNS0xMS0yMDA4AABNAGEAcgBrAEEAAE1hcmtBAABW"
|
||||
"AGUAcgBzAGkAbwBuACAAMAAwADEALgAwADAAMAAgAABWZX"
|
||||
"JzaW9uIDAwMS4wMDAgAABNAGEAcgBrAEEAAE1hcmtBAAAA"
|
||||
"AgAAAAAAAP+DADIAAAABAAAAAAAAAAAAAAAAAAAAAAAEAA"
|
||||
"AAAQACACQAAAAAAAH//wACAAAAAQAAAADEPovuAAAAAMU4"
|
||||
"Lm0AAAAAxTgubQ==");
|
||||
|
||||
def generate_report_headers_payload(request, server_data):
|
||||
stashed_data = request.server.stash.take(request.GET["id"])
|
||||
return stashed_data
|
||||
|
||||
def main(request, response):
|
||||
handler = lambda data: generate_payload(request, data)
|
||||
content_type = 'application/x-font-truetype'
|
||||
|
||||
if "report-headers" in request.GET:
|
||||
handler = lambda data: generate_report_headers_payload(request, data)
|
||||
content_type = 'application/json'
|
||||
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = handler,
|
||||
content_type = content_type,
|
||||
access_control_allow_origin = "*")
|
|
@ -0,0 +1,114 @@
|
|||
import os, sys, array, math, StringIO
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
class Image:
|
||||
"""This class partially implements the interface of the PIL.Image.Image.
|
||||
One day in the future WPT might support the PIL module or another imaging
|
||||
library, so this hacky BMP implementation will no longer be required.
|
||||
"""
|
||||
def __init__(self, width, height):
|
||||
self.width = width
|
||||
self.height = height
|
||||
self.img = bytearray([0 for i in range(3 * width * height)])
|
||||
|
||||
@staticmethod
|
||||
def new(mode, size, color=0):
|
||||
return Image(size[0], size[1])
|
||||
|
||||
def _int_to_bytes(self, number):
|
||||
packed_bytes = [0, 0, 0, 0]
|
||||
for i in range(4):
|
||||
packed_bytes[i] = number & 0xFF
|
||||
number >>= 8
|
||||
|
||||
return packed_bytes
|
||||
|
||||
def putdata(self, color_data):
|
||||
for y in range(self.height):
|
||||
for x in range(self.width):
|
||||
i = x + y * self.width
|
||||
if i > len(color_data) - 1:
|
||||
return
|
||||
|
||||
self.img[i * 3: i * 3 + 3] = color_data[i][::-1]
|
||||
|
||||
def save(self, f, type):
|
||||
assert type == "BMP"
|
||||
# 54 bytes of preambule + image color data.
|
||||
filesize = 54 + 3 * self.width * self.height;
|
||||
# 14 bytes of header.
|
||||
bmpfileheader = bytearray(['B', 'M'] + self._int_to_bytes(filesize) +
|
||||
[0, 0, 0, 0, 54, 0, 0, 0])
|
||||
# 40 bytes of info.
|
||||
bmpinfoheader = bytearray([40, 0, 0, 0] +
|
||||
self._int_to_bytes(self.width) +
|
||||
self._int_to_bytes(self.height) +
|
||||
[1, 0, 24] + (25 * [0]))
|
||||
|
||||
padlength = (4 - (self.width * 3) % 4) % 4
|
||||
bmppad = bytearray([0, 0, 0]);
|
||||
padding = bmppad[0 : padlength]
|
||||
|
||||
f.write(bmpfileheader)
|
||||
f.write(bmpinfoheader)
|
||||
|
||||
for i in range(self.height):
|
||||
offset = self.width * (self.height - i - 1) * 3
|
||||
f.write(self.img[offset : offset + 3 * self.width])
|
||||
f.write(padding)
|
||||
|
||||
def encode_string_as_bmp_image(string_data):
|
||||
data_bytes = array.array("B", string_data)
|
||||
num_bytes = len(data_bytes)
|
||||
|
||||
# Convert data bytes to color data (RGB).
|
||||
color_data = []
|
||||
num_components = 3
|
||||
rgb = [0] * num_components
|
||||
i = 0
|
||||
for byte in data_bytes:
|
||||
component_index = i % num_components
|
||||
rgb[component_index] = byte
|
||||
if component_index == (num_components - 1) or i == (num_bytes - 1):
|
||||
color_data.append(tuple(rgb))
|
||||
rgb = [0] * num_components
|
||||
i += 1
|
||||
|
||||
# Render image.
|
||||
num_pixels = len(color_data)
|
||||
sqrt = int(math.ceil(math.sqrt(num_pixels)))
|
||||
img = Image.new("RGB", (sqrt, sqrt), "black")
|
||||
img.putdata(color_data)
|
||||
|
||||
# Flush image to string.
|
||||
f = StringIO.StringIO()
|
||||
img.save(f, "BMP")
|
||||
f.seek(0)
|
||||
|
||||
return f.read()
|
||||
|
||||
def generate_payload(request, server_data):
|
||||
data = ('{"headers": %(headers)s}') % server_data
|
||||
if "id" in request.GET:
|
||||
request.server.stash.put(request.GET["id"], data)
|
||||
data = encode_string_as_bmp_image(data)
|
||||
return data
|
||||
|
||||
def generate_report_headers_payload(request, server_data):
|
||||
stashed_data = request.server.stash.take(request.GET["id"])
|
||||
return stashed_data
|
||||
|
||||
def main(request, response):
|
||||
handler = lambda data: generate_payload(request, data)
|
||||
content_type = 'image/bmp'
|
||||
|
||||
if "report-headers" in request.GET:
|
||||
handler = lambda data: generate_report_headers_payload(request, data)
|
||||
content_type = 'application/json'
|
||||
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = handler,
|
||||
content_type = content_type,
|
||||
access_control_allow_origin = "*")
|
|
@ -0,0 +1,13 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(server_data):
|
||||
return subresource.get_template("script.js.template") % server_data
|
||||
|
||||
def main(request, response):
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = generate_payload,
|
||||
content_type = "application/javascript")
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(server_data):
|
||||
return subresource.get_template("shared-worker.js.template") % server_data
|
||||
|
||||
def main(request, response):
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = generate_payload,
|
||||
content_type = "application/javascript")
|
|
@ -0,0 +1,54 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(request, server_data):
|
||||
data = ('{"headers": %(headers)s}') % server_data
|
||||
type = 'image'
|
||||
if "type" in request.GET:
|
||||
type = request.GET["type"]
|
||||
|
||||
if "id" in request.GET:
|
||||
request.server.stash.put(request.GET["id"], data)
|
||||
|
||||
if type == 'image':
|
||||
return subresource.get_template("image.css.template") % {"id": request.GET["id"]}
|
||||
|
||||
elif type == 'font':
|
||||
return subresource.get_template("font.css.template") % {"id": request.GET["id"]}
|
||||
|
||||
elif type == 'svg':
|
||||
return subresource.get_template("svg.css.template") % {
|
||||
"id": request.GET["id"],
|
||||
"property": request.GET["property"]}
|
||||
|
||||
def generate_import_rule(request, server_data):
|
||||
return "@import url('%(url)s');" % {
|
||||
"url": subresource.create_url(request, swap_origin=True,
|
||||
query_parameter_to_remove="import-rule")
|
||||
}
|
||||
|
||||
def generate_report_headers_payload(request, server_data):
|
||||
stashed_data = request.server.stash.take(request.GET["id"])
|
||||
return stashed_data
|
||||
|
||||
def main(request, response):
|
||||
payload_generator = lambda data: generate_payload(request, data)
|
||||
content_type = "text/css"
|
||||
referrer_policy = "unsafe-url"
|
||||
if "import-rule" in request.GET:
|
||||
payload_generator = lambda data: generate_import_rule(request, data)
|
||||
|
||||
if "report-headers" in request.GET:
|
||||
payload_generator = lambda data: generate_report_headers_payload(request, data)
|
||||
content_type = 'application/json'
|
||||
|
||||
if "referrer-policy" in request.GET:
|
||||
referrer_policy = request.GET["referrer-policy"]
|
||||
|
||||
subresource.respond(
|
||||
request,
|
||||
response,
|
||||
payload_generator = payload_generator,
|
||||
content_type = content_type,
|
||||
maybe_additional_headers = { "Referrer-Policy": referrer_policy })
|
|
@ -0,0 +1,164 @@
|
|||
import os, json, urllib, urlparse
|
||||
|
||||
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()
|
||||
|
||||
|
||||
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("")
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
# Creates a URL (typically a redirect target URL) that is the same as the
|
||||
# current request URL `request.url`, except for:
|
||||
# - When `swap_scheme` or `swap_origin` is True, its scheme/origin is changed
|
||||
# to the other one. (http <-> https, ws <-> wss, etc.)
|
||||
# - `query_parameter_to_remove` parameter is removed from query part.
|
||||
# Its default is "redirection" to avoid redirect loops.
|
||||
def create_url(request, swap_scheme = False, swap_origin = False,
|
||||
query_parameter_to_remove = "redirection"):
|
||||
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)])
|
||||
|
||||
if swap_origin:
|
||||
destination_netloc = __get_swapped_origin_netloc(destination_netloc)
|
||||
|
||||
parsed_query = urlparse.parse_qsl(parsed.query, keep_blank_values=True)
|
||||
parsed_query = filter(lambda x: x[0] != query_parameter_to_remove,
|
||||
parsed_query)
|
||||
|
||||
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 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-scheme-redirect":
|
||||
redirect_url = create_url(request, swap_scheme=False)
|
||||
elif redirection == "swap-scheme-redirect":
|
||||
redirect_url = create_url(request, swap_scheme=True)
|
||||
elif redirection == "keep-origin-redirect":
|
||||
redirect_url = create_url(request, swap_origin=False)
|
||||
elif redirection == "swap-origin-redirect":
|
||||
redirect_url = create_url(request, swap_origin=True)
|
||||
else:
|
||||
raise ValueError("Invalid redirection type '%s'" % redirection)
|
||||
|
||||
redirect(redirect_url, response)
|
||||
return True
|
||||
|
||||
|
||||
def preprocess_stash_action(request, response):
|
||||
if "action" not in request.GET:
|
||||
return False
|
||||
|
||||
action = request.GET["action"]
|
||||
|
||||
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)
|
||||
return False
|
||||
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})
|
||||
else:
|
||||
return False
|
||||
|
||||
response.add_required_headers = False
|
||||
response.writer.write_status(200)
|
||||
response.writer.write_header("content-type", "text/javascript")
|
||||
response.writer.write_header("cache-control", "no-cache; must-revalidate")
|
||||
response.writer.end_headers()
|
||||
response.writer.write(response_data)
|
||||
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 = "*",
|
||||
maybe_additional_headers = None):
|
||||
if preprocess_redirection(request, response):
|
||||
return
|
||||
|
||||
if preprocess_stash_action(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)
|
||||
|
||||
additional_headers = maybe_additional_headers or {}
|
||||
for header, value in additional_headers.items():
|
||||
response.writer.write_header(header, value)
|
||||
|
||||
response.writer.end_headers()
|
||||
|
||||
server_data = {"headers": json.dumps(request.headers, indent = 4)}
|
||||
|
||||
payload = payload_generator(server_data)
|
||||
response.writer.write(payload)
|
||||
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(request, server_data):
|
||||
data = ('{"headers": %(headers)s}') % server_data
|
||||
if "id" in request.GET:
|
||||
with request.server.stash.lock:
|
||||
request.server.stash.take(request.GET["id"])
|
||||
request.server.stash.put(request.GET["id"], data)
|
||||
return "<svg xmlns='http://www.w3.org/2000/svg'></svg>";
|
||||
|
||||
def generate_payload_embedded(request, server_data):
|
||||
return subresource.get_template("svg.embedded.template") % {
|
||||
"id": request.GET["id"],
|
||||
"property": request.GET["property"]};
|
||||
|
||||
def generate_report_headers_payload(request, server_data):
|
||||
stashed_data = request.server.stash.take(request.GET["id"])
|
||||
return stashed_data
|
||||
|
||||
def main(request, response):
|
||||
handler = lambda data: generate_payload(request, data)
|
||||
content_type = 'image/svg+xml'
|
||||
|
||||
if "embedded-svg" in request.GET:
|
||||
handler = lambda data: generate_payload_embedded(request, data)
|
||||
|
||||
if "report-headers" in request.GET:
|
||||
handler = lambda data: generate_report_headers_payload(request, data)
|
||||
content_type = 'application/json'
|
||||
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = handler,
|
||||
content_type = content_type)
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>This page reports back it's request details to the parent frame</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var result = {
|
||||
location: document.location.toString(),
|
||||
referrer: document.referrer.length > 0 ? document.referrer : undefined,
|
||||
headers: %(headers)s
|
||||
};
|
||||
parent.postMessage(result, "*");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,9 @@
|
|||
@font-face {
|
||||
font-family: 'wpt';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
src: url(/common/security-features/subresource/font.py?id=%(id)s) format('truetype');
|
||||
}
|
||||
body {
|
||||
font-family: 'wpt';
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
div.styled::before {
|
||||
content:url(/common/security-features/subresource/image.py?id=%(id)s)
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
postMessage({
|
||||
"headers": %(headers)s
|
||||
}, "*");
|
|
@ -0,0 +1,5 @@
|
|||
onconnect = function(e) {
|
||||
e.ports[0].postMessage({
|
||||
"headers": %(headers)s
|
||||
});
|
||||
};
|
|
@ -0,0 +1,3 @@
|
|||
path {
|
||||
%(property)s: url(/common/security-features/subresource/svg.py?id=%(id)s#invalidFragment);
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version='1.0' standalone='no'?>
|
||||
<?xml-stylesheet href='stylesheet.py?id=%(id)s&type=svg&property=%(property)s' type='text/css'?>
|
||||
<svg xmlns='http://www.w3.org/2000/svg'>
|
||||
<path d='M 50,5 95,100 5,100 z' />
|
||||
</svg>
|
After Width: | Height: | Size: 228 B |
|
@ -0,0 +1,3 @@
|
|||
postMessage({
|
||||
"headers": %(headers)s
|
||||
});
|
|
@ -0,0 +1,17 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(request, server_data):
|
||||
file = os.path.join(request.doc_root, "media", "movie_5.ogv")
|
||||
return open(file, "rb").read()
|
||||
|
||||
|
||||
def main(request, response):
|
||||
handler = lambda data: generate_payload(request, data)
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = handler,
|
||||
access_control_allow_origin = "*",
|
||||
content_type = "video/ogg")
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(server_data):
|
||||
return subresource.get_template("worker.js.template") % server_data
|
||||
|
||||
def main(request, response):
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = generate_payload,
|
||||
content_type = "application/javascript")
|
15
tests/wpt/web-platform-tests/common/security-features/subresource/xhr.py
Executable file
15
tests/wpt/web-platform-tests/common/security-features/subresource/xhr.py
Executable file
|
@ -0,0 +1,15 @@
|
|||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import subresource
|
||||
|
||||
def generate_payload(server_data):
|
||||
data = ('{"headers": %(headers)s}') % server_data
|
||||
return data
|
||||
|
||||
def main(request, response):
|
||||
subresource.respond(request,
|
||||
response,
|
||||
payload_generator = generate_payload,
|
||||
access_control_allow_origin = "*",
|
||||
content_type = "application/json")
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue