mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Update web-platform-tests to revision 5084587f6b05bf99ad09e7844be66dcc61070cdf
This commit is contained in:
parent
6d42d2f1e8
commit
7d1071a6a4
408 changed files with 8968 additions and 2608 deletions
|
@ -20,13 +20,13 @@ from multiprocessing import Process, Event
|
|||
from localpaths import repo_root
|
||||
|
||||
import sslutils
|
||||
from manifest.sourcefile import read_script_metadata, js_meta_re
|
||||
from manifest.sourcefile import read_script_metadata, js_meta_re, parse_variants
|
||||
from wptserve import server as wptserve, handlers
|
||||
from wptserve import stash
|
||||
from wptserve import config
|
||||
from wptserve.logger import set_logger
|
||||
from wptserve.handlers import filesystem_path, wrap_pipeline
|
||||
from wptserve.utils import get_port
|
||||
from wptserve.utils import get_port, HTTPException
|
||||
from mod_pywebsocket import standalone as pywebsocket
|
||||
|
||||
def replace_end(s, old, new):
|
||||
|
@ -56,9 +56,14 @@ class WrapperHandler(object):
|
|||
for header_name, header_value in self.headers:
|
||||
response.headers.set(header_name, header_value)
|
||||
|
||||
self.check_exposure(request)
|
||||
|
||||
path = self._get_path(request.url_parts.path, True)
|
||||
query = request.url_parts.query
|
||||
if query:
|
||||
query = "?" + query
|
||||
meta = "\n".join(self._get_meta(request))
|
||||
response.content = self.wrapper % {"meta": meta, "path": path}
|
||||
response.content = self.wrapper % {"meta": meta, "path": path, "query": query}
|
||||
wrap_pipeline(path, request, response)
|
||||
|
||||
def _get_path(self, path, resource_path):
|
||||
|
@ -85,18 +90,27 @@ class WrapperHandler(object):
|
|||
path = replace_end(path, src, dest)
|
||||
return path
|
||||
|
||||
def _get_meta(self, request):
|
||||
"""Get an iterator over strings to inject into the wrapper document
|
||||
based on //META comments in the associated js file.
|
||||
def _get_metadata(self, request):
|
||||
"""Get an iterator over script metadata based on //META comments in the
|
||||
associated js file.
|
||||
|
||||
:param request: The Request being processed.
|
||||
"""
|
||||
path = self._get_path(filesystem_path(self.base_path, request, self.url_base), False)
|
||||
with open(path, "rb") as f:
|
||||
for key, value in read_script_metadata(f, js_meta_re):
|
||||
replacement = self._meta_replacement(key, value)
|
||||
if replacement:
|
||||
yield replacement
|
||||
yield key, value
|
||||
|
||||
def _get_meta(self, request):
|
||||
"""Get an iterator over strings to inject into the wrapper document
|
||||
based on //META comments in the associated js file.
|
||||
|
||||
:param request: The Request being processed.
|
||||
"""
|
||||
for key, value in self._get_metadata(request):
|
||||
replacement = self._meta_replacement(key, value)
|
||||
if replacement:
|
||||
yield replacement
|
||||
|
||||
@abc.abstractproperty
|
||||
def path_replace(self):
|
||||
|
@ -118,8 +132,27 @@ class WrapperHandler(object):
|
|||
# a specific metadata key: value pair.
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def check_exposure(self, request):
|
||||
# Raise an exception if this handler shouldn't be exposed after all.
|
||||
pass
|
||||
|
||||
|
||||
class HtmlWrapperHandler(WrapperHandler):
|
||||
global_type = None
|
||||
|
||||
def check_exposure(self, request):
|
||||
if self.global_type:
|
||||
globals = b""
|
||||
for (key, value) in self._get_metadata(request):
|
||||
if key == b"global":
|
||||
globals = value
|
||||
break
|
||||
|
||||
if self.global_type not in parse_variants(globals):
|
||||
raise HTTPException(404, "This test cannot be loaded in %s mode" %
|
||||
self.global_type)
|
||||
|
||||
def _meta_replacement(self, key, value):
|
||||
if key == b"timeout":
|
||||
if value == b"long":
|
||||
|
@ -131,6 +164,7 @@ class HtmlWrapperHandler(WrapperHandler):
|
|||
|
||||
|
||||
class WorkersHandler(HtmlWrapperHandler):
|
||||
global_type = b"dedicatedworker"
|
||||
path_replace = [(".any.worker.html", ".any.js", ".any.worker.js"),
|
||||
(".worker.html", ".worker.js")]
|
||||
wrapper = """<!doctype html>
|
||||
|
@ -140,7 +174,7 @@ class WorkersHandler(HtmlWrapperHandler):
|
|||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("%(path)s"));
|
||||
fetch_tests_from_worker(new Worker("%(path)s%(query)s"));
|
||||
</script>
|
||||
"""
|
||||
|
||||
|
@ -158,6 +192,7 @@ class WindowHandler(HtmlWrapperHandler):
|
|||
|
||||
|
||||
class AnyHtmlHandler(HtmlWrapperHandler):
|
||||
global_type = b"window"
|
||||
path_replace = [(".any.html", ".any.js")]
|
||||
wrapper = """<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
@ -175,6 +210,42 @@ self.GLOBAL = {
|
|||
"""
|
||||
|
||||
|
||||
class SharedWorkersHandler(HtmlWrapperHandler):
|
||||
global_type = b"sharedworker"
|
||||
path_replace = [(".any.sharedworker.html", ".any.js", ".any.worker.js")]
|
||||
wrapper = """<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
%(meta)s
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
fetch_tests_from_worker(new SharedWorker("%(path)s%(query)s"));
|
||||
</script>
|
||||
"""
|
||||
|
||||
|
||||
class ServiceWorkersHandler(HtmlWrapperHandler):
|
||||
global_type = b"serviceworker"
|
||||
path_replace = [(".https.any.serviceworker.html", ".any.js", ".any.worker.js")]
|
||||
wrapper = """<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
%(meta)s
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
(async function() {
|
||||
const scope = 'does/not/exist';
|
||||
let reg = await navigator.serviceWorker.getRegistration(scope);
|
||||
if (reg) await reg.unregister();
|
||||
reg = await navigator.serviceWorker.register("%(path)s%(query)s", {scope});
|
||||
fetch_tests_from_worker(reg.installing);
|
||||
})();
|
||||
</script>
|
||||
"""
|
||||
|
||||
|
||||
class AnyWorkerHandler(WrapperHandler):
|
||||
headers = [('Content-Type', 'text/javascript')]
|
||||
path_replace = [(".any.worker.js", ".any.js")]
|
||||
|
@ -189,8 +260,6 @@ done();
|
|||
"""
|
||||
|
||||
def _meta_replacement(self, key, value):
|
||||
if key == b"timeout":
|
||||
return None
|
||||
if key == b"script":
|
||||
attribute = value.decode('utf-8').replace("\\", "\\\\").replace('"', '\\"')
|
||||
return 'importScripts("%s")' % attribute
|
||||
|
@ -243,6 +312,8 @@ class RoutesBuilder(object):
|
|||
("GET", "*.worker.html", WorkersHandler),
|
||||
("GET", "*.window.html", WindowHandler),
|
||||
("GET", "*.any.html", AnyHtmlHandler),
|
||||
("GET", "*.any.sharedworker.html", SharedWorkersHandler),
|
||||
("GET", "*.https.any.serviceworker.html", ServiceWorkersHandler),
|
||||
("GET", "*.any.worker.js", AnyWorkerHandler),
|
||||
("GET", "*.asis", handlers.AsIsHandler),
|
||||
("*", "*.py", handlers.PythonScriptHandler),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue