summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/server-timing
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
commit0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch)
treea31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/server-timing
parentInitial commit. (diff)
downloadfirefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz
firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/server-timing')
-rw-r--r--testing/web-platform/tests/server-timing/META.yml4
-rw-r--r--testing/web-platform/tests/server-timing/cross_origin.https.html35
-rw-r--r--testing/web-platform/tests/server-timing/idlharness.https.any.js29
-rw-r--r--testing/web-platform/tests/server-timing/navigation-timing-trickle.https.html20
-rw-r--r--testing/web-platform/tests/server-timing/navigation_timing_idl.https.html15
-rw-r--r--testing/web-platform/tests/server-timing/resource_timing_idl.https.html15
-rw-r--r--testing/web-platform/tests/server-timing/resources/blue.pngbin0 -> 485 bytes
-rw-r--r--testing/web-platform/tests/server-timing/resources/blue.png.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/blue_cors.pngbin0 -> 485 bytes
-rw-r--r--testing/web-platform/tests/server-timing/resources/blue_cors.png.headers2
-rw-r--r--testing/web-platform/tests/server-timing/resources/blue_tao.pngbin0 -> 485 bytes
-rw-r--r--testing/web-platform/tests/server-timing/resources/blue_tao.png.sub.headers2
-rw-r--r--testing/web-platform/tests/server-timing/resources/green.pngbin0 -> 87 bytes
-rw-r--r--testing/web-platform/tests/server-timing/resources/green.png.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/navigation-timing.html38
-rw-r--r--testing/web-platform/tests/server-timing/resources/navigation-timing.html.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/0.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/0.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/1.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/1.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/10.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/10.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/11.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/11.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/12.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/12.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/13.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/13.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/14.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/14.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/15.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/15.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/16.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/16.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/17.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/17.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/18.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/18.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/19.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/19.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/2.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/2.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/20.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/20.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/21.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/21.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/22.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/22.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/23.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/23.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/24.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/24.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/25.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/25.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/26.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/26.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/27.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/27.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/28.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/28.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/29.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/29.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/3.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/3.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/30.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/30.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/31.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/31.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/32.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/32.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/33.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/33.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/34.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/34.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/35.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/35.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/36.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/36.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/37.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/37.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/38.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/38.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/39.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/39.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/4.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/4.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/40.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/40.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/41.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/41.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/42.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/42.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/43.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/43.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/44.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/44.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/45.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/45.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/46.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/46.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/47.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/47.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/48.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/48.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/49.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/49.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/5.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/5.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/50.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/50.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/51.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/51.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/52.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/52.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/53.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/53.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/54.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/54.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/55.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/55.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/56.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/56.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/57.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/57.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/58.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/58.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/59.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/59.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/6.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/6.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/60.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/60.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/61.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/61.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/62.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/62.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/63.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/63.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/64.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/64.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/65.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/65.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/66.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/66.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/67.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/67.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/68.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/68.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/69.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/69.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/7.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/7.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/70.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/70.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/71.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/71.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/72.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/72.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/73.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/73.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/74.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/74.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/75.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/75.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/76.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/76.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/77.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/77.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/78.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/78.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/79.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/79.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/8.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/8.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/80.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/80.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/81.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/81.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/82.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/82.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/83.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/83.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/84.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/84.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/9.js1
-rw-r--r--testing/web-platform/tests/server-timing/resources/parsing/9.js.sub.headers1
-rw-r--r--testing/web-platform/tests/server-timing/server_timing_header-parsing.https.html54
-rw-r--r--testing/web-platform/tests/server-timing/server_timing_headers_not_visible_in_fetch.https.html14
-rw-r--r--testing/web-platform/tests/server-timing/service_worker_idl.https.html18
-rw-r--r--testing/web-platform/tests/server-timing/sw.js19
-rw-r--r--testing/web-platform/tests/server-timing/test_server_timing.https.html45
-rw-r--r--testing/web-platform/tests/server-timing/test_server_timing.https.html.sub.headers1
192 files changed, 484 insertions, 0 deletions
diff --git a/testing/web-platform/tests/server-timing/META.yml b/testing/web-platform/tests/server-timing/META.yml
new file mode 100644
index 0000000000..f20b425fc5
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/META.yml
@@ -0,0 +1,4 @@
+spec: https://w3c.github.io/server-timing/
+suggested_reviewers:
+ - igrigorik
+ - cvazac
diff --git a/testing/web-platform/tests/server-timing/cross_origin.https.html b/testing/web-platform/tests/server-timing/cross_origin.https.html
new file mode 100644
index 0000000000..d31c7b006c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/cross_origin.https.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/performance-timeline-utils.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script>
+ setup({explicit_done: true})
+
+ const hostInfo = get_host_info()
+ const urls = {
+ 'same-origin': `${hostInfo.HTTPS_ORIGIN}/server-timing/resources/blue.png`,
+ 'cross-origin': `${hostInfo.HTTPS_REMOTE_ORIGIN}/server-timing/resources/blue.png`,
+ 'cross-origin-tao': `${hostInfo.HTTPS_REMOTE_ORIGIN}/server-timing/resources/blue_tao.png`
+ }
+ Object.keys(urls).forEach(function(key) {
+ const img = document.createElement('img')
+ img.src = urls[key]
+ document.getElementsByTagName('script')[0].parentNode.appendChild(img)
+ })
+
+ delayedLoadListener(function() {
+ function assertServerTimingEntries(url, expectedEntryCount) {
+ test_equals(performance.getEntriesByName(url)[0].serverTiming.length,
+ expectedEntryCount,
+ `Expected entry count for ${url}: ${expectedEntryCount}`)
+ }
+ assertServerTimingEntries(urls['same-origin'], 1)
+ assertServerTimingEntries(urls['cross-origin'], 0)
+ assertServerTimingEntries(urls['cross-origin-tao'], 1)
+ done()
+ })
+ </script>
+</head>
diff --git a/testing/web-platform/tests/server-timing/idlharness.https.any.js b/testing/web-platform/tests/server-timing/idlharness.https.any.js
new file mode 100644
index 0000000000..44bffcf59e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/idlharness.https.any.js
@@ -0,0 +1,29 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+// META: timeout=long
+
+'use strict';
+
+// https://w3c.github.io/server-timing/
+
+idl_test(
+ ['resource-timing', 'server-timing'],
+ ['performance-timeline', 'hr-time', 'dom'],
+ idl_array => new Promise((resolve, reject) => {
+ new PerformanceObserver(entries => {
+ entries.getEntries().forEach(e => {
+ if (!e.name.endsWith('blue.png'))
+ return;
+
+ self.resource = e;
+ self.server = e.serverTiming[0];
+ idl_array.add_objects({
+ PerformanceResourceTiming: ['resource'],
+ PerformanceServerTiming: ['server']
+ });
+ resolve();
+ })
+ }).observe({entryTypes: ['resource']});
+ fetch('resources/blue.png');
+ })
+);
diff --git a/testing/web-platform/tests/server-timing/navigation-timing-trickle.https.html b/testing/web-platform/tests/server-timing/navigation-timing-trickle.https.html
new file mode 100644
index 0000000000..3121dc01cd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/navigation-timing-trickle.https.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script>
+ setup({explicit_done: true})
+ window.addEventListener("message", e => {
+ test(() => {
+ assert_equals(e.data, "PASS", "The iframe saw ServerTiming entries in its NavigationTiming entry.");
+ done();
+ })
+ });
+ </script>
+</head>
+<body>
+<iframe src="resources/navigation-timing.html?pipe=trickle(800:d1)"></iframe>
+</body>
+
+
diff --git a/testing/web-platform/tests/server-timing/navigation_timing_idl.https.html b/testing/web-platform/tests/server-timing/navigation_timing_idl.https.html
new file mode 100644
index 0000000000..154bc6b044
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/navigation_timing_idl.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/performance-timeline-utils.js"></script>
+ <script>
+ setup({single_test: true})
+ delayedLoadListener(function(){
+ assert_not_equals(typeof performance.getEntriesByType('navigation')[0].serverTiming, 'undefined',
+ 'An instance of `PerformanceNavigationTiming` should have a `serverTiming` attribute.')
+ done()
+ })
+ </script>
+</head>
diff --git a/testing/web-platform/tests/server-timing/resource_timing_idl.https.html b/testing/web-platform/tests/server-timing/resource_timing_idl.https.html
new file mode 100644
index 0000000000..a719a89097
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resource_timing_idl.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/performance-timeline-utils.js"></script>
+ <script>
+ setup({single_test: true})
+ delayedLoadListener(function(){
+ assert_not_equals(typeof performance.getEntriesByType('resource')[0].serverTiming, 'undefined',
+ 'An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute.')
+ done()
+ })
+ </script>
+</head>
diff --git a/testing/web-platform/tests/server-timing/resources/blue.png b/testing/web-platform/tests/server-timing/resources/blue.png
new file mode 100644
index 0000000000..4498dd258a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/blue.png
Binary files differ
diff --git a/testing/web-platform/tests/server-timing/resources/blue.png.sub.headers b/testing/web-platform/tests/server-timing/resources/blue.png.sub.headers
new file mode 100644
index 0000000000..948e7f0190
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/blue.png.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric2; dur=2.1; desc=blue.png
diff --git a/testing/web-platform/tests/server-timing/resources/blue_cors.png b/testing/web-platform/tests/server-timing/resources/blue_cors.png
new file mode 100644
index 0000000000..4498dd258a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/blue_cors.png
Binary files differ
diff --git a/testing/web-platform/tests/server-timing/resources/blue_cors.png.headers b/testing/web-platform/tests/server-timing/resources/blue_cors.png.headers
new file mode 100644
index 0000000000..2977f0a52c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/blue_cors.png.headers
@@ -0,0 +1,2 @@
+Access-Control-Allow-Origin: *
+Server-Timing: metric2; dur=2.1; desc=blue.png
diff --git a/testing/web-platform/tests/server-timing/resources/blue_tao.png b/testing/web-platform/tests/server-timing/resources/blue_tao.png
new file mode 100644
index 0000000000..4498dd258a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/blue_tao.png
Binary files differ
diff --git a/testing/web-platform/tests/server-timing/resources/blue_tao.png.sub.headers b/testing/web-platform/tests/server-timing/resources/blue_tao.png.sub.headers
new file mode 100644
index 0000000000..3ca09d6a9d
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/blue_tao.png.sub.headers
@@ -0,0 +1,2 @@
+Timing-Allow-Origin: *
+Server-Timing: metric2; dur=2.1; desc=blue.png
diff --git a/testing/web-platform/tests/server-timing/resources/green.png b/testing/web-platform/tests/server-timing/resources/green.png
new file mode 100644
index 0000000000..28a1faab37
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/green.png
Binary files differ
diff --git a/testing/web-platform/tests/server-timing/resources/green.png.sub.headers b/testing/web-platform/tests/server-timing/resources/green.png.sub.headers
new file mode 100644
index 0000000000..b135472f86
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/green.png.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric3; dur=3.1; desc=green.png
diff --git a/testing/web-platform/tests/server-timing/resources/navigation-timing.html b/testing/web-platform/tests/server-timing/resources/navigation-timing.html
new file mode 100644
index 0000000000..e6b1ba4866
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/navigation-timing.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script>
+ const server_timing = performance.getEntriesByType('navigation')[0].serverTiming;
+ const compare_entry = (entry, expected) => {
+ if (!entry) {
+ return false;
+ }
+ const keys = Object.keys(expected);
+ for (key of keys) {
+ if (entry[key] != expected[key]) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ if (!compare_entry(server_timing[0], {
+ duration: 1.1,
+ name: 'metric1',
+ description: 'document',
+ }) ||
+ !compare_entry(server_timing[1], {
+ duration: 1.2,
+ name: 'metric1',
+ description: 'document',
+ })) {
+ parent.postMessage("FAIL", "*");
+ }
+ parent.postMessage( "PASS", "*");
+ </script>
+ <!-- The script above should not go beyond 800 bytes, or it will be trickled, defeating the test -->
+</head>
+<body>
+ <!-- This comment is here to make sure the document body is larger than 800 bytes, so will be trickled down -->
+</body>
+</html>
diff --git a/testing/web-platform/tests/server-timing/resources/navigation-timing.html.headers b/testing/web-platform/tests/server-timing/resources/navigation-timing.html.headers
new file mode 100644
index 0000000000..ad018b70fd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/navigation-timing.html.headers
@@ -0,0 +1 @@
+Server-Timing: metric1; dur=1.1; desc=document, metric1; dur=1.2; desc=document
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/0.js b/testing/web-platform/tests/server-timing/resources/parsing/0.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/0.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/0.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/0.js.sub.headers
new file mode 100644
index 0000000000..6f9cb19400
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/0.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing:
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/1.js b/testing/web-platform/tests/server-timing/resources/parsing/1.js
new file mode 100644
index 0000000000..03b778bd84
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/1.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/1.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/1.js.sub.headers
new file mode 100644
index 0000000000..d5ebb5fbff
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/1.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/10.js b/testing/web-platform/tests/server-timing/resources/parsing/10.js
new file mode 100644
index 0000000000..03b778bd84
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/10.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/10.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/10.js.sub.headers
new file mode 100644
index 0000000000..fc2300f874
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/10.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric ;
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/11.js b/testing/web-platform/tests/server-timing/resources/parsing/11.js
new file mode 100644
index 0000000000..03b778bd84
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/11.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/11.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/11.js.sub.headers
new file mode 100644
index 0000000000..d5ed699c5c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/11.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric ,
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/12.js b/testing/web-platform/tests/server-timing/resources/parsing/12.js
new file mode 100644
index 0000000000..fc827f8735
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/12.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4,"desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/12.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/12.js.sub.headers
new file mode 100644
index 0000000000..7b89b475bd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/12.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric ; dur = 123.4 ; desc = description
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/13.js b/testing/web-platform/tests/server-timing/resources/parsing/13.js
new file mode 100644
index 0000000000..02f8c3c84d
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/13.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/13.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/13.js.sub.headers
new file mode 100644
index 0000000000..dcb056faa8
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/13.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric ; desc = description ; dur = 123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/14.js b/testing/web-platform/tests/server-timing/resources/parsing/14.js
new file mode 100644
index 0000000000..966e9634e3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/14.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/14.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/14.js.sub.headers
new file mode 100644
index 0000000000..7ebf8c3bfd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/14.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc = "description"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/15.js b/testing/web-platform/tests/server-timing/resources/parsing/15.js
new file mode 100644
index 0000000000..afef77d163
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/15.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric1","dur":12.3,"desc":"description1"},{"name":"metric2","dur":45.6,"desc":"description2"},{"name":"metric3","dur":78.9,"desc":"description3"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/15.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/15.js.sub.headers
new file mode 100644
index 0000000000..0389e99790
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/15.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1;dur=12.3;desc=description1,metric2;dur=45.6;desc=description2,metric3;dur=78.9;desc=description3
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/16.js b/testing/web-platform/tests/server-timing/resources/parsing/16.js
new file mode 100644
index 0000000000..b49b1785e8
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/16.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric1"},{"name":"metric2"},{"name":"metric3"},{"name":"metric4"},{"name":"metric5"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/16.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/16.js.sub.headers
new file mode 100644
index 0000000000..b618a89de9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/16.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1,metric2 ,metric3, metric4 , metric5
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/17.js b/testing/web-platform/tests/server-timing/resources/parsing/17.js
new file mode 100644
index 0000000000..966e9634e3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/17.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/17.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/17.js.sub.headers
new file mode 100644
index 0000000000..c083f605b3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/17.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="description"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/18.js b/testing/web-platform/tests/server-timing/resources/parsing/18.js
new file mode 100644
index 0000000000..3c47d76055
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/18.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"\t description \t"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/18.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/18.js.sub.headers
new file mode 100644
index 0000000000..aa51ae040f
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/18.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=" description "
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/19.js b/testing/web-platform/tests/server-timing/resources/parsing/19.js
new file mode 100644
index 0000000000..83fb4f3672
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/19.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"descr\"iption"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/19.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/19.js.sub.headers
new file mode 100644
index 0000000000..d097b92029
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/19.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="descr\"iption"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/2.js b/testing/web-platform/tests/server-timing/resources/parsing/2.js
new file mode 100644
index 0000000000..b763b8145e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/2.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/2.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/2.js.sub.headers
new file mode 100644
index 0000000000..14eb2f0774
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/2.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/20.js b/testing/web-platform/tests/server-timing/resources/parsing/20.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/20.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/20.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/20.js.sub.headers
new file mode 100644
index 0000000000..9b131fcb90
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/20.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/21.js b/testing/web-platform/tests/server-timing/resources/parsing/21.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/21.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/21.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/21.js.sub.headers
new file mode 100644
index 0000000000..7134be2654
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/21.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/22.js b/testing/web-platform/tests/server-timing/resources/parsing/22.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/22.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/22.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/22.js.sub.headers
new file mode 100644
index 0000000000..465a36b600
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/22.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/23.js b/testing/web-platform/tests/server-timing/resources/parsing/23.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/23.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/23.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/23.js.sub.headers
new file mode 100644
index 0000000000..3b76de4a05
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/23.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/24.js b/testing/web-platform/tests/server-timing/resources/parsing/24.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/24.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/24.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/24.js.sub.headers
new file mode 100644
index 0000000000..c54a4d85f5
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/24.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/25.js b/testing/web-platform/tests/server-timing/resources/parsing/25.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/25.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/25.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/25.js.sub.headers
new file mode 100644
index 0000000000..752441eb90
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/25.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/26.js b/testing/web-platform/tests/server-timing/resources/parsing/26.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/26.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/26.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/26.js.sub.headers
new file mode 100644
index 0000000000..60dbdbb047
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/26.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/27.js b/testing/web-platform/tests/server-timing/resources/parsing/27.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/27.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/27.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/27.js.sub.headers
new file mode 100644
index 0000000000..feff2c042d
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/27.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/28.js b/testing/web-platform/tests/server-timing/resources/parsing/28.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/28.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/28.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/28.js.sub.headers
new file mode 100644
index 0000000000..3ca9b6b260
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/28.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\"\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/29.js b/testing/web-platform/tests/server-timing/resources/parsing/29.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/29.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/29.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/29.js.sub.headers
new file mode 100644
index 0000000000..ae0b891290
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/29.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/3.js b/testing/web-platform/tests/server-timing/resources/parsing/3.js
new file mode 100644
index 0000000000..b763b8145e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/3.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/3.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/3.js.sub.headers
new file mode 100644
index 0000000000..8c6fb60f31
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/3.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur="123.4"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/30.js b/testing/web-platform/tests/server-timing/resources/parsing/30.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/30.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/30.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/30.js.sub.headers
new file mode 100644
index 0000000000..24906f3c82
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/30.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/31.js b/testing/web-platform/tests/server-timing/resources/parsing/31.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/31.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/31.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/31.js.sub.headers
new file mode 100644
index 0000000000..aaceb6babf
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/31.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/32.js b/testing/web-platform/tests/server-timing/resources/parsing/32.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/32.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/32.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/32.js.sub.headers
new file mode 100644
index 0000000000..59e01cfa94
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/32.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=""\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/33.js b/testing/web-platform/tests/server-timing/resources/parsing/33.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/33.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/33.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/33.js.sub.headers
new file mode 100644
index 0000000000..d81429ecad
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/33.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/34.js b/testing/web-platform/tests/server-timing/resources/parsing/34.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/34.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/34.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/34.js.sub.headers
new file mode 100644
index 0000000000..bfb889515d
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/34.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/35.js b/testing/web-platform/tests/server-timing/resources/parsing/35.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/35.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/35.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/35.js.sub.headers
new file mode 100644
index 0000000000..ff41d80b69
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/35.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/36.js b/testing/web-platform/tests/server-timing/resources/parsing/36.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/36.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/36.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/36.js.sub.headers
new file mode 100644
index 0000000000..a702069f7d
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/36.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\"\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/37.js b/testing/web-platform/tests/server-timing/resources/parsing/37.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/37.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/37.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/37.js.sub.headers
new file mode 100644
index 0000000000..ecc3756393
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/37.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\\""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/38.js b/testing/web-platform/tests/server-timing/resources/parsing/38.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/38.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/38.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/38.js.sub.headers
new file mode 100644
index 0000000000..b13d9f419f
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/38.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\"\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/39.js b/testing/web-platform/tests/server-timing/resources/parsing/39.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/39.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/39.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/39.js.sub.headers
new file mode 100644
index 0000000000..0297223656
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/39.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\"\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/4.js b/testing/web-platform/tests/server-timing/resources/parsing/4.js
new file mode 100644
index 0000000000..966e9634e3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/4.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/4.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/4.js.sub.headers
new file mode 100644
index 0000000000..e929723eed
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/4.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=description
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/40.js b/testing/web-platform/tests/server-timing/resources/parsing/40.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/40.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/40.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/40.js.sub.headers
new file mode 100644
index 0000000000..9dd5cd4a76
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/40.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\""\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/41.js b/testing/web-platform/tests/server-timing/resources/parsing/41.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/41.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/41.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/41.js.sub.headers
new file mode 100644
index 0000000000..c5a006cd4a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/41.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=\"""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/42.js b/testing/web-platform/tests/server-timing/resources/parsing/42.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/42.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/42.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/42.js.sub.headers
new file mode 100644
index 0000000000..8a04d7c7f6
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/42.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/43.js b/testing/web-platform/tests/server-timing/resources/parsing/43.js
new file mode 100644
index 0000000000..f3ac7dcc2a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/43.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"\\"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/43.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/43.js.sub.headers
new file mode 100644
index 0000000000..8208c16ff3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/43.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/44.js b/testing/web-platform/tests/server-timing/resources/parsing/44.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/44.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/44.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/44.js.sub.headers
new file mode 100644
index 0000000000..e50f42b377
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/44.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\"\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/45.js b/testing/web-platform/tests/server-timing/resources/parsing/45.js
new file mode 100644
index 0000000000..82de6a40e5
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/45.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"\""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/45.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/45.js.sub.headers
new file mode 100644
index 0000000000..055df4fbd4
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/45.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="\""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/46.js b/testing/web-platform/tests/server-timing/resources/parsing/46.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/46.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/46.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/46.js.sub.headers
new file mode 100644
index 0000000000..5d7ef807f6
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/46.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=""\\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/47.js b/testing/web-platform/tests/server-timing/resources/parsing/47.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/47.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/47.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/47.js.sub.headers
new file mode 100644
index 0000000000..f52c6e8ae2
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/47.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=""\"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/48.js b/testing/web-platform/tests/server-timing/resources/parsing/48.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/48.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/48.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/48.js.sub.headers
new file mode 100644
index 0000000000..9eeadd38d3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/48.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="""\
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/49.js b/testing/web-platform/tests/server-timing/resources/parsing/49.js
new file mode 100644
index 0000000000..349a7e0dd9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/49.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":""}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/49.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/49.js.sub.headers
new file mode 100644
index 0000000000..2dbff3ca6c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/49.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=""""
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/5.js b/testing/web-platform/tests/server-timing/resources/parsing/5.js
new file mode 100644
index 0000000000..966e9634e3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/5.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/5.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/5.js.sub.headers
new file mode 100644
index 0000000000..c083f605b3
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/5.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="description"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/50.js b/testing/web-platform/tests/server-timing/resources/parsing/50.js
new file mode 100644
index 0000000000..413d9b65bc
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/50.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":12.3,"desc":"description1"},{"name":"metric","dur":45.6,"desc":"description2"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/50.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/50.js.sub.headers
new file mode 100644
index 0000000000..c8ac573fa2
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/50.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=12.3;desc=description1,metric;dur=45.6;desc=description2
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/51.js b/testing/web-platform/tests/server-timing/resources/parsing/51.js
new file mode 100644
index 0000000000..fc827f8735
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/51.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4,"desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/51.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/51.js.sub.headers
new file mode 100644
index 0000000000..5825a547c9
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/51.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;DuR=123.4;DeSc=description
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/52.js b/testing/web-platform/tests/server-timing/resources/parsing/52.js
new file mode 100644
index 0000000000..a97e9d0d0f
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/52.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"MeTrIc","desc":"DeScRiPtIoN"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/52.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/52.js.sub.headers
new file mode 100644
index 0000000000..f5fcff981c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/52.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: MeTrIc;desc=DeScRiPtIoN
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/53.js b/testing/web-platform/tests/server-timing/resources/parsing/53.js
new file mode 100644
index 0000000000..adf74faaf1
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/53.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":0}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/53.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/53.js.sub.headers
new file mode 100644
index 0000000000..3de0f19046
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/53.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=foo
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/54.js b/testing/web-platform/tests/server-timing/resources/parsing/54.js
new file mode 100644
index 0000000000..adf74faaf1
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/54.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":0}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/54.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/54.js.sub.headers
new file mode 100644
index 0000000000..78f670422c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/54.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur="foo"
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/55.js b/testing/web-platform/tests/server-timing/resources/parsing/55.js
new file mode 100644
index 0000000000..429b528375
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/55.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric1","desc":"description","dur":123.4},{"name":"metric2"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/55.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/55.js.sub.headers
new file mode 100644
index 0000000000..578232a4ab
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/55.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1;foo=bar;desc=description;foo=bar;dur=123.4;foo=bar,metric2
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/56.js b/testing/web-platform/tests/server-timing/resources/parsing/56.js
new file mode 100644
index 0000000000..b763b8145e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/56.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/56.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/56.js.sub.headers
new file mode 100644
index 0000000000..8a220ab50a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/56.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=123.4;dur=567.8
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/57.js b/testing/web-platform/tests/server-timing/resources/parsing/57.js
new file mode 100644
index 0000000000..adf74faaf1
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/57.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":0}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/57.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/57.js.sub.headers
new file mode 100644
index 0000000000..2614e2034c
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/57.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=foo;dur=567.8
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/58.js b/testing/web-platform/tests/server-timing/resources/parsing/58.js
new file mode 100644
index 0000000000..05004e5802
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/58.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description1"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/58.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/58.js.sub.headers
new file mode 100644
index 0000000000..e5ef56948b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/58.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=description1;desc=description2
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/59.js b/testing/web-platform/tests/server-timing/resources/parsing/59.js
new file mode 100644
index 0000000000..c9a9a98c5e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/59.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":0,"desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/59.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/59.js.sub.headers
new file mode 100644
index 0000000000..5b44836e70
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/59.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur;dur=123.4;desc=description
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/6.js b/testing/web-platform/tests/server-timing/resources/parsing/6.js
new file mode 100644
index 0000000000..fc827f8735
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/6.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4,"desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/6.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/6.js.sub.headers
new file mode 100644
index 0000000000..5dbc9d6552
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/6.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=123.4;desc=description
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/60.js b/testing/web-platform/tests/server-timing/resources/parsing/60.js
new file mode 100644
index 0000000000..c9a9a98c5e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/60.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":0,"desc":"description"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/60.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/60.js.sub.headers
new file mode 100644
index 0000000000..bfbddf111a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/60.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur=;dur=123.4;desc=description
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/61.js b/testing/web-platform/tests/server-timing/resources/parsing/61.js
new file mode 100644
index 0000000000..ce7d800979
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/61.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/61.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/61.js.sub.headers
new file mode 100644
index 0000000000..6d605ad857
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/61.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc;desc=description;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/62.js b/testing/web-platform/tests/server-timing/resources/parsing/62.js
new file mode 100644
index 0000000000..ce7d800979
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/62.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/62.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/62.js.sub.headers
new file mode 100644
index 0000000000..182a81a7bf
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/62.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=;desc=description;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/63.js b/testing/web-platform/tests/server-timing/resources/parsing/63.js
new file mode 100644
index 0000000000..d6842ba988
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/63.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"d1","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/63.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/63.js.sub.headers
new file mode 100644
index 0000000000..8e9b117988
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/63.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=d1 d2;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/64.js b/testing/web-platform/tests/server-timing/resources/parsing/64.js
new file mode 100644
index 0000000000..88037d15dd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/64.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric1","desc":"d1"},{"name":"metric2"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/64.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/64.js.sub.headers
new file mode 100644
index 0000000000..b1dd0cc5b4
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/64.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1;desc=d1 d2,metric2
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/65.js b/testing/web-platform/tests/server-timing/resources/parsing/65.js
new file mode 100644
index 0000000000..d6842ba988
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/65.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"d1","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/65.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/65.js.sub.headers
new file mode 100644
index 0000000000..63946cdd08
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/65.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="d1" d2;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/66.js b/testing/web-platform/tests/server-timing/resources/parsing/66.js
new file mode 100644
index 0000000000..88037d15dd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/66.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric1","desc":"d1"},{"name":"metric2"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/66.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/66.js.sub.headers
new file mode 100644
index 0000000000..bddbb2cbb6
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/66.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1;desc="d1" d2,metric2
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/67.js b/testing/web-platform/tests/server-timing/resources/parsing/67.js
new file mode 100644
index 0000000000..b763b8145e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/67.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/67.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/67.js.sub.headers
new file mode 100644
index 0000000000..5fe55cc32a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/67.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric== ""foo;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/68.js b/testing/web-platform/tests/server-timing/resources/parsing/68.js
new file mode 100644
index 0000000000..1bc4d7fea6
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/68.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric1"},{"name":"metric2"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/68.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/68.js.sub.headers
new file mode 100644
index 0000000000..27dabbe090
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/68.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1== ""foo,metric2
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/69.js b/testing/web-platform/tests/server-timing/resources/parsing/69.js
new file mode 100644
index 0000000000..adf74faaf1
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/69.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","dur":0}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/69.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/69.js.sub.headers
new file mode 100644
index 0000000000..55282410e7
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/69.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;dur foo=12
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/7.js b/testing/web-platform/tests/server-timing/resources/parsing/7.js
new file mode 100644
index 0000000000..02f8c3c84d
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/7.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"description","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/7.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/7.js.sub.headers
new file mode 100644
index 0000000000..c6369005d8
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/7.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc=description;dur=123.4
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/70.js b/testing/web-platform/tests/server-timing/resources/parsing/70.js
new file mode 100644
index 0000000000..03b778bd84
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/70.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/70.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/70.js.sub.headers
new file mode 100644
index 0000000000..aa8f70bd90
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/70.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;foo dur=12
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/71.js b/testing/web-platform/tests/server-timing/resources/parsing/71.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/71.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/71.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/71.js.sub.headers
new file mode 100644
index 0000000000..26fcf28e39
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/71.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing:
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/72.js b/testing/web-platform/tests/server-timing/resources/parsing/72.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/72.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/72.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/72.js.sub.headers
new file mode 100644
index 0000000000..74e059fd74
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/72.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: =
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/73.js b/testing/web-platform/tests/server-timing/resources/parsing/73.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/73.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/73.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/73.js.sub.headers
new file mode 100644
index 0000000000..eeaebdf48f
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/73.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: [
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/74.js b/testing/web-platform/tests/server-timing/resources/parsing/74.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/74.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/74.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/74.js.sub.headers
new file mode 100644
index 0000000000..b4f3c562f6
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/74.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ]
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/75.js b/testing/web-platform/tests/server-timing/resources/parsing/75.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/75.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/75.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/75.js.sub.headers
new file mode 100644
index 0000000000..9a3684d48e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/75.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ;
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/76.js b/testing/web-platform/tests/server-timing/resources/parsing/76.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/76.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/76.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/76.js.sub.headers
new file mode 100644
index 0000000000..79cbd0c4d5
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/76.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ,
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/77.js b/testing/web-platform/tests/server-timing/resources/parsing/77.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/77.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/77.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/77.js.sub.headers
new file mode 100644
index 0000000000..888fa71e64
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/77.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: =;
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/78.js b/testing/web-platform/tests/server-timing/resources/parsing/78.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/78.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/78.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/78.js.sub.headers
new file mode 100644
index 0000000000..fc40e706cd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/78.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ;=
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/79.js b/testing/web-platform/tests/server-timing/resources/parsing/79.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/79.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/79.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/79.js.sub.headers
new file mode 100644
index 0000000000..0516c4cc05
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/79.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: =,
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/8.js b/testing/web-platform/tests/server-timing/resources/parsing/8.js
new file mode 100644
index 0000000000..711e381810
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/8.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"aB3!#$%&'*+-.^_`|~"}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/8.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/8.js.sub.headers
new file mode 100644
index 0000000000..1d1bb026dd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/8.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: aB3!#$%&'*+-.^_`|~
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/80.js b/testing/web-platform/tests/server-timing/resources/parsing/80.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/80.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/80.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/80.js.sub.headers
new file mode 100644
index 0000000000..03b3909f55
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/80.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ,=
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/81.js b/testing/web-platform/tests/server-timing/resources/parsing/81.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/81.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/81.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/81.js.sub.headers
new file mode 100644
index 0000000000..680d2a2422
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/81.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ;,
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/82.js b/testing/web-platform/tests/server-timing/resources/parsing/82.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/82.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/82.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/82.js.sub.headers
new file mode 100644
index 0000000000..7ab1448b88
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/82.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: ,;
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/83.js b/testing/web-platform/tests/server-timing/resources/parsing/83.js
new file mode 100644
index 0000000000..2848a1c82b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/83.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/83.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/83.js.sub.headers
new file mode 100644
index 0000000000..bd079bc62a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/83.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: =;,
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/84.js b/testing/web-platform/tests/server-timing/resources/parsing/84.js
new file mode 100644
index 0000000000..1d5893301e
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/84.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"tabs-should-get-trimmed","dur":42}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/84.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/84.js.sub.headers
new file mode 100644
index 0000000000..ae864b539b
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/84.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric; desc= tabs-should-get-trimmed ;dur= 42
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/9.js b/testing/web-platform/tests/server-timing/resources/parsing/9.js
new file mode 100644
index 0000000000..3048f3fa7a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/9.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric","desc":"descr;,=iption","dur":123.4}])
diff --git a/testing/web-platform/tests/server-timing/resources/parsing/9.js.sub.headers b/testing/web-platform/tests/server-timing/resources/parsing/9.js.sub.headers
new file mode 100644
index 0000000000..c385706d33
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/resources/parsing/9.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;desc="descr;,=iption";dur=123.4
diff --git a/testing/web-platform/tests/server-timing/server_timing_header-parsing.https.html b/testing/web-platform/tests/server-timing/server_timing_header-parsing.https.html
new file mode 100644
index 0000000000..737cc08045
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/server_timing_header-parsing.https.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<!--
+tests generated by:
+ https://github.com/cvazac/generate-server-timing-tests
+-->
+
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/performance-timeline-utils.js"></script>
+ <script>
+ setup({explicit_done: true})
+ const tests = []
+ const urlToIndex = {}
+ function testServerTiming(script, expectedResults) {
+ const url = script.src
+ tests[urlToIndex[url]] = {url, expectedResults}
+ }
+ function runTests() {
+ tests.forEach(function({url, expectedResults}) {
+ const {serverTiming} = performance.getEntriesByName(url)[0]
+ const fileName = url.substring(url.lastIndexOf('/') + 1)
+
+ test_equals(serverTiming.length, expectedResults.length, `${fileName} - count (${serverTiming.length} ?== ${expectedResults.length})`)
+
+ expectedResults.forEach(function(expectedResult, i) {
+ const dur = expectedResult.dur || 0
+ const desc = expectedResult.desc || ''
+ const index = expectedResults.length === 1 ? '' : `[${i}].`
+ const actual = serverTiming[i]
+ if (actual === undefined) {
+ // Protect against more expected results than actual results.
+ return
+ }
+ test_equals(expectedResult.name, actual.name,
+ `${fileName} - ${index}name (${expectedResult.name} ?== ${actual.name})`)
+ test_equals(dur, actual.duration,
+ `${fileName} - ${index}duration (${dur} ?== ${actual.duration})`)
+ test_equals(desc, actual.description,
+ `${fileName} - ${index}description (${desc} ?== ${actual.description})`)
+ })
+ })
+ done()
+ }
+ for (let i = 0; i <= 84; i++) {
+ const script = document.createElement('script')
+ script.src = `./resources/parsing/${i}.js`
+ document.getElementsByTagName('head')[0].appendChild(script)
+ urlToIndex[script.src] = i
+ }
+ delayedLoadListener(runTests)
+ </script>
+</head>
diff --git a/testing/web-platform/tests/server-timing/server_timing_headers_not_visible_in_fetch.https.html b/testing/web-platform/tests/server-timing/server_timing_headers_not_visible_in_fetch.https.html
new file mode 100644
index 0000000000..3502f491d5
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/server_timing_headers_not_visible_in_fetch.https.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script>
+ const {HTTPS_REMOTE_ORIGIN} = get_host_info()
+ promise_test(async t => {
+ const response = await fetch(`${HTTPS_REMOTE_ORIGIN}/server-timing/resources/blue_cors.png`, {mode: "cors"});
+ assert_equals(response.headers.has("server-timing"), false);
+ }, "Server-Timing headers should be explicitly allowed by CORS");
+ </script>
+</head>
diff --git a/testing/web-platform/tests/server-timing/service_worker_idl.https.html b/testing/web-platform/tests/server-timing/service_worker_idl.https.html
new file mode 100644
index 0000000000..5c493fdcb0
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/service_worker_idl.https.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script>
+ (async () => {
+ const scope = 'does/not/exist'
+
+ let registration = await navigator.serviceWorker.getRegistration(scope)
+ if (registration)
+ await registration.unregister()
+ registration = await navigator.serviceWorker.register('./sw.js', {scope})
+
+ fetch_tests_from_worker(registration.installing)
+ })()
+ </script>
+</head>
diff --git a/testing/web-platform/tests/server-timing/sw.js b/testing/web-platform/tests/server-timing/sw.js
new file mode 100644
index 0000000000..a6fd72ad17
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/sw.js
@@ -0,0 +1,19 @@
+importScripts('/resources/testharness.js')
+
+promise_test((test) => {
+ return fetch('./sw.js').then((response) => {
+ return new Promise((resolve, reject) => {
+ step_timeout(() => {
+ const entry = performance.getEntriesByName(response.url)[0]
+ if (!entry) {
+ reject('no entry: ' + response.url)
+ }
+
+ assert_not_equals(typeof entry.serverTiming,
+ 'undefined',
+ 'An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute in the Service Worker context.')
+ resolve()
+ }, 250)
+ })
+ })
+})
diff --git a/testing/web-platform/tests/server-timing/test_server_timing.https.html b/testing/web-platform/tests/server-timing/test_server_timing.https.html
new file mode 100644
index 0000000000..4f3554aa4a
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/test_server_timing.https.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<head>
+ <meta charset='utf-8' />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/performance-timeline-utils.js"></script>
+ <script>
+ setup({explicit_done: true})
+
+ delayedLoadListener(function() {
+ // there should be exactly three server-timing entries, 2 for document, 1 for img#one
+ test_entries(performance.getEntriesByType('navigation')[0].serverTiming, [{
+ duration: 1.1,
+ name: 'metric1',
+ description: 'document',
+ }, {
+ duration: 1.2,
+ name: 'metric1',
+ description: 'document',
+ }])
+ test_entries(performance.getEntriesByName(document.querySelector('img#one').src)[0].serverTiming, [{
+ duration: 2.1,
+ name: 'metric2',
+ description: 'blue.png',
+ }])
+
+ new PerformanceObserver(function(entryList, observer) {
+ // there should be exactly one server-timing entry, 1 for img#two
+ test_entries(entryList.getEntriesByName(document.querySelector('img#two').src)[0].serverTiming, [{
+ duration: 3.1,
+ name: 'metric3',
+ description: 'green.png',
+ }])
+ observer.disconnect()
+ done()
+ }).observe({entryTypes: ['resource']})
+
+ var img = document.createElement('img')
+ img.id = 'two'
+ img.src = './resources/green.png'
+ document.getElementsByTagName('script')[0].parentNode.appendChild(img)
+ })
+ </script>
+</head>
+<img id='one' src='resources/blue.png'>
diff --git a/testing/web-platform/tests/server-timing/test_server_timing.https.html.sub.headers b/testing/web-platform/tests/server-timing/test_server_timing.https.html.sub.headers
new file mode 100644
index 0000000000..ad018b70fd
--- /dev/null
+++ b/testing/web-platform/tests/server-timing/test_server_timing.https.html.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric1; dur=1.1; desc=document, metric1; dur=1.2; desc=document