Merge mozilla-inbound to mozilla-central. a=merge
authorCosmin Sabou <csabou@mozilla.com>
Fri, 30 Aug 2019 00:46:40 +0300
changeset 551268 5c424bc57454d9d2f6d64c02aaf5d31c04f9ad2f
parent 551186 03cc4203321f4f63d08bf290d697e433b72be972 (current diff)
parent 551267 bafad3cf557bab4f7f42ee4818bc711128785cbe (diff)
child 551269 f2e967b9dd55ea1f19cc40a1fc6408ae5782ea7e
push id11865
push userbtara@mozilla.com
push dateMon, 02 Sep 2019 08:54:37 +0000
treeherdermozilla-beta@37f59c4671b3 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone70.0a1
first release with
nightly linux32
5c424bc57454 / 70.0a1 / 20190829214656 / files
nightly linux64
5c424bc57454 / 70.0a1 / 20190829214656 / files
nightly mac
5c424bc57454 / 70.0a1 / 20190829214656 / files
nightly win32
5c424bc57454 / 70.0a1 / 20190829214656 / files
nightly win64
5c424bc57454 / 70.0a1 / 20190829214656 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-inbound to mozilla-central. a=merge
testing/web-platform/meta/2dcontext/imagebitmap/createImageBitmap-origin.sub.html.ini
testing/web-platform/meta/dom/interfaces.html.ini
testing/web-platform/meta/event-timing/bufferbeforeonload.html.ini
testing/web-platform/meta/event-timing/observethenonload.html.ini
testing/web-platform/meta/event-timing/onloadthenobserve-firstInput.html.ini
testing/web-platform/meta/event-timing/onloadthenobserve.html.ini
testing/web-platform/meta/mathml/relations/css-styling/width-height-001.html.ini
testing/web-platform/meta/media-source/idlharness.any.js.ini
testing/web-platform/tests/dom/interfaces.html
testing/web-platform/tests/event-timing/bufferbeforeonload.html
testing/web-platform/tests/event-timing/observethenonload.html
testing/web-platform/tests/event-timing/onloadthenobserve-firstInput.html
testing/web-platform/tests/event-timing/onloadthenobserve.html
testing/web-platform/tests/infrastructure/metadata/infrastructure/reftest/reftest_fuzzy_chain_ini.html
testing/web-platform/tests/media-source/idlharness.any.js
deleted file mode 100644
--- a/testing/web-platform/meta/2dcontext/imagebitmap/createImageBitmap-origin.sub.html.ini
+++ /dev/null
@@ -1,55 +0,0 @@
-[createImageBitmap-origin.sub.html]
-  expected:
-    if webrender and debug and (os == "linux"): TIMEOUT
-  [redirected to cross-origin HTMLVideoElement: origin unclear 2dContext.drawImage]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [redirected to cross-origin HTMLVideoElement: origin unclear bitmaprenderer.transferFromImageBitmap]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [unclean HTMLCanvasElement: origin unclear bitmaprenderer.transferFromImageBitmap]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [unclean HTMLCanvasElement: origin unclear getImageData]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [cross-origin HTMLVideoElement: origin unclear bitmaprenderer.transferFromImageBitmap]
-    expected:
-      if webrender and debug and (os == "linux"): TIMEOUT
-
-  [redirected to same-origin HTMLVideoElement: origin unclear getImageData]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [redirected to same-origin HTMLVideoElement: origin unclear 2dContext.drawImage]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [unclean ImageBitmap: origin unclear bitmaprenderer.transferFromImageBitmap]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [redirected to same-origin HTMLVideoElement: origin unclear bitmaprenderer.transferFromImageBitmap]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [redirected to cross-origin HTMLVideoElement: origin unclear getImageData]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [unclean ImageBitmap: origin unclear getImageData]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [unclean HTMLCanvasElement: origin unclear 2dContext.drawImage]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
-  [unclean ImageBitmap: origin unclear 2dContext.drawImage]
-    expected:
-      if webrender and debug and (os == "linux"): NOTRUN
-
--- a/testing/web-platform/meta/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html.ini
+++ b/testing/web-platform/meta/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html.ini
@@ -1,26 +1,22 @@
 [serviceworker_cookieStore_subscriptions.tentative.https.html]
   disabled:
     if os == "linux": https://bugzilla.mozilla.org/show_bug.cgi?id=1573036
     if (os == "win") and (processor == "aarch64"): https://bugzilla.mozilla.org/show_bug.cgi?id=1573036
   expected:
-    if (os == "mac") and not debug and (version == "OS X 10.14"): [OK, TIMEOUT]
-    if (os == "mac") and not debug: ["TIMEOUT", "OK"]
+    if (os == "mac") and not debug: [TIMEOUT, OK]
     TIMEOUT
   [getChangeSubscriptions returns subscriptions passed to subscribeToChanges]
     expected:
-      if (os == "mac") and not debug and (version == "OS X 10.14"): [FAIL, TIMEOUT]
-      if (os == "mac") and not debug: ["TIMEOUT", "FAIL"]
+      if (os == "mac") and not debug: [TIMEOUT, FAIL]
       TIMEOUT
 
   [subscribeToChanges rejects when called outside the install handler]
     expected:
-      if (os == "mac") and not debug and (version == "OS X 10.14"): [FAIL, NOTRUN]
-      if (os == "mac") and not debug: ["NOTRUN", "FAIL"]
+      if (os == "mac") and not debug: [FAIL, NOTRUN]
       NOTRUN
 
   [cookiechange dispatched with cookie change that matches subscription]
     expected:
-      if (os == "mac") and not debug and (version == "OS X 10.14"): [FAIL, NOTRUN]
-      if (os == "mac") and not debug: ["NOTRUN", "FAIL"]
+      if (os == "mac") and not debug: [FAIL, NOTRUN]
       NOTRUN
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-align/animation/__dir__.ini
@@ -0,0 +1,1 @@
+leak-threshold: [default:51200]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-align/animation/column-gap-interpolation.html.ini
@@ -0,0 +1,186 @@
+[column-gap-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [column-gap interpolation]
+    expected: FAIL
+
+  [CSS Transitions: property <column-gap> from [inherit\] to [20px\] at (-0.3) should be [111px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [normal\] to [20px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <column-gap> from [normal\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [Web Animations: property <column-gap> from [unset\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Animations: property <column-gap> from neutral to [40px\] at (0.3) should be [19px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [inherit\] to [20px\] at (0.6) should be [48px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from [inherit\] to [20px\] at (0.3) should be [69px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [inherit\] to [20px\] at (1.5) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from neutral to [40px\] at (-0.3) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <column-gap> from [initial\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Transitions: property <column-gap> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [inherit\] to [20px\] at (0.6) should be [48px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from neutral to [40px\] at (1.5) should be [55px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from neutral to [40px\] at (1.5) should be [55px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [normal\] to [20px\] at (0.6) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from neutral to [40px\] at (-0.3) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from [inherit\] to [20px\] at (1.5) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [inherit\] to [20px\] at (-0.3) should be [111px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from neutral to [40px\] at (0.3) should be [19px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from neutral to [40px\] at (0.6) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [unset\] to [20px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from [0px\] to [100px\] at (0.3) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [inherit\] to [20px\] at (0.3) should be [69px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from neutral to [40px\] at (-0.3) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from neutral to [40px\] at (0.3) should be [19px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from [inherit\] to [20px\] at (0.6) should be [48px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [unset\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from neutral to [40px\] at (1.5) should be [55px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [inherit\] to [20px\] at (1.5) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [unset\] to [20px\] at (0.6) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [initial\] to [20px\] at (0.6) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <column-gap> from neutral to [40px\] at (0.6) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [inherit\] to [20px\] at (0.3) should be [69px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [initial\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [initial\] to [20px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from neutral to [40px\] at (0.6) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [0px\] to [100px\] at (0.3) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [normal\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <column-gap> from [inherit\] to [20px\] at (-0.3) should be [111px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <column-gap> from [0px\] to [100px\] at (0.3) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-align/animation/row-gap-interpolation.html.ini
@@ -0,0 +1,186 @@
+[row-gap-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [row-gap interpolation]
+    expected: FAIL
+
+  [CSS Animations: property <row-gap> from [initial\] to [20px\] at (0.6) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from neutral to [40px\] at (0.6) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [initial\] to [20px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [0px\] to [100px\] at (0.3) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [0px\] to [100px\] at (0.3) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [inherit\] to [20px\] at (0.6) should be [48px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [inherit\] to [20px\] at (1.5) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from neutral to [40px\] at (-0.3) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [unset\] to [20px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [inherit\] to [20px\] at (-0.3) should be [111px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [inherit\] to [20px\] at (0.3) should be [69px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [inherit\] to [20px\] at (0.6) should be [48px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [inherit\] to [20px\] at (-0.3) should be [111px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <row-gap> from [unset\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [Web Animations: property <row-gap> from [initial\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Animations: property <row-gap> from [initial\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [unset\] to [20px\] at (0.6) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [inherit\] to [20px\] at (0.3) should be [69px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from neutral to [40px\] at (0.6) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [inherit\] to [20px\] at (0.3) should be [69px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from neutral to [40px\] at (0.3) should be [19px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [inherit\] to [20px\] at (1.5) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [inherit\] to [20px\] at (1.5) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from neutral to [40px\] at (0.3) should be [19px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [0px\] to [100px\] at (0.3) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from neutral to [40px\] at (-0.3) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [normal\] to [20px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <row-gap> from [normal\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from neutral to [40px\] at (-0.3) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from neutral to [40px\] at (1.5) should be [55px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [unset\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [inherit\] to [20px\] at (-0.3) should be [111px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [normal\] to [20px\] at (0.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from neutral to [40px\] at (0.3) should be [19px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from neutral to [40px\] at (1.5) should be [55px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <row-gap> from neutral to [40px\] at (0.6) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from [normal\] to [20px\] at (0.6) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <row-gap> from [inherit\] to [20px\] at (0.6) should be [48px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <row-gap> from neutral to [40px\] at (1.5) should be [55px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-box/animation/padding-interpolation.html.ini
@@ -0,0 +1,4 @@
+[padding-interpolation.html]
+  [padding interpolation]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-break/animation/orphans-interpolation.html.ini
@@ -0,0 +1,364 @@
+[orphans-interpolation.html]
+  [orphans interpolation]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [10\] to [1\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [10\] to [1\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [10\] to [1\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [10\] to [1\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [initial\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from neutral to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [10\] to [1\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [10\] to [1\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [unset\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [10\] to [1\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [unset\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [10\] to [1\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [10\] to [1\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from neutral to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from neutral to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [10\] to [1\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [10\] to [1\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [10\] to [1\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [10\] to [1\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [10\] to [1\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [initial\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [10\] to [1\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [10\] to [1\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [10\] to [1\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [inherit\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [inherit\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [10\] to [1\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [inherit\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from neutral to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [10\] to [1\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [unset\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [10\] to [1\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [10\] to [1\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [10\] to [1\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <orphans> from [10\] to [1\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [unset\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [inherit\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from [initial\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <orphans> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [initial\] to [20\] at (0.7) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <orphans> from [10\] to [1\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <orphans> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-break/animation/widows-interpolation.html.ini
@@ -0,0 +1,580 @@
+[widows-interpolation.html]
+  [widows interpolation]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (1) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [unset\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from neutral to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [2\] to [4\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [initial\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from neutral to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [initial\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from neutral to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [inherit\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (-3) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [2\] to [4\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [10\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [initial\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (0.3) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [2\] to [4\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [2\] to [4\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (1) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from neutral to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [10\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [initial\] to [20\] at (1.5) should be [\]]
+    expected: FAIL
+
+  [Web Animations: property <widows> from [10\] to [20\] at (0) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (-2.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions: property <widows> from [unset\] to [20\] at (-0.5) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [10\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <widows> from [unset\] to [20\] at (0.6) should be [\]]
+    expected: FAIL
+
+  [CSS Animations: property <widows> from [inherit\] to [20\] at (-3) should be [\]]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-color/animation/__dir__.ini
@@ -0,0 +1,1 @@
+leak-threshold: [default:51200]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-color/animation/color-interpolation.html.ini
@@ -0,0 +1,190 @@
+[color-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [color interpolation]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <color> from [initial\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [initial\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [initial\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [black\] to [orange\] at (1.5) should be [rgb(255, 248, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [inherit\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [initial\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [inherit\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from neutral to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [initial\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [inherit\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [black\] to [orange\] at (1.5) should be [rgb(255, 248, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from neutral to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [inherit\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from neutral to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [black\] to [orange\] at (1.5) should be [rgb(255, 248, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [inherit\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from neutral to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [black\] to [orange\] at (0.6) should be [rgb(153, 99, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from neutral to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [initial\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [black\] to [orange\] at (0.6) should be [rgb(153, 99, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [initial\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from neutral to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from [black\] to [orange\] at (0.6) should be [rgb(153, 99, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from neutral to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from neutral to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [inherit\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [initial\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <color> from neutral to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <color> from [initial\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-flexbox/animation/__dir__.ini
@@ -0,0 +1,1 @@
+leak-threshold: [default:51200]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-flexbox/animation/flex-basis-interpolation.html.ini
@@ -0,0 +1,206 @@
+[flex-basis-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [flex-basis interpolation]
+    expected: FAIL
+
+  [CSS Animations: property <flex-basis> from [unset\] to [2%\] at (0.6) should be [2%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from neutral to [2%\] at (-0.3) should be [0.7%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from neutral to [2%\] at (0.3) should be [1.3%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [0px\] to [100px\] at (0.4) should be [40px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [inherit\] to [2%\] at (-0.3) should be [3.3%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [inherit\] to [2%\] at (0.3) should be [2.7%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [inherit\] to [2%\] at (1.5) should be [1.5%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [unset\] to [2%\] at (0.5) should be [2%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [unset\] to [2%\] at (1.5) should be [2%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [inherit\] to [2%\] at (0.3) should be [2.7%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [0%\] to [100%\] at (1.5) should be [150%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [initial\] to [2%\] at (0.5) should be [2%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from neutral to [2%\] at (-0.3) should be [0.7%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [initial\] to [2%\] at (1.5) should be [2%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from neutral to [2%\] at (1.5) should be [2.5%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [inherit\] to [2%\] at (0.6) should be [2.4%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [0px\] to [100px\] at (0.4) should be [40px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from neutral to [2%\] at (0.3) should be [1.3%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [inherit\] to [2%\] at (0.3) should be [2.7%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from neutral to [2%\] at (0.3) should be [1.3%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from neutral to [2%\] at (1.5) should be [2.5%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from neutral to [2%\] at (1.5) should be [2.5%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from neutral to [2%\] at (0.6) should be [1.6%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <flex-basis> from [initial\] to [2%\] at (0.5) should be [2%\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [inherit\] to [2%\] at (0.6) should be [2.4%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [0%\] to [100%\] at (0.6) should be [60%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [0%\] to [100%\] at (1.5) should be [150%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <flex-basis> from [unset\] to [2%\] at (0.5) should be [2%\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Animations: property <flex-basis> from [0px\] to [100px\] at (0.4) should be [40px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [0%\] to [100%\] at (1.5) should be [150%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [0%\] to [100%\] at (0.6) should be [60%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [0%\] to [100%\] at (0.4) should be [40%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [0%\] to [100%\] at (0.4) should be [40%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [inherit\] to [2%\] at (0.6) should be [2.4%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [inherit\] to [2%\] at (1.5) should be [1.5%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from neutral to [2%\] at (0.6) should be [1.6%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from neutral to [2%\] at (-0.3) should be [0.7%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [0px\] to [100px\] at (1.5) should be [150px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [0%\] to [100%\] at (0.6) should be [60%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-basis> from neutral to [2%\] at (0.6) should be [1.6%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [0px\] to [100px\] at (0.6) should be [60px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [0%\] to [100%\] at (0.4) should be [40%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [inherit\] to [2%\] at (-0.3) should be [3.3%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [inherit\] to [2%\] at (-0.3) should be [3.3%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-basis> from [initial\] to [2%\] at (0.6) should be [2%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-basis> from [inherit\] to [2%\] at (1.5) should be [1.5%\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-flexbox/animation/flex-grow-interpolation.html.ini
@@ -0,0 +1,270 @@
+[flex-grow-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [flex-grow interpolation]
+    expected: FAIL
+
+  [CSS Animations: property <flex-grow> from [1\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [1\] to [2\] at (-5) should be [0\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [unset\] to [2\] at (0.3) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [unset\] to [2\] at (0.6) should be [1.2\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [1\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [unset\] to [2\] at (1.5) should be [3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [inherit\] to [2\] at (-0.3) should be [3.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from neutral to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from neutral to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [inherit\] to [2\] at (0.3) should be [2.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [1\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from neutral to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [unset\] to [2\] at (1.5) should be [3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [0\] to [1\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [unset\] to [2\] at (0.3) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from neutral to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [1\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [inherit\] to [2\] at (0.6) should be [2.4\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [inherit\] to [2\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [initial\] to [2\] at (0.3) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [1\] to [2\] at (-5) should be [0\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from neutral to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [1\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [1\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [1\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [0\] to [1\] at (0.3) should be [0.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [initial\] to [2\] at (0.3) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from neutral to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from neutral to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [inherit\] to [2\] at (-0.3) should be [3.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [1\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [1\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [initial\] to [2\] at (1.5) should be [3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [1\] to [2\] at (-5) should be [0\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [initial\] to [2\] at (1.5) should be [3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from neutral to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from neutral to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [initial\] to [2\] at (0.6) should be [1.2\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [inherit\] to [2\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [initial\] to [2\] at (0.6) should be [1.2\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from neutral to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [0\] to [1\] at (0.6) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [initial\] to [2\] at (0.3) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [initial\] to [2\] at (1.5) should be [3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [inherit\] to [2\] at (0.6) should be [2.4\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [inherit\] to [2\] at (0.3) should be [2.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [unset\] to [2\] at (0.3) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [0\] to [1\] at (0.3) should be [0.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [1\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [1\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [1\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [unset\] to [2\] at (0.6) should be [1.2\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [unset\] to [2\] at (1.5) should be [3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [inherit\] to [2\] at (0.3) should be [2.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [inherit\] to [2\] at (-0.3) should be [3.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [initial\] to [2\] at (0.6) should be [1.2\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [unset\] to [2\] at (0.6) should be [1.2\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [0\] to [1\] at (0.6) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [0\] to [1\] at (0.3) should be [0.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [0\] to [1\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-grow> from [0\] to [1\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from neutral to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from neutral to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [0\] to [1\] at (0.6) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-grow> from [inherit\] to [2\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-grow> from [inherit\] to [2\] at (0.6) should be [2.4\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-flexbox/animation/flex-shrink-interpolation.html.ini
@@ -0,0 +1,294 @@
+[flex-shrink-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [flex-shrink interpolation]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [unset\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [unset\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [initial\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [inherit\] to [2\] at (0.6) should be [2.4\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from neutral to [2\] at (0.3) should be [1.65\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [1\] to [2\] at (-5) should be [0\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [inherit\] to [2\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from neutral to [2\] at (0.6) should be [1.8\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [unset\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [1\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [inherit\] to [2\] at (-0.3) should be [3.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from neutral to [2\] at (1.5) should be [2.25\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [1\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [initial\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [unset\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [unset\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from neutral to [2\] at (1.5) should be [2.25\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from neutral to [2\] at (0.3) should be [1.65\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [1\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [1\] to [2\] at (-5) should be [0\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [initial\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [inherit\] to [2\] at (0.6) should be [2.4\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [unset\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from neutral to [2\] at (-0.3) should be [1.35\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [inherit\] to [2\] at (0.6) should be [2.4\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [1\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [0\] to [1\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [1\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [0\] to [1\] at (0.6) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [inherit\] to [2\] at (0.3) should be [2.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [unset\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from neutral to [2\] at (-0.3) should be [1.35\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [initial\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [0\] to [1\] at (0.6) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [inherit\] to [2\] at (-0.3) should be [3.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [0\] to [1\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [1\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [unset\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [1\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [0\] to [1\] at (0.3) should be [0.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [1\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [initial\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [1\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from neutral to [2\] at (0.3) should be [1.65\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [inherit\] to [2\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [0\] to [1\] at (0.3) should be [0.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [initial\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [1\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [unset\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from neutral to [2\] at (0.6) should be [1.8\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [initial\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [initial\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [1\] to [2\] at (-5) should be [0\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [1\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from neutral to [2\] at (-0.3) should be [1.35\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [inherit\] to [2\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [unset\] to [2\] at (0.6) should be [1.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [inherit\] to [2\] at (0.3) should be [2.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [initial\] to [2\] at (1.5) should be [2.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [0\] to [1\] at (0.3) should be [0.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from neutral to [2\] at (0.6) should be [1.8\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [inherit\] to [2\] at (0.3) should be [2.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [0\] to [1\] at (0.6) should be [0.6\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [unset\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [0\] to [1\] at (1.5) should be [1.5\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <flex-shrink> from [initial\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [1\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [inherit\] to [2\] at (-0.3) should be [3.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [initial\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from neutral to [2\] at (1.5) should be [2.25\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <flex-shrink> from [initial\] to [2\] at (0.3) should be [1.3\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <flex-shrink> from [unset\] to [2\] at (-0.3) should be [0.7\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-multicol/__dir__.ini
@@ -0,0 +1,1 @@
+leak-threshold: [default:51200]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-position/animation/__dir__.ini
@@ -0,0 +1,1 @@
+leak-threshold: [default:51200]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-position/animation/position-interpolation.html.ini
@@ -0,0 +1,31 @@
+[position-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [CSS Animations: property <position> from [absolute\] to [static\] at (0.5) should be [static\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <position> from [absolute\] to [static\] at (0.5) should be [static\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Animations: property <position> from neutral to [absolute\] at (0.5) should be [absolute\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <position> from neutral to [absolute\] at (0.75) should be [absolute\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <position> from neutral to [absolute\] at (2) should be [absolute\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <position> from [absolute\] to [static\] at (0.6) should be [static\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <position> from [absolute\] to [static\] at (1.5) should be [static\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-ui/animation/__dir__.ini
@@ -0,0 +1,1 @@
+leak-threshold: [default:51200]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-ui/animation/caret-color-interpolation.html.ini
@@ -0,0 +1,222 @@
+[caret-color-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [caret-color interpolation]
+    expected: FAIL
+
+  [CSS Transitions: property <caret-color> from [black\] to [orange\] at (1.5) should be [rgb(255, 248, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from neutral to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from neutral to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <caret-color> from [auto\] to [green\] at (0.5) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [inherit\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [currentColor\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <caret-color> from [initial\] to [green\] at (0.5) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Animations: property <caret-color> from [inherit\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [initial\] to [green\] at (0.6) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [currentColor\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [currentColor\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from neutral to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [black\] to [orange\] at (0.6) should be [rgb(153, 99, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [inherit\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [currentColor\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <caret-color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (os == "win") and (processor == "x86_64"): FAIL
+
+  [CSS Animations: property <caret-color> from [inherit\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from neutral to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [black\] to [orange\] at (0.3) should be [rgb(77, 50, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from neutral to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [inherit\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [currentColor\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from neutral to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [black\] to [orange\] at (1.5) should be [rgb(255, 248, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [initial\] to [green\] at (0.5) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [currentColor\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [auto\] to [green\] at (1.5) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [currentColor\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [black\] to [orange\] at (1.5) should be [rgb(255, 248, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [initial\] to [green\] at (1.5) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from neutral to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [auto\] to [green\] at (0.6) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [black\] to [orange\] at (0.6) should be [rgb(153, 99, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [currentColor\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [auto\] to [green\] at (0.5) should be [rgb(0, 128, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from neutral to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <caret-color> from [inherit\] to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <caret-color> from [currentColor\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from [black\] to [orange\] at (0.6) should be [rgb(153, 99, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <caret-color> from neutral to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-ui/animation/outline-color-interpolation.html.ini
@@ -0,0 +1,186 @@
+[outline-color-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [outline-color interpolation]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [white\] to [orange\] at (1.5) should be [rgb(255, 120, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [initial\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from neutral to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [inherit\] to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from neutral to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [inherit\] to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from neutral to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from neutral to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [inherit\] to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [inherit\] to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from neutral to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [white\] to [orange\] at (0.6) should be [rgb(255, 201, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [inherit\] to [green\] at (0.3) should be [rgb(179, 217, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [initial\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [initial\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [initial\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from neutral to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [white\] to [orange\] at (0.3) should be [rgb(255, 228, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [white\] to [orange\] at (1.5) should be [rgb(255, 120, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [unset\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [initial\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [unset\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [initial\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [unset\] to [green\] at (0.6) should be [rgb(0, 77, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [initial\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [white\] to [orange\] at (0.3) should be [rgb(255, 228, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from neutral to [green\] at (0.3) should be [rgb(0, 38, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [initial\] to [green\] at (0.3) should be [rgb(0, 38, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from [white\] to [orange\] at (0.6) should be [rgb(255, 201, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-color> from neutral to [green\] at (0.6) should be [rgb(0, 77, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [initial\] to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from neutral to [green\] at (1.5) should be [rgb(0, 192, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [white\] to [orange\] at (1.5) should be [rgb(255, 120, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [white\] to [orange\] at (0.3) should be [rgb(255, 228, 179)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [inherit\] to [green\] at (0.6) should be [rgb(102, 179, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-color> from [inherit\] to [green\] at (1.5) should be [rgb(0, 65, 0)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-color> from [white\] to [orange\] at (0.6) should be [rgb(255, 201, 102)\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-ui/animation/outline-offset-interpolation.html.ini
@@ -0,0 +1,246 @@
+[outline-offset-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [outline-offset interpolation]
+    expected: FAIL
+
+  [CSS Animations: property <outline-offset> from [initial\] to [20px\] at (1.5) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from neutral to [20px\] at (1.5) should be [25px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [-5px\] to [5px\] at (0.3) should be [-2px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from neutral to [20px\] at (0.3) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from neutral to [20px\] at (0.6) should be [16px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [initial\] to [20px\] at (0.6) should be [12px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [inherit\] to [20px\] at (-0.3) should be [33px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [initial\] to [20px\] at (-0.3) should be [-6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from neutral to [20px\] at (-0.3) should be [7px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [initial\] to [20px\] at (1.5) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from neutral to [20px\] at (1.5) should be [25px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [-5px\] to [5px\] at (1.5) should be [10px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [initial\] to [20px\] at (0.6) should be [12px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [-5px\] to [5px\] at (-0.3) should be [-8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [-5px\] to [5px\] at (0.6) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [inherit\] to [20px\] at (0.3) should be [27px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [inherit\] to [20px\] at (0.3) should be [27px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [initial\] to [20px\] at (1.5) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [unset\] to [20px\] at (1.5) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [unset\] to [20px\] at (0.3) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [-5px\] to [5px\] at (0.3) should be [-2px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [initial\] to [20px\] at (-0.3) should be [-6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [unset\] to [20px\] at (1.5) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [-5px\] to [5px\] at (1.5) should be [10px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from neutral to [20px\] at (-0.3) should be [7px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [initial\] to [20px\] at (0.3) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [-5px\] to [5px\] at (0.6) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [unset\] to [20px\] at (1.5) should be [30px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [inherit\] to [20px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [-5px\] to [5px\] at (1.5) should be [10px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [initial\] to [20px\] at (0.3) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [unset\] to [20px\] at (0.6) should be [12px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [unset\] to [20px\] at (-0.3) should be [-6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [unset\] to [20px\] at (-0.3) should be [-6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [inherit\] to [20px\] at (0.3) should be [27px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [initial\] to [20px\] at (0.6) should be [12px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [inherit\] to [20px\] at (-0.3) should be [33px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [unset\] to [20px\] at (0.6) should be [12px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from neutral to [20px\] at (0.3) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [initial\] to [20px\] at (0.3) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [inherit\] to [20px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [inherit\] to [20px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [inherit\] to [20px\] at (0.6) should be [24px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from neutral to [20px\] at (1.5) should be [25px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [-5px\] to [5px\] at (0.6) should be [1px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [inherit\] to [20px\] at (-0.3) should be [33px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from neutral to [20px\] at (0.3) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [unset\] to [20px\] at (0.3) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from neutral to [20px\] at (0.6) should be [16px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from neutral to [20px\] at (-0.3) should be [7px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [inherit\] to [20px\] at (0.6) should be [24px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [unset\] to [20px\] at (-0.3) should be [-6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [unset\] to [20px\] at (0.6) should be [12px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [inherit\] to [20px\] at (0.6) should be [24px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from [-5px\] to [5px\] at (-0.3) should be [-8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [initial\] to [20px\] at (-0.3) should be [-6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [-5px\] to [5px\] at (-0.3) should be [-8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-offset> from [-5px\] to [5px\] at (0.3) should be [-2px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-offset> from neutral to [20px\] at (0.6) should be [16px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-offset> from [unset\] to [20px\] at (0.3) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-ui/animation/outline-width-interpolation.html.ini
@@ -0,0 +1,310 @@
+[outline-width-interpolation.html]
+  expected:
+    if (processor == "x86") and debug: CRASH
+  [outline-width interpolation]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [inherit\] to [20px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [inherit\] to [20px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from neutral to [20px\] at (0.3) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [inherit\] to [20px\] at (0.6) should be [24px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
+    expected: FAIL
+
+  [CSS Animations: property <outline-width> from [inherit\] to [20px\] at (-0.3) should be [33px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [thick\] to [15px\] at (-2) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [0px\] to [10px\] at (0.6) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (0.6) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <outline-width> from [initial\] to [20px\] at (1.5) should be [28px\]]
+    expected: FAIL
+
+  [CSS Animations: property <outline-width> from [unset\] to [20px\] at (0) should be [3px\]]
+    expected: FAIL
+
+  [Web Animations: property <outline-width> from [unset\] to [20px\] at (0.3) should be [8px\]]
+    expected: FAIL
+
+  [CSS Transitions: property <outline-width> from neutral to [20px\] at (0.6) should be [16px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [thick\] to [15px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <outline-width> from [unset\] to [20px\] at (0.6) should be [13px\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from neutral to [20px\] at (0.3) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [unset\] to [20px\] at (0.6) should be [13px\]]
+    expected: FAIL
+
+  [CSS Animations: property <outline-width> from [initial\] to [20px\] at (0.3) should be [8px\]]
+    expected: FAIL
+
+  [CSS Animations: property <outline-width> from [thick\] to [15px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [initial\] to [20px\] at (1.5) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [inherit\] to [20px\] at (-0.3) should be [33px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [inherit\] to [20px\] at (0.6) should be [24px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [inherit\] to [20px\] at (0.3) should be [27px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from neutral to [20px\] at (0.6) should be [16px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [thick\] to [15px\] at (0.6) should be [11px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [unset\] to [20px\] at (0.3) should be [8px\]]
+    expected: FAIL
+
+  [Web Animations: property <outline-width> from [unset\] to [20px\] at (0) should be [3px\]]
+    expected: FAIL
+
+  [Web Animations: property <outline-width> from [initial\] to [20px\] at (0.3) should be [8px\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (-0.3) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
+    expected: FAIL
+
+  [CSS Animations: property <outline-width> from [thick\] to [15px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [0px\] to [10px\] at (0.6) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [unset\] to [20px\] at (-0.3) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [thick\] to [15px\] at (-0.3) should be [2px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [inherit\] to [20px\] at (-0.3) should be [33px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from neutral to [20px\] at (1.5) should be [25px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [thick\] to [15px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [initial\] to [20px\] at (-0.3) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [initial\] to [20px\] at (1.5) should be [28px\]]
+    expected: FAIL
+
+  [CSS Transitions: property <outline-width> from [inherit\] to [20px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from neutral to [20px\] at (-0.3) should be [7px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [thick\] to [15px\] at (-0.3) should be [2px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [inherit\] to [20px\] at (0.6) should be [24px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [thick\] to [15px\] at (0.6) should be [11px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [initial\] to [20px\] at (1.5) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [thick\] to [15px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from neutral to [20px\] at (-0.3) should be [7px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [0px\] to [10px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [thick\] to [15px\] at (-2) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [thick\] to [15px\] at (1.5) should be [20px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from neutral to [20px\] at (1.5) should be [25px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [thick\] to [15px\] at (-2) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [0px\] to [10px\] at (0.3) should be [3px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [inherit\] to [20px\] at (0.3) should be [27px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [0px\] to [10px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [0px\] to [10px\] at (0.6) should be [6px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
+    expected: FAIL
+
+  [CSS Transitions: property <outline-width> from [0px\] to [10px\] at (0.3) should be [3px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
+    expected: FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [0px\] to [10px\] at (1.5) should be [15px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [Web Animations: property <outline-width> from [initial\] to [20px\] at (0) should be [3px\]]
+    expected: FAIL
+
+  [CSS Animations: property <outline-width> from neutral to [20px\] at (0.6) should be [16px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [thick\] to [15px\] at (-0.3) should be [2px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [thick\] to [15px\] at (0.6) should be [11px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [0px\] to [10px\] at (0.3) should be [3px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [unset\] to [20px\] at (0.6) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from neutral to [20px\] at (1.5) should be [25px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [initial\] to [20px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [initial\] to [20px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from neutral to [20px\] at (0.3) should be [13px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [initial\] to [20px\] at (-0.3) should be [0px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions with transition: all: property <outline-width> from [inherit\] to [20px\] at (0.3) should be [27px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Animations: property <outline-width> from [initial\] to [20px\] at (0) should be [3px\]]
+    expected: FAIL
+
+  [CSS Transitions: property <outline-width> from [unset\] to [20px\] at (0.3) should be [8px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from neutral to [20px\] at (-0.3) should be [7px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
+  [CSS Transitions: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
+    expected:
+      if (processor == "x86") and (os == "win"): FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/dom/idlharness.window.js.ini
@@ -0,0 +1,15 @@
+[idlharness.window.html?include=Node]
+
+[idlharness.window.html?exclude=Node]
+  [Document interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [Document interface: attribute origin]
+    expected: FAIL
+
+  [Document interface: xmlDoc must inherit property "origin" with the proper type]
+    expected: FAIL
+
+  [Document interface: new Document() must inherit property "origin" with the proper type]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/dom/interfaces.html.ini
+++ /dev/null
@@ -1,186 +0,0 @@
-[interfaces.html]
-  [Document interface: attribute origin]
-    expected: FAIL
-    bug: 931884
-
-  [Document interface: xmlDoc must inherit property "origin" with the proper type (3)]
-    expected: FAIL
-    bug: 931884
-
-  [NodeFilter interface: existence and properties of interface object]
-    bug: https://github.com/heycam/webidl/issues/96
-
-  [Document interface: new Document() must inherit property "origin" with the proper type (3)]
-    expected: FAIL
-    bug: 931884
-
-  [Element interface: element must inherit property "assignedSlot" with the proper type (48)]
-    expected: FAIL
-
-  [Text interface: document.createTextNode("abc") must inherit property "assignedSlot" with the proper type (2)]
-    expected: FAIL
-
-  [AbortSignal interface: new AbortController().signal must inherit property "onabort" with the proper type (1)]
-    expected: FAIL
-
-  [Document interface: new Document() must inherit property "origin" with the proper type]
-    expected: FAIL
-
-  [Document interface: xmlDoc must inherit property "origin" with the proper type]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface object]
-    expected: FAIL
-
-  [AbstractRange interface object length]
-    expected: FAIL
-
-  [AbstractRange interface object name]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [AbstractRange interface: attribute startContainer]
-    expected: FAIL
-
-  [AbstractRange interface: attribute startOffset]
-    expected: FAIL
-
-  [AbstractRange interface: attribute endContainer]
-    expected: FAIL
-
-  [AbstractRange interface: attribute endOffset]
-    expected: FAIL
-
-  [AbstractRange interface: attribute collapsed]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface object]
-    expected: FAIL
-
-  [StaticRange interface object length]
-    expected: FAIL
-
-  [StaticRange interface object name]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [Range interface: existence and properties of interface object]
-    expected: FAIL
-
-  [Range interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-
-[interfaces.html?1-1000]
-  [Test driver]
-    expected: FAIL
-
-
-[interfaces.html?1001-last]
-  [Test driver]
-    expected: FAIL
-
-
-[interfaces.html?exclude=Node]
-  [Test driver]
-    expected: FAIL
-
-  [Document interface: attribute origin]
-    expected: FAIL
-
-  [Document interface: new Document() must inherit property "origin" with the proper type]
-    expected: FAIL
-
-  [Document interface: xmlDoc must inherit property "origin" with the proper type]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface object]
-    expected: FAIL
-
-  [AbstractRange interface object length]
-    expected: FAIL
-
-  [AbstractRange interface object name]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
-  [AbstractRange interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [AbstractRange interface: attribute startContainer]
-    expected: FAIL
-
-  [AbstractRange interface: attribute startOffset]
-    expected: FAIL
-
-  [AbstractRange interface: attribute endContainer]
-    expected: FAIL
-
-  [AbstractRange interface: attribute endOffset]
-    expected: FAIL
-
-  [AbstractRange interface: attribute collapsed]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface object]
-    expected: FAIL
-
-  [StaticRange interface object length]
-    expected: FAIL
-
-  [StaticRange interface object name]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
-  [StaticRange interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [Range interface: existence and properties of interface object]
-    expected: FAIL
-
-  [Range interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-
-[interfaces.html?include=Node]
-
-[interfaces.html?exclude=Node]
-  prefs: [dom.window.event.enabled:true]
-  [Document interface: attribute origin]
-    expected: FAIL
-
-  [Document interface: new Document() must inherit property "origin" with the proper type]
-    expected: FAIL
-
-  [Document interface: xmlDoc must inherit property "origin" with the proper type]
-    expected: FAIL
-
-  [Document interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/event-timing/bufferbeforeonload.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[bufferbeforeonload.html]
-  [Event Timing: click, onload.]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/event-timing/click-timing.html.ini
@@ -0,0 +1,4 @@
+[click-timing.html]
+  [Event Timing: compare click timings.]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/event-timing/observethenonload.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[observethenonload.html]
-  [Event Timing: click, observer, onload, click.]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/event-timing/onloadthenobserve-firstInput.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[onloadthenobserve-firstInput.html]
-  [Event Timing: check firstInput after onload, observer, click, click.]
-    expected: TIMEOUT
-
-  [Event Timing: check first-input after onload, observer, click, click.]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/event-timing/onloadthenobserve.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[onloadthenobserve.html]
-  [Event Timing: onload, click, observer, click.]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/fetch/api/basic/scheme-data.any.js.ini
@@ -0,0 +1,9 @@
+[scheme-data.any.html]
+  [Fetching [HEAD\] data:,response%27s%20body is OK]
+    expected: FAIL
+
+
+[scheme-data.any.worker.html]
+  [Fetching [HEAD\] data:,response%27s%20body is OK]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html.ini
@@ -0,0 +1,5 @@
+[window-failure.https.html]
+  expected: TIMEOUT
+  [SharedArrayBuffer and a cross-site <iframe>]
+    expected: TIMEOUT
+
--- a/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -1,43 +1,43 @@
 [viewport-change.html]
   expected:
-    if (os == "android") and not debug: ["OK", "TIMEOUT"]
+    if (os == "android") and not debug: [OK, TIMEOUT]
   [picture: source (max-width:500px) broken image, img valid image, resize to narrow]
     expected:
-      if (os == "linux") and webrender and not debug: ["PASS", "FAIL"]
-      if (os == "android") and not debug: ["FAIL", "PASS"]
+      if (os == "linux") and webrender and not debug: [PASS, FAIL]
+      if (os == "android") and not debug: [FAIL, PASS]
       FAIL
 
   [picture: source (max-width:500px) broken image, img broken image, resize to narrow]
     expected:
-      if (os == "linux") and webrender and not debug: ["PASS", "FAIL"]
-      if (os == "android") and not debug: ["FAIL", "PASS"]
+      if (os == "linux") and webrender and not debug: [PASS, FAIL]
+      if (os == "android") and not debug: [FAIL, PASS]
       FAIL
 
   [picture: source (max-width:500px) broken image, img broken image, resize to wide]
     expected:
-      if (os == "linux") and webrender and not debug: ["PASS", "FAIL"]
-      if (os == "android") and not debug: ["FAIL", "PASS"]
+      if (os == "linux") and webrender and not debug: [PASS, FAIL]
+      if (os == "android") and not debug: [FAIL, PASS]
       FAIL
 
   [picture: source (max-width:500px) valid image, img broken image, resize to wide]
     expected:
-      if (os == "linux") and webrender and not debug: ["PASS", "FAIL"]
-      if (os == "android") and not debug: ["FAIL", "PASS"]
+      if (os == "linux") and webrender and not debug: [PASS, FAIL]
+      if (os == "android") and not debug: [FAIL, PASS]
       FAIL
 
   [picture: source (max-width:500px) broken image, img valid image, resize to wide]
     expected:
-      if (os == "android") and not debug: ["PASS", "TIMEOUT"]
+      if (os == "android") and not debug: [PASS, TIMEOUT]
 
   [picture: source (max-width:500px) valid image, img broken image, resize to narrow]
     expected:
-      if (os == "android") and not debug: ["PASS", "TIMEOUT"]
+      if (os == "android") and not debug: [PASS, TIMEOUT]
 
   [picture: source (max-width:500px) valid image, img valid image, resize to wide]
     expected:
-      if (os == "android") and not debug: ["PASS", "TIMEOUT"]
+      if (os == "android") and not debug: [PASS, TIMEOUT]
 
   [picture: source (max-width:500px) valid image, img valid image, resize to narrow]
     expected:
-      if (os == "android") and not debug: ["PASS", "TIMEOUT"]
+      if (os == "android") and not debug: [PASS, TIMEOUT]
 
--- a/testing/web-platform/meta/mathml/relations/css-styling/not-participating-to-parent-layout.html.ini
+++ b/testing/web-platform/meta/mathml/relations/css-styling/not-participating-to-parent-layout.html.ini
@@ -114,8 +114,26 @@
     expected: FAIL
 
   [mover layout is not affected by children with "position: absolute" style]
     expected: FAIL
 
   [msup layout is not affected by children with "position: fixed" style]
     expected: FAIL
 
+  [mn layout is not affected by children with "display: contents" style]
+    expected: FAIL
+
+  [mi layout is not affected by children with "display: contents" style]
+    expected: FAIL
+
+  [mtable layout is not affected by children with "display: contents" style]
+    expected: FAIL
+
+  [mtext layout is not affected by children with "display: contents" style]
+    expected: FAIL
+
+  [ms layout is not affected by children with "display: contents" style]
+    expected: FAIL
+
+  [mo layout is not affected by children with "display: contents" style]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/mathml/relations/css-styling/width-height-001.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[width-height-001.html]
-  [inline-size and block-size properties on merror]
-    expected: FAIL
-
-  [width and height properties on merror]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/media-source/idlharness.any.js.ini
+++ /dev/null
@@ -1,42 +0,0 @@
-[idlharness.any.html]
-  [MediaSource interface: attribute onsourceclose]
-    expected: FAIL
-
-  [MediaSource interface: mediaSource must inherit property "onsourceclose" with the proper type]
-    expected: FAIL
-
-  [SourceBuffer interface: attribute audioTracks]
-    expected: FAIL
-
-  [SourceBuffer interface: attribute videoTracks]
-    expected: FAIL
-
-  [SourceBuffer interface: attribute textTracks]
-    expected: FAIL
-
-  [SourceBuffer interface: sourceBuffer must inherit property "audioTracks" with the proper type]
-    expected: FAIL
-
-  [SourceBuffer interface: sourceBuffer must inherit property "videoTracks" with the proper type]
-    expected: FAIL
-
-  [SourceBuffer interface: sourceBuffer must inherit property "textTracks" with the proper type]
-    expected: FAIL
-
-  [AudioTrack interface: attribute sourceBuffer]
-    expected: FAIL
-
-  [VideoTrack interface: attribute sourceBuffer]
-    expected: FAIL
-
-  [TextTrack interface: attribute sourceBuffer]
-    expected: FAIL
-
-
-[idlharness.any.worker.html]
-  [Untitled]
-    expected: FAIL
-
-  [idlharness]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/media-source/idlharness.window.js.ini
@@ -0,0 +1,34 @@
+[idlharness.window.html]
+  [SourceBuffer interface: sourceBuffer must inherit property "textTracks" with the proper type]
+    expected: FAIL
+
+  [MediaSource interface: attribute onsourceclose]
+    expected: FAIL
+
+  [SourceBuffer interface: attribute videoTracks]
+    expected: FAIL
+
+  [SourceBuffer interface: attribute textTracks]
+    expected: FAIL
+
+  [SourceBuffer interface: attribute audioTracks]
+    expected: FAIL
+
+  [SourceBuffer interface: sourceBuffer must inherit property "audioTracks" with the proper type]
+    expected: FAIL
+
+  [SourceBuffer interface: sourceBuffer must inherit property "videoTracks" with the proper type]
+    expected: FAIL
+
+  [VideoTrack interface: attribute sourceBuffer]
+    expected: FAIL
+
+  [TextTrack interface: attribute sourceBuffer]
+    expected: FAIL
+
+  [MediaSource interface: mediaSource must inherit property "onsourceclose" with the proper type]
+    expected: FAIL
+
+  [AudioTrack interface: attribute sourceBuffer]
+    expected: FAIL
+
--- a/testing/web-platform/meta/mediacapture-streams/idlharness.https.window.js.ini
+++ b/testing/web-platform/meta/mediacapture-streams/idlharness.https.window.js.ini
@@ -87,8 +87,17 @@
     expected: FAIL
 
   [MediaStreamTrack interface: track must inherit property "getCapabilities()" with the proper type]
     expected: FAIL
 
   [Stringification of videoinput]
     expected: FAIL
 
+  [InputDeviceInfo interface: audioinput must inherit property "getCapabilities()" with the proper type]
+    expected: FAIL
+
+  [InputDeviceInfo must be primary interface of audioinput]
+    expected: FAIL
+
+  [Stringification of audioinput]
+    expected: FAIL
+
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,2 +1,2 @@
-local: bfeba22c07241736810ff96749c8cd78edbbb1cd
-upstream: 23f463a0cc666d24bcb6b50ce2ab8b5deec77881
+local: 09ad12468545debb03b55146f7d04fed4108176e
+upstream: dbb4e0ccfd0a97f80becd851371fb5a205aef7ec
--- a/testing/web-platform/meta/resize-observer/eventloop.html.ini
+++ b/testing/web-platform/meta/resize-observer/eventloop.html.ini
@@ -1,11 +1,11 @@
 [eventloop.html]
   expected:
-    if webrender and (os == "linux") and not debug: ["OK", "TIMEOUT"]
+    if webrender and (os == "linux") and not debug: [OK, TIMEOUT]
   [test0: multiple notifications inside same event loop]
     expected:
-      if webrender and (os == "linux") and not debug: ["PASS", "FAIL"]
+      if webrender and (os == "linux") and not debug: [PASS, FAIL]
 
   [guard]
     expected:
-      if webrender and (os == "linux") and not debug: ["PASS", "NOTRUN"]
+      if webrender and (os == "linux") and not debug: [PASS, NOTRUN]
 
--- a/testing/web-platform/meta/service-workers/service-worker/client-navigate.https.html.ini
+++ b/testing/web-platform/meta/service-workers/service-worker/client-navigate.https.html.ini
@@ -9,18 +9,18 @@
       if (os == "mac") and debug: ["PASS", "NOTRUN"]
 
   [Frame location should not update on failed about:blank navigation]
     expected:
       if (os == "mac") and debug: ["PASS", "TIMEOUT", "NOTRUN"]
 
   [Frame location should update on successful navigation]
     expected:
-      if (os == "mac") and debug: ["PASS", "TIMEOUT"]
+      if (os == "mac") and debug: [PASS, TIMEOUT]
 
   [Frame location should not be accessible after cross-origin navigation]
     expected:
-      if (os == "mac") and debug: ["PASS", "NOTRUN"]
+      if (os == "mac") and debug: [PASS, NOTRUN]
 
   [Frame location should not be accessible after redirect]
     expected:
-      if (os == "mac") and debug: ["PASS", "NOTRUN"]
+      if (os == "mac") and debug: [PASS, NOTRUN]
 
--- a/testing/web-platform/meta/svg/animations/scripted/onhover-syncbases.html.ini
+++ b/testing/web-platform/meta/svg/animations/scripted/onhover-syncbases.html.ini
@@ -1,13 +1,12 @@
 [onhover-syncbases.html]
   expected:
-    if webrender and (os == "linux") and not debug: ["ERROR", "OK"]
-    if webrender and (os == "linux") and debug: ["OK", "ERROR"]
-    if webrender and (os == "win") and not debug: ["OK", "ERROR"]
+    if webrender and (os == "linux") and not debug: [ERROR, OK]
+    if webrender and (os == "linux") and debug: [OK, ERROR]
+    if webrender and (os == "win") and not debug: [OK, ERROR]
   [Check if onhover events reset correctly when triggred multiple times]
     expected:
-      if (os == "linux") and webrender and not debug: ["TIMEOUT", "FAIL"]
-      if (os == "linux") and webrender and debug: ["PASS", "FAIL", "TIMEOUT"]
-      if (os == "win") and webrender and debug: ["PASS", "TIMEOUT"]
-      if (os == "win") and webrender and not debug: ["PASS", "FAIL", "TIMEOUT"]
-      if (os == "win") and not webrender: ["PASS", "TIMEOUT"]
+      if (os == "linux") and webrender and not debug: [TIMEOUT, FAIL]
+      if (os == "linux") and webrender and debug: [PASS, FAIL, TIMEOUT]
+      if (os == "win") and webrender and debug: [PASS, TIMEOUT]
+      if (os == "win") and webrender and not debug: [PASS, FAIL, TIMEOUT]
 
--- a/testing/web-platform/meta/trusted-types/GlobalEventHandlers-onclick.tentative.html.ini
+++ b/testing/web-platform/meta/trusted-types/GlobalEventHandlers-onclick.tentative.html.ini
@@ -1,4 +1,7 @@
 [GlobalEventHandlers-onclick.tentative.html]
   [a.onclick assigned via policy (successful Script transformation).]
     expected: FAIL
 
+  [GlobalEventHandlers-onclick]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/trusted-types/TrustedTypePolicyFactory-getPropertyType.tentative.html.ini
@@ -0,0 +1,325 @@
+[TrustedTypePolicyFactory-getPropertyType.tentative.html]
+  [SCRIPT.textcontent is maybe defined]
+    expected: FAIL
+
+  [sanity check TrustedTypes.getTypeMapping]
+    expected: FAIL
+
+  [SCRIPT[INNERHTML\] is defined]
+    expected: FAIL
+
+  [script[outerhtml\] is defined]
+    expected: FAIL
+
+  [script.textcontent is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.textContent is maybe defined]
+    expected: FAIL
+
+  [sCrIpT.innerText is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[outerHTML\] is defined]
+    expected: FAIL
+
+  [script[innerhtml\] is defined]
+    expected: FAIL
+
+  [SCRIPT[innerText\] is defined]
+    expected: FAIL
+
+  [sanity check TrustedTypes.getAttributeType.]
+    expected: FAIL
+
+  [script.innerHTML is maybe defined]
+    expected: FAIL
+
+  [script.innerText is maybe defined]
+    expected: FAIL
+
+  [script[TEXTCONTENT\] is defined]
+    expected: FAIL
+
+  [SCRIPT[textContent\] is defined]
+    expected: FAIL
+
+  [SCRIPT[OUTERHTML\] is defined]
+    expected: FAIL
+
+  [script.TEXTCONTENT is maybe defined]
+    expected: FAIL
+
+  [SCRIPT[textcontent\] is defined]
+    expected: FAIL
+
+  [sCrIpT.outerhtml is maybe defined]
+    expected: FAIL
+
+  [script.text is maybe defined]
+    expected: FAIL
+
+  [script.innerhtml is maybe defined]
+    expected: FAIL
+
+  [sCrIpT.innertext is maybe defined]
+    expected: FAIL
+
+  [script[INNERHTML\] is defined]
+    expected: FAIL
+
+  [sCrIpT.INNERTEXT is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[textContent\] is defined]
+    expected: FAIL
+
+  [script[innerText\] is defined]
+    expected: FAIL
+
+  [script[OUTERHTML\] is defined]
+    expected: FAIL
+
+  [sCrIpT.text is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.INNERHTML is maybe defined]
+    expected: FAIL
+
+  [getAttributeType tests adapted from WICG/trusted-types polyfill]
+    expected: FAIL
+
+  [SCRIPT.INNERTEXT is maybe defined]
+    expected: FAIL
+
+  [sCrIpT.OUTERHTML is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[textcontent\] is defined]
+    expected: FAIL
+
+  [sCrIpT[innerHTML\] is defined]
+    expected: FAIL
+
+  [sCrIpT.outerHTML is maybe defined]
+    expected: FAIL
+
+  [script.textContent is maybe defined]
+    expected: FAIL
+
+  [sCrIpT.innerHTML is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.outerHTML is maybe defined]
+    expected: FAIL
+
+  [script[text\] is defined]
+    expected: FAIL
+
+  [script.OUTERHTML is maybe defined]
+    expected: FAIL
+
+  [script.TEXT is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[INNERTEXT\] is defined]
+    expected: FAIL
+
+  [SCRIPT[TEXT\] is defined]
+    expected: FAIL
+
+  [getTypeMapping tests adapted from WICG/trusted-types polyfill]
+    expected: FAIL
+
+  [SCRIPT[outerHTML\] is defined]
+    expected: FAIL
+
+  [SCRIPT.innerhtml is maybe defined]
+    expected: FAIL
+
+  [script[TEXT\] is defined]
+    expected: FAIL
+
+  [script[INNERTEXT\] is defined]
+    expected: FAIL
+
+  [sCrIpT.TEXT is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.innerHTML is maybe defined]
+    expected: FAIL
+
+  [SCRIPT[INNERTEXT\] is defined]
+    expected: FAIL
+
+  [sCrIpT.TEXTCONTENT is maybe defined]
+    expected: FAIL
+
+  [sanity check TrustedTypes.getPropertyType for the HTML a element.]
+    expected: FAIL
+
+  [script.outerhtml is maybe defined]
+    expected: FAIL
+
+  [script[innertext\] is defined]
+    expected: FAIL
+
+  [sCrIpT[OUTERHTML\] is defined]
+    expected: FAIL
+
+  [SCRIPT[text\] is defined]
+    expected: FAIL
+
+  [SCRIPT[innerhtml\] is defined]
+    expected: FAIL
+
+  [SCRIPT.TEXTCONTENT is maybe defined]
+    expected: FAIL
+
+  [SCRIPT[innertext\] is defined]
+    expected: FAIL
+
+  [script[textContent\] is defined]
+    expected: FAIL
+
+  [SCRIPT[outerhtml\] is defined]
+    expected: FAIL
+
+  [sCrIpT[TEXTCONTENT\] is defined]
+    expected: FAIL
+
+  [SCRIPT.text is maybe defined]
+    expected: FAIL
+
+  [sCrIpT.textContent is maybe defined]
+    expected: FAIL
+
+  [sCrIpT.INNERHTML is maybe defined]
+    expected: FAIL
+
+  [script.innertext is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[TEXT\] is defined]
+    expected: FAIL
+
+  [script[textcontent\] is defined]
+    expected: FAIL
+
+  [sCrIpT[innerhtml\] is defined]
+    expected: FAIL
+
+  [sCrIpT.textcontent is maybe defined]
+    expected: FAIL
+
+  [script.INNERHTML is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.OUTERHTML is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[innertext\] is defined]
+    expected: FAIL
+
+  [getPropertyType tests adapted from WICG/trusted-types polyfill]
+    expected: FAIL
+
+  [sCrIpT[outerhtml\] is defined]
+    expected: FAIL
+
+  [sCrIpT[INNERHTML\] is defined]
+    expected: FAIL
+
+  [SCRIPT.innerText is maybe defined]
+    expected: FAIL
+
+  [script.INNERTEXT is maybe defined]
+    expected: FAIL
+
+  [sCrIpT[text\] is defined]
+    expected: FAIL
+
+  [script.outerHTML is maybe defined]
+    expected: FAIL
+
+  [SCRIPT[TEXTCONTENT\] is defined]
+    expected: FAIL
+
+  [script[outerHTML\] is defined]
+    expected: FAIL
+
+  [SCRIPT.TEXT is maybe defined]
+    expected: FAIL
+
+  [script[innerHTML\] is defined]
+    expected: FAIL
+
+  [sCrIpT.innerhtml is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.outerhtml is maybe defined]
+    expected: FAIL
+
+  [SCRIPT.innertext is maybe defined]
+    expected: FAIL
+
+  [SCRIPT[innerHTML\] is defined]
+    expected: FAIL
+
+  [sCrIpT[innerText\] is defined]
+    expected: FAIL
+
+  [object.CODEBASE is maybe defined]
+    expected: FAIL
+
+  [OBJECT.codebase is maybe defined]
+    expected: FAIL
+
+  [OBJECT[codeBase\] is defined]
+    expected: FAIL
+
+  [oBjEcT[codebase\] is defined]
+    expected: FAIL
+
+  [oBjEcT.codebase is maybe defined]
+    expected: FAIL
+
+  [OBJECT[codebase\] is defined]
+    expected: FAIL
+
+  [object[CODEBASE\] is defined]
+    expected: FAIL
+
+  [oBjEcT.CODEBASE is maybe defined]
+    expected: FAIL
+
+  [oBjEcT.codeBase is maybe defined]
+    expected: FAIL
+
+  [object[codebase\] is defined]
+    expected: FAIL
+
+  [OBJECT.codeBase is maybe defined]
+    expected: FAIL
+
+  [OBJECT.CODEBASE is maybe defined]
+    expected: FAIL
+
+  [oBjEcT[CODEBASE\] is defined]
+    expected: FAIL
+
+  [object.codebase is maybe defined]
+    expected: FAIL
+
+  [object[codeBase\] is defined]
+    expected: FAIL
+
+  [object.codeBase is maybe defined]
+    expected: FAIL
+
+  [oBjEcT[codeBase\] is defined]
+    expected: FAIL
+
+  [OBJECT[CODEBASE\] is defined]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/trusted-types/TrustedTypePolicyFactory-metadata.tentative.html.ini
@@ -0,0 +1,4 @@
+[TrustedTypePolicyFactory-metadata.tentative.html]
+  [TrustedTypePolicyFactory-metadata]
+    expected: FAIL
+
--- a/testing/web-platform/meta/webdriver/tests/new_session/timeouts.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/new_session/timeouts.py.ini
@@ -1,5 +1,5 @@
 [timeouts.py]
   disabled:
     if ccov and (os == "win") and (bits == 64) and (version == "10.0.17134"): https://bugzilla.mozilla.org/show_bug.cgi?id=1495002
   expected:
-    if webrender and (os == "linux") and not debug: ["OK", "TIMEOUT"]
+    if webrender and (os == "linux") and not debug: [OK, TIMEOUT]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/websockets/stream-tentative/backpressure-receive.any.js.ini
@@ -0,0 +1,25 @@
+[backpressure-receive.any.html]
+  [backpressure should be applied to received messages]
+    expected: FAIL
+
+
+[backpressure-receive.any.worker.html]
+  [backpressure-receive]
+    expected: FAIL
+
+  [backpressure should be applied to received messages]
+    expected: FAIL
+
+
+[backpressure-receive.any.serviceworker.html]
+  [backpressure-receive]
+    expected: FAIL
+
+  [backpressure should be applied to received messages]
+    expected: FAIL
+
+
+[backpressure-receive.any.sharedworker.html]
+  [backpressure should be applied to received messages]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/websockets/stream-tentative/backpressure-send.any.js.ini
@@ -0,0 +1,25 @@
+[backpressure-send.any.serviceworker.html]
+  [backpressure-send]
+    expected: FAIL
+
+  [backpressure should be applied to sent messages]
+    expected: FAIL
+
+
+[backpressure-send.any.sharedworker.html]
+  [backpressure should be applied to sent messages]
+    expected: FAIL
+
+
+[backpressure-send.any.worker.html]
+  [backpressure-send]
+    expected: FAIL
+
+  [backpressure should be applied to sent messages]
+    expected: FAIL
+
+
+[backpressure-send.any.html]
+  [backpressure should be applied to sent messages]
+    expected: FAIL
+
--- a/testing/web-platform/tests/.azure-pipelines.yml
+++ b/testing/web-platform/tests/.azure-pipelines.yml
@@ -12,24 +12,16 @@
 #  - The "Build pull requests from forks of this repository" setting must be
 #    enabled: https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github#validate-contributions-from-forks
 #  - Self-hosted agents for Windows 10 are used:
 #    - 'Hosted Windows Client' is the latest Windows 10
 #    - 'Hosted Windows Client Next' is Windows 10 Insider Preview
 #    Documention for the setup of these agents:
 #    https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows
 
-schedules:
-- cron: "15 */6 * * *"
-  displayName: Every six hours
-  branches:
-    include:
-    - epochs/six_hourly
-  always: true
-
 jobs:
 # The affected tests jobs are unconditional for speed, as most PRs have one or
 # more affected tests: https://github.com/web-platform-tests/wpt/issues/13936.
 - job: affected_safari_preview
   displayName: 'affected tests: Safari Technology Preview'
   condition: eq(variables['Build.Reason'], 'PullRequest')
   pool:
     vmImage: 'macOS-10.13'
@@ -235,22 +227,20 @@ jobs:
     displayName: 'Run tests (Edge Dev)'
   - task: PublishBuildArtifacts@1
     displayName: 'Publish results'
     inputs:
       artifactName: 'infrastructure'
     condition: always()
   - template: tools/ci/azure/cleanup_win10.yml
 
-# All `./wpt run` tests are run from epochs/* branches on a schedule. See
-# documentation at the top of this file for required setup.
 - job: results_edge_dev
   displayName: 'all tests: Edge Dev'
   condition: |
-    or(eq(variables['Build.Reason'], 'Schedule'),
+    or(eq(variables['Build.SourceBranch'], 'refs/heads/epochs/six_hourly'),
        and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge_dev']))
   strategy:
     parallel: 10 # chosen to make runtime ~2h
   timeoutInMinutes: 360
   pool:
     name: 'Hosted Windows Client'
   steps:
   - template: tools/ci/azure/system_info.yml
@@ -275,17 +265,17 @@ jobs:
 - template: tools/ci/azure/fyi_hook.yml
   parameters:
     dependsOn: results_edge_dev
     artifactName: edge-dev-results
 
 - job: results_edge_canary
   displayName: 'all tests: Edge Canary'
   condition: |
-    or(eq(variables['Build.Reason'], 'Schedule'),
+    or(eq(variables['Build.SourceBranch'], 'refs/heads/epochs/six_hourly'),
        and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge_canary']))
   strategy:
     parallel: 10 # chosen to make runtime ~2h
   timeoutInMinutes: 360
   pool:
     name: 'Hosted Windows Client'
   steps:
   - template: tools/ci/azure/system_info.yml
@@ -310,20 +300,20 @@ jobs:
 - template: tools/ci/azure/fyi_hook.yml
   parameters:
     dependsOn: results_edge_canary
     artifactName: edge-canary-results
 
 - job: results_safari
   displayName: 'all tests: Safari'
   condition: |
-    or(eq(variables['Build.Reason'], 'Schedule'),
+    or(eq(variables['Build.SourceBranch'], 'refs/heads/epochs/daily'),
        and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_safari']))
   strategy:
-    parallel: 4 # chosen to make runtime ~2h
+    parallel: 5 # chosen to make runtime ~2h
   timeoutInMinutes: 360
   pool:
     vmImage: 'macOS-10.13'
   steps:
   - template: tools/ci/azure/checkout.yml
   - template: tools/ci/azure/pip_install.yml
     parameters:
       packages: virtualenv
@@ -344,20 +334,20 @@ jobs:
 - template: tools/ci/azure/fyi_hook.yml
   parameters:
     dependsOn: results_safari
     artifactName: safari-results
 
 - job: results_safari_preview
   displayName: 'all tests: Safari Technology Preview'
   condition: |
-    or(eq(variables['Build.Reason'], 'Schedule'),
+    or(eq(variables['Build.SourceBranch'], 'refs/heads/epochs/six_hourly'),
        and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_safari_preview']))
   strategy:
-    parallel: 4 # chosen to make runtime ~2h
+    parallel: 5 # chosen to make runtime ~2h
   timeoutInMinutes: 360
   pool:
     vmImage: 'macOS-10.13'
   steps:
   - template: tools/ci/azure/checkout.yml
   - template: tools/ci/azure/pip_install.yml
     parameters:
       packages: virtualenv
--- a/testing/web-platform/tests/audio-output/idlharness.https.window.js
+++ b/testing/web-platform/tests/audio-output/idlharness.https.window.js
@@ -1,24 +1,19 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 // https://w3c.github.io/mediacapture-output/
 
 'use strict';
 
-promise_test(async () => {
-  const srcs = ['audio-output', 'dom', 'html'];
-  const [idl, dom, html] = await Promise.all(
-    srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
-  const idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(html);
-  idl_array.add_dependency_idls(dom);
-  self.audio = document.createElement('audio');
-  self.video = document.createElement('video');
-  idl_array.add_objects({
-    HTMLAudioElement: ['audio'],
-    HTMLVideoElement: ['video']
-  });
-  idl_array.test();
-}, 'Test IDL implementation of audio-output API');
+idl_test(
+  ['audio-output'],
+  ['html', 'dom'],
+  idl_array => {
+    self.audio = document.createElement('audio');
+    self.video = document.createElement('video');
+    idl_array.add_objects({
+      HTMLAudioElement: ['audio'],
+      HTMLVideoElement: ['video']
+    });
+  }
+);
--- a/testing/web-platform/tests/beacon/idlharness.any.js
+++ b/testing/web-platform/tests/beacon/idlharness.any.js
@@ -1,17 +1,14 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 // https://w3c.github.io/beacon/
 
-promise_test(async () => {
-  const idl = await fetch('/interfaces/beacon.idl').then(r => r.text());
-  const html = await fetch('/interfaces/html.idl').then(r => r.text());
-
-  const idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(html);
-  idl_array.add_objects({
-    Navigator: ['navigator'],
-  });
-  idl_array.test();
-}, 'beacon interfaces');
+idl_test(
+  ['beacon'],
+  ['html'],
+  idl_array => {
+    idl_array.add_objects({
+      Navigator: ['navigator'],
+    });
+  }
+);
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-align/animation/column-gap-interpolation.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>column-gap interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-column-gap">
+<meta name="assert" content="column-gap supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  column-gap: 90px;
+}
+.target {
+  column-count: 2;
+  column-gap: 10px;
+}
+.expected div {
+  opacity: 0.7;
+}
+.target > div {
+  height: 20px;
+  background-color: black;
+}
+.target.expected > div {
+  background-color: green;
+}
+</style>
+
+<body>
+<template id='target-template'>
+  <div></div><div></div>
+</template>
+</body>
+
+<script>
+test_interpolation({
+  property: 'column-gap',
+  from: neutralKeyframe,
+  to: '40px',
+}, [
+  {at: -0.3, expect: '1px'},
+  {at: 0, expect: '10px'},
+  {at: 0.3, expect: '19px'},
+  {at: 0.6, expect: '28px'},
+  {at: 1, expect: '40px'},
+  {at: 1.5, expect: '55px'},
+]);
+
+test_no_interpolation({
+  property: 'column-gap',
+  from: 'initial',
+  to: '20px',
+});
+
+test_interpolation({
+  property: 'column-gap',
+  from: 'inherit',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '111px'},
+  {at: 0, expect: '90px'},
+  {at: 0.3, expect: '69px'},
+  {at: 0.6, expect: '48px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '0px'},
+]);
+
+test_no_interpolation({
+  property: 'column-gap',
+  from: 'unset',
+  to: '20px',
+});
+
+test_no_interpolation({
+  property: 'column-gap',
+  from: 'normal',
+  to: '20px',
+});
+
+test_interpolation({
+  property: 'column-gap',
+  from: '0px',
+  to: '100px'
+}, [
+  {at: -0.3, expect: '0'}, // column-gap can't be negative.
+  {at: 0, expect: '0'},
+  {at: 0.3, expect: '30px'},
+  {at: 0.6, expect: '60px'},
+  {at: 1, expect: '100px'},
+  {at: 1.5, expect: '150px'}
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-align/animation/row-gap-interpolation.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>row-gap interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-row-gap">
+<meta name="assert" content="row-gap supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  row-gap: 90px;
+}
+.target {
+  row-gap: 10px;
+}
+.expected div {
+  opacity: 0.7;
+}
+.target > div {
+  height: 20px;
+  background-color: black;
+}
+.target.expected > div {
+  background-color: green;
+}
+</style>
+
+<body>
+<template id='target-template'>
+  <div></div><div></div>
+</template>
+</body>
+
+<script>
+test_interpolation({
+  property: 'row-gap',
+  from: neutralKeyframe,
+  to: '40px',
+}, [
+  {at: -0.3, expect: '1px'},
+  {at: 0, expect: '10px'},
+  {at: 0.3, expect: '19px'},
+  {at: 0.6, expect: '28px'},
+  {at: 1, expect: '40px'},
+  {at: 1.5, expect: '55px'},
+]);
+
+test_no_interpolation({
+  property: 'row-gap',
+  from: 'initial',
+  to: '20px',
+});
+
+test_interpolation({
+  property: 'row-gap',
+  from: 'inherit',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '111px'},
+  {at: 0, expect: '90px'},
+  {at: 0.3, expect: '69px'},
+  {at: 0.6, expect: '48px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '0px'},
+]);
+
+test_no_interpolation({
+  property: 'row-gap',
+  from: 'unset',
+  to: '20px',
+});
+
+test_no_interpolation({
+  property: 'row-gap',
+  from: 'normal',
+  to: '20px',
+});
+
+test_interpolation({
+  property: 'row-gap',
+  from: '0px',
+  to: '100px'
+}, [
+  {at: -0.3, expect: '0'}, // row-gap can't be negative.
+  {at: 0, expect: '0'},
+  {at: 0.3, expect: '30px'},
+  {at: 0.6, expect: '60px'},
+  {at: 1, expect: '100px'},
+  {at: 1.5, expect: '150px'}
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-box/animation/padding-interpolation.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>padding interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#padding-shorthand">
+<meta name="assert" content="padding supports animation as a list of lengths">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  padding: 30px;
+}
+.target {
+  width: 1px;
+  height: 1px;
+  background-color: black;
+  display: inline-block;
+  padding: 10px;
+}
+.expected {
+  background-color: green;
+  margin-right: 10px;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'padding',
+  from: neutralKeyframe,
+  to: '20px',
+}, [
+  {at: -0.3, expect: '7px'},
+  {at: 0, expect: '10px'},
+  {at: 0.3, expect: '13px'},
+  {at: 0.6, expect: '16px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '25px'},
+]);
+
+test_interpolation({
+  property: 'padding',
+  from: 'initial',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '0px'},
+  {at: 0, expect: '0px'},
+  {at: 0.3, expect: '6px'},
+  {at: 0.6, expect: '12px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '30px'},
+]);
+
+test_interpolation({
+  property: 'padding',
+  from: 'inherit',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '33px'},
+  {at: 0, expect: '30px'},
+  {at: 0.3, expect: '27px'},
+  {at: 0.6, expect: '24px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '15px'},
+]);
+
+test_interpolation({
+  property: 'padding',
+  from: 'unset',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '0px'},
+  {at: 0, expect: '0px'},
+  {at: 0.3, expect: '6px'},
+  {at: 0.6, expect: '12px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '30px'},
+]);
+
+test_interpolation({
+  property: 'padding',
+  from: '0px',
+  to: '10px'
+}, [
+  {at: -0.3, expect: '0px'}, // CSS padding can't be negative.
+  {at: 0, expect: '0px'},
+  {at: 0.3, expect: '3px'},
+  {at: 0.6, expect: '6px'},
+  {at: 1, expect: '10px'},
+  {at: 1.5, expect: '15px'}
+]);
+
+test_interpolation({
+  property: 'padding',
+  from: '20px 40px 60px 80px',
+  to: '30px 50px 70px 90px'
+}, [
+  {at: -0.3, expect: '17px 37px 57px 77px'},
+  {at: 0, expect: '20px 40px 60px 80px'},
+  {at: 0.3, expect: '23px 43px 63px 83px'},
+  {at: 0.6, expect: '26px 46px 66px 86px'},
+  {at: 1, expect: '30px 50px 70px 90px'},
+  {at: 1.5, expect: '35px 55px 75px 95px'}
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-break/animation/orphans-interpolation.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>orphans interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-break-3/#widows-orphans">
+<meta name="assert" content="orphans supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  orphans: 30;
+}
+.target {
+  orphans: 10;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'orphans',
+  from: neutralKeyframe,
+  to: '20',
+}, [
+  {at: -0.5, expect: '5'},
+  {at: 0, expect: '10'},
+  {at: 0.3, expect: '13'},
+  {at: 0.7, expect: '17'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '25'},
+]);
+
+test_interpolation({
+  property: 'orphans',
+  from: 'initial',
+  to: '20',
+}, [
+  {at: -0.5, expect: '1'},
+  {at: 0, expect: '2'},
+  {at: 0.3, expect: '7'},
+  {at: 0.7, expect: '15'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '29'},
+]);
+
+test_interpolation({
+  property: 'orphans',
+  from: 'inherit',
+  to: '20',
+}, [
+  {at: -0.5, expect: '35'},
+  {at: 0, expect: '30'},
+  {at: 0.3, expect: '27'},
+  {at: 0.7, expect: '23'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '15'},
+]);
+
+test_interpolation({
+  property: 'orphans',
+  from: 'unset',
+  to: '20',
+}, [
+  {at: -0.5, expect: '35'},
+  {at: 0, expect: '30'},
+  {at: 0.3, expect: '27'},
+  {at: 0.7, expect: '23'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '15'},
+]);
+
+test_interpolation({
+  property: 'orphans',
+  from: '10',
+  to: '1'
+}, [
+  {at: -0.5, expect: '15'},
+  {at: 0, expect: '10'},
+  {at: 0.3, expect: '7'},
+  {at: 0.7, expect: '4'},
+  // Only positive integers are valid
+  {at: 1, expect: '1'},
+  {at: 1.5, expect: '1'}
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-break/animation/widows-interpolation.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>widows interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-break-3/#widows-orphans">
+<meta name="assert" content="widows supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  widows: 30;
+}
+.target {
+  widows: 10;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'widows',
+  from: neutralKeyframe,
+  to: '20',
+}, [
+  {at: -3, expect: '1'},
+  {at: -2.5, expect: '1'},
+  {at: -0.5, expect: '5'},
+  {at: 0, expect: '10'},
+  {at: 0.3, expect: '13'},
+  {at: 0.6, expect: '16'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '25'},
+]);
+
+test_interpolation({
+  property: 'widows',
+  from: 'initial',
+  to: '20',
+}, [
+  {at: -3, expect: '1'},
+  {at: -2.5, expect: '1'},
+  {at: -0.5, expect: '1'},
+  {at: 0, expect: '2'},
+  {at: 0.3, expect: '7'},
+  {at: 0.6, expect: '13'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '29'},
+]);
+
+test_interpolation({
+  property: 'widows',
+  from: 'inherit',
+  to: '20',
+}, [
+  {at: -3, expect: '60'},
+  {at: -2.5, expect: '55'},
+  {at: -0.5, expect: '35'},
+  {at: 0, expect: '30'},
+  {at: 0.3, expect: '27'},
+  {at: 0.6, expect: '24'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '15'},
+]);
+
+test_interpolation({
+  property: 'widows',
+  from: 'unset',
+  to: '20',
+}, [
+  {at: -3, expect: '60'},
+  {at: -2.5, expect: '55'},
+  {at: -0.5, expect: '35'},
+  {at: 0, expect: '30'},
+  {at: 0.3, expect: '27'},
+  {at: 0.6, expect: '24'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '15'},
+]);
+
+test_interpolation({
+  property: 'widows',
+  from: '10',
+  to: '20'
+}, [
+  {at: -3.0, expect: '1'},
+  {at: -2.5, expect: '1'},
+  {at: -0.5, expect: '5'},
+  {at: 0, expect: '10'},
+  {at: 0.3, expect: '13'},
+  {at: 0.6, expect: '16'},
+  {at: 1, expect: '20'},
+  {at: 1.5, expect: '25'}
+]);
+
+test_interpolation({
+  property: 'widows',
+  from: '2',
+  to: '4'
+}, [
+  {at: -3.0, expect: '1'},
+  {at: -2.5, expect: '1'},
+  {at: -0.5, expect: '1'},
+  {at: 0, expect: '2'},
+  {at: 0.3, expect: '3'},
+  {at: 0.6, expect: '3'},
+  {at: 1, expect: '4'},
+  {at: 1.5, expect: '5'}
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-color/animation/color-interpolation.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>color interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-color/#the-color-property">
+<meta name="assert" content="color supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  color: blue;
+}
+.target {
+  display: inline-block;
+  font-size: 60pt;
+  color: yellow;
+}
+.expected {
+  margin-right: 15px;
+}
+</style>
+
+<body>
+  <template id="target-template">T</template>
+</body>
+
+<script>
+test_interpolation({
+  property: 'color',
+  from: neutralKeyframe,
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(255, 255, 0)'},
+  {at: 0, expect: 'rgb(255, 255, 0)'},
+  {at: 0.3, expect: 'rgb(179, 217, 0)'},
+  {at: 0.6, expect: 'rgb(102, 179, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 65, 0)'},
+]);
+
+test_interpolation({
+  property: 'color',
+  from: 'initial',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 0)'},
+  {at: 0, expect: 'rgb(0, 0, 0)'},
+  {at: 0.3, expect: 'rgb(0, 38, 0)'},
+  {at: 0.6, expect: 'rgb(0, 77, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'color',
+  from: 'inherit',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 255)'},
+  {at: 0, expect: 'rgb(0, 0, 255)'},
+  {at: 0.3, expect: 'rgb(0, 38, 179)'},
+  {at: 0.6, expect: 'rgb(0, 77, 102)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'color',
+  from: 'unset',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 255)'},
+  {at: 0, expect: 'rgb(0, 0, 255)'},
+  {at: 0.3, expect: 'rgb(0, 38, 179)'},
+  {at: 0.6, expect: 'rgb(0, 77, 102)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'color',
+  from: 'black',
+  to: 'orange',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 0)'},
+  {at: 0, expect: 'rgb(0, 0, 0)'},
+  {at: 0.3, expect: 'rgb(77, 50, 0)'},
+  {at: 0.6, expect: 'rgb(153, 99, 0)'},
+  {at: 1, expect: 'rgb(255, 165, 0)'},
+  {at: 1.5, expect: 'rgb(255, 248, 0)'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/animation/flex-basis-interpolation.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>flex-basis interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-basis-property">
+<meta name="assert" content="flex-basis supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  flex-basis: 3%;
+}
+.target {
+  flex-basis: 1%;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'flex-basis',
+  from: neutralKeyframe,
+  to: '2%',
+}, [
+  {at: -0.3, expect: '0.7%'},
+  {at: 0, expect: '1%'},
+  {at: 0.3, expect: '1.3%'},
+  {at: 0.6, expect: '1.6%'},
+  {at: 1, expect: '2%'},
+  {at: 1.5, expect: '2.5%'},
+]);
+
+test_no_interpolation({
+  property: 'flex-basis',
+  from: 'initial',
+  to: '2%',
+});
+
+test_interpolation({
+  property: 'flex-basis',
+  from: 'inherit',
+  to: '2%',
+}, [
+  {at: -0.3, expect: '3.3%'},
+  {at: 0, expect: '3%'},
+  {at: 0.3, expect: '2.7%'},
+  {at: 0.6, expect: '2.4%'},
+  {at: 1, expect: '2%'},
+  {at: 1.5, expect: '1.5%'},
+]);
+
+test_no_interpolation({
+  property: 'flex-basis',
+  from: 'unset',
+  to: '2%',
+});
+
+test_interpolation({
+  property: 'flex-basis',
+  from: '0px',
+  to: '100px'
+}, [
+  {at: -0.3, expect: '0px'},
+  {at: 0, expect: '0px'},
+  {at: 0.4, expect: '40px'},
+  {at: 0.6, expect: '60px'},
+  {at: 1, expect: '100px'},
+  {at: 1.5, expect: '150px'}
+]);
+
+test_interpolation({
+  property: 'flex-basis',
+  from: '0%',
+  to: '100%'
+}, [
+  {at: -0.3, expect: '0%'},
+  {at: 0, expect: '0%'},
+  {at: 0.4, expect: '40%'},
+  {at: 0.6, expect: '60%'},
+  {at: 1, expect: '100%'},
+  {at: 1.5, expect: '150%'}
+]);
+</script>
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/animation/flex-grow-interpolation.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>flex-grow interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-grow-property">
+<meta name="assert" content="flex-grow supports animation by computed value type">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  display: flex;
+  flex-grow: 3;
+}
+.target {
+  height: 10px;
+  background: black;
+  flex-grow: 1;
+}
+.filler {
+  height: 10px;
+  flex-grow: 1;
+}
+.expected {
+  background: green;
+}
+</style>
+
+<body>
+<template id="target-template">
+  <div class="parent">
+    <div class="target"></div>
+    <div class="filler"></div>
+  </div>
+</template>
+</body>
+
+<script>
+test_interpolation({
+  property: 'flex-grow',
+  from: neutralKeyframe,
+  to: '2',
+}, [
+  {at: -0.3, expect: '0.7'},
+  {at: 0, expect: '1'},
+  {at: 0.3, expect: '1.3'},
+  {at: 0.6, expect: '1.6'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '2.5'},
+]);
+
+test_interpolation({
+  property: 'flex-grow',
+  from: 'initial',
+  to: '2',
+}, [
+  {at: -0.3, expect: '0'},
+  {at: 0, expect: '0'},
+  {at: 0.3, expect: '0.6'},
+  {at: 0.6, expect: '1.2'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '3'},
+]);
+
+test_interpolation({
+  property: 'flex-grow',
+  from: 'inherit',
+  to: '2',
+}, [
+  {at: -0.3, expect: '3.3'},
+  {at: 0, expect: '3'},
+  {at: 0.3, expect: '2.7'},
+  {at: 0.6, expect: '2.4'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '1.5'},
+]);
+
+test_interpolation({
+  property: 'flex-grow',
+  from: 'unset',
+  to: '2',
+}, [
+  {at: -0.3, expect: '0'},
+  {at: 0, expect: '0'},
+  {at: 0.3, expect: '0.6'},
+  {at: 0.6, expect: '1.2'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '3'},
+]);
+
+test_interpolation({
+  property: 'flex-grow',
+  from: '1',
+  to: '2',
+}, [
+  {at: -5, expect: '0'},
+  {at: -0.3, expect: '0.7'},
+  {at: 0, expect: '1'},
+  {at: 0.3, expect: '1.3'},
+  {at: 0.6, expect: '1.6'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '2.5'},
+]);
+
+test_interpolation({
+  property: 'flex-grow',
+  from: '0',
+  to: '1',
+}, [
+  {at: -5, expect: '0'},
+  {at: -0.3, expect: '0'},
+  {at: 0, expect: '0'},
+  {at: 0.3, expect: '0.3'},
+  {at: 0.6, expect: '0.6'},
+  {at: 1, expect: '1'},
+  {at: 1.5, expect: '1.5'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/animation/flex-shrink-interpolation.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>flex-shrink interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-shrink-property">
+<meta name="assert" content="flex-shrink supports animation as a number">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  flex-shrink: 3;
+}
+.target {
+  flex-shrink: 1.5;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'flex-shrink',
+  from: neutralKeyframe,
+  to: '2',
+}, [
+  {at: -0.3, expect: '1.35'},
+  {at: 0, expect: '1.5'},
+  {at: 0.3, expect: '1.65'},
+  {at: 0.6, expect: '1.8'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '2.25'},
+]);
+
+test_interpolation({
+  property: 'flex-shrink',
+  from: 'initial',
+  to: '2',
+}, [
+  {at: -0.3, expect: '0.7'},
+  {at: 0, expect: '1'},
+  {at: 0.3, expect: '1.3'},
+  {at: 0.6, expect: '1.6'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '2.5'},
+]);
+
+test_interpolation({
+  property: 'flex-shrink',
+  from: 'inherit',
+  to: '2',
+}, [
+  {at: -0.3, expect: '3.3'},
+  {at: 0, expect: '3'},
+  {at: 0.3, expect: '2.7'},
+  {at: 0.6, expect: '2.4'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '1.5'},
+]);
+
+test_interpolation({
+  property: 'flex-shrink',
+  from: 'unset',
+  to: '2',
+}, [
+  {at: -0.3, expect: '0.7'},
+  {at: 0, expect: '1'},
+  {at: 0.3, expect: '1.3'},
+  {at: 0.6, expect: '1.6'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '2.5'},
+]);
+
+test_interpolation({
+  property: 'flex-shrink',
+  from: '1',
+  to: '2',
+}, [
+  {at: -5, expect: '0'},
+  {at: -0.3, expect: '0.7'},
+  {at: 0, expect: '1'},
+  {at: 0.3, expect: '1.3'},
+  {at: 0.6, expect: '1.6'},
+  {at: 1, expect: '2'},
+  {at: 1.5, expect: '2.5'},
+]);
+
+test_interpolation({
+  property: 'flex-shrink',
+  from: '0',
+  to: '1',
+}, [
+  {at: -5, expect: '0'},
+  {at: -0.3, expect: '0'},
+  {at: 0, expect: '0'},
+  {at: 0.3, expect: '0.3'},
+  {at: 0.6, expect: '0.6'},
+  {at: 1, expect: '1'},
+  {at: 1.5, expect: '1.5'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-grid/parsing/grid-template-columns-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: parsing grid-template-columns with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns">
+<meta name="assert" content="grid-template-columns supports only the grammar 'none | <track-list> | <auto-track-list>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("grid-template-columns", '-10px');
+test_invalid_value("grid-template-columns", '-20%');
+test_invalid_value("grid-template-columns", '-5fr');
+test_invalid_value("grid-template-columns", 'minmax(5fr, calc(0.5em + 10px))');
+test_invalid_value("grid-template-columns", 'minmax(-10px, auto)');
+test_invalid_value("grid-template-columns", 'minmax(-20%, max-content)');
+test_invalid_value("grid-template-columns", 'minmax(min-content, -20%)');
+test_invalid_value("grid-template-columns", 'fit-content(-10px)');
+test_invalid_value("grid-template-columns", 'fit-content(-20%)');
+test_invalid_value("grid-template-columns", '[one] 10px [two three] repeat(20%) [four five six] 3fr [seven]');
+test_invalid_value("grid-template-columns", '[one]');
+test_invalid_value("grid-template-columns", '[one] 10px [two] [three]');
+test_invalid_value("grid-template-columns", 'repeat(auto-fill, -10px)');
+test_invalid_value("grid-template-columns", 'repeat(auto-fill, 10px) repeat(auto-fit, 20%)');
+</script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-grid/parsing/grid-template-columns-valid.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: parsing grid-template-columns with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns">
+<meta name="assert" content="grid-template-columns supports the full grammar 'none | <track-list> | <auto-track-list>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("grid-template-columns", "none");
+
+// track-size <fixed-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
+test_valid_value("grid-template-columns", '10px');
+test_valid_value("grid-template-columns", '20%');
+test_valid_value("grid-template-columns", 'calc(-0.5em + 10px)');
+test_valid_value("grid-template-columns", 'calc(0.5em + 10px)');
+test_valid_value("grid-template-columns", 'calc(30% + 40vw)');
+test_valid_value("grid-template-columns", '5fr');
+test_valid_value("grid-template-columns", 'min-content');
+test_valid_value("grid-template-columns", 'max-content');
+test_valid_value("grid-template-columns", 'auto');
+
+// track-size minmax( <inflexible-breadth> , <track-breadth> )
+test_valid_value("grid-template-columns", 'minmax(10px, auto)');
+test_valid_value("grid-template-columns", 'minmax(20%, max-content)');
+test_valid_value("grid-template-columns", 'minmax(calc(-0.5em + 10px), min-content)');
+test_valid_value("grid-template-columns", 'minmax(calc(0.5em + 10px), 5fr)');
+test_valid_value("grid-template-columns", 'minmax(calc(30% + 40vw), 10px)');
+test_valid_value("grid-template-columns", 'minmax(min-content, 20%)');
+test_valid_value("grid-template-columns", 'minmax(max-content, calc(-0.5em + 10px))');
+test_valid_value("grid-template-columns", 'minmax(auto, calc(0.5em + 10px))');
+
+// track-size fit-content( <length-percentage> )
+test_valid_value("grid-template-columns", 'fit-content(10px)');
+test_valid_value("grid-template-columns", 'fit-content(20%)');
+test_valid_value("grid-template-columns", 'fit-content(calc(-0.5em + 10px))');
+test_valid_value("grid-template-columns", 'fit-content(calc(0.5em + 10px))');
+test_valid_value("grid-template-columns", 'fit-content(calc(30% + 40vw))');
+
+// <track-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )
+
+// 'repeat(1, [] 10px)' in Blink
+// 'repeat(1, 10px)' in Firefox
+// '[] 10px' in Safari
+// '10px' in Edge 18
+test_valid_value("grid-template-columns", 'repeat(1, [] 10px)', ['repeat(1, 10px)', 'repeat(1, [] 10px)']);
+
+// 'repeat(1, [one two] 20%)' in Blink, Firefox
+// '[one two] 20%' in Safari, Edge 18
+test_valid_value("grid-template-columns", 'repeat(1, [one two] 20%)');
+
+// 'repeat(2, minmax(10px, auto))' in Blink, Firefox, Edge 18
+// 'minmax(10px, auto) minmax(10px, auto)' in Safari
+test_valid_value("grid-template-columns", 'repeat(2, minmax(10px, auto))');
+
+test_valid_value("grid-template-columns", 'repeat(2, fit-content(20%) [three four] 30px 40px [five six])');
+
+// <track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?
+test_valid_value("grid-template-columns", 'min-content repeat(5, minmax(10px, auto))');
+
+// <auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
+test_valid_value("grid-template-columns", 'repeat(auto-fill, 10px)');
+test_valid_value("grid-template-columns", 'repeat(auto-fit, [one] 20%)');
+test_valid_value("grid-template-columns", 'repeat(auto-fill, minmax(30px, 5fr) [two])');
+test_valid_value("grid-template-columns", 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])');
+
+// <auto-track-list> =
+// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
+// <auto-repeat>
+// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
+
+test_valid_value("grid-template-columns", '[one] repeat(2, minmax(10px, auto)) [two] 30px [three] repeat(auto-fill, 10px) 40px [four five] repeat(2, minmax(10px, auto)) [six]');
+</script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-grid/parsing/grid-template-rows-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: parsing grid-template-rows with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-rows">
+<meta name="assert" content="grid-template-rows supports only the grammar 'none | <track-list> | <auto-track-list>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("grid-template-rows", '-10px');
+test_invalid_value("grid-template-rows", '-20%');
+test_invalid_value("grid-template-rows", '-5fr');
+test_invalid_value("grid-template-rows", 'minmax(5fr, calc(0.5em + 10px))');
+test_invalid_value("grid-template-rows", 'minmax(-10px, auto)');
+test_invalid_value("grid-template-rows", 'minmax(-20%, max-content)');
+test_invalid_value("grid-template-rows", 'minmax(min-content, -20%)');
+test_invalid_value("grid-template-rows", 'fit-content(-10px)');
+test_invalid_value("grid-template-rows", 'fit-content(-20%)');
+test_invalid_value("grid-template-rows", '[one] 10px [two three] repeat(20%) [four five six] 3fr [seven]');
+test_invalid_value("grid-template-rows", '[one]');
+test_invalid_value("grid-template-rows", '[one] 10px [two] [three]');
+test_invalid_value("grid-template-rows", 'repeat(auto-fill, -10px)');
+test_invalid_value("grid-template-rows", 'repeat(auto-fill, 10px) repeat(auto-fit, 20%)');
+</script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-grid/parsing/grid-template-rows-valid.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: parsing grid-template-rows with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-rows">
+<meta name="assert" content="grid-template-rows supports the full grammar 'none | <track-list> | <auto-track-list>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("grid-template-rows", "none");
+
+// track-size <fixed-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
+test_valid_value("grid-template-rows", '10px');
+test_valid_value("grid-template-rows", '20%');
+test_valid_value("grid-template-rows", 'calc(-0.5em + 10px)');
+test_valid_value("grid-template-rows", 'calc(0.5em + 10px)');
+test_valid_value("grid-template-rows", 'calc(30% + 40vw)');
+test_valid_value("grid-template-rows", '5fr');
+test_valid_value("grid-template-rows", 'min-content');
+test_valid_value("grid-template-rows", 'max-content');
+test_valid_value("grid-template-rows", 'auto');
+
+// track-size minmax( <inflexible-breadth> , <track-breadth> )
+test_valid_value("grid-template-rows", 'minmax(10px, auto)');
+test_valid_value("grid-template-rows", 'minmax(20%, max-content)');
+test_valid_value("grid-template-rows", 'minmax(calc(-0.5em + 10px), min-content)');
+test_valid_value("grid-template-rows", 'minmax(calc(0.5em + 10px), 5fr)');
+test_valid_value("grid-template-rows", 'minmax(calc(30% + 40vw), 10px)');
+test_valid_value("grid-template-rows", 'minmax(min-content, 20%)');
+test_valid_value("grid-template-rows", 'minmax(max-content, calc(-0.5em + 10px))');
+test_valid_value("grid-template-rows", 'minmax(auto, calc(0.5em + 10px))');
+
+// track-size fit-content( <length-percentage> )
+test_valid_value("grid-template-rows", 'fit-content(10px)');
+test_valid_value("grid-template-rows", 'fit-content(20%)');
+test_valid_value("grid-template-rows", 'fit-content(calc(-0.5em + 10px))');
+test_valid_value("grid-template-rows", 'fit-content(calc(0.5em + 10px))');
+test_valid_value("grid-template-rows", 'fit-content(calc(30% + 40vw))');
+
+// <track-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )
+
+// 'repeat(1, [] 10px)' in Blink
+// 'repeat(1, 10px)' in Firefox
+// '[] 10px' in Safari
+// '10px' in Edge 18
+test_valid_value("grid-template-rows", 'repeat(1, [] 10px)', ['repeat(1, 10px)', 'repeat(1, [] 10px)']);
+
+// 'repeat(1, [one two] 20%)' in Blink, Firefox
+// '[one two] 20%' in Safari, Edge 18
+test_valid_value("grid-template-rows", 'repeat(1, [one two] 20%)');
+
+// 'repeat(2, minmax(10px, auto))' in Blink, Firefox, Edge 18
+// 'minmax(10px, auto) minmax(10px, auto)' in Safari
+test_valid_value("grid-template-rows", 'repeat(2, minmax(10px, auto))');
+
+test_valid_value("grid-template-rows", 'repeat(2, fit-content(20%) [three four] 30px 40px [five six])');
+
+// <track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?
+test_valid_value("grid-template-rows", 'min-content repeat(5, minmax(10px, auto))');
+
+// <auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
+test_valid_value("grid-template-rows", 'repeat(auto-fill, 10px)');
+test_valid_value("grid-template-rows", 'repeat(auto-fit, [one] 20%)');
+test_valid_value("grid-template-rows", 'repeat(auto-fill, minmax(30px, 5fr) [two])');
+test_valid_value("grid-template-rows", 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])');
+
+// <auto-track-list> =
+// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
+// <auto-repeat>
+// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
+
+test_valid_value("grid-template-rows", '[one] repeat(2, minmax(10px, auto)) [two] 30px [three] repeat(auto-fill, 10px) 40px [four five] repeat(2, minmax(10px, auto)) [six]');
+</script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-position/animation/position-interpolation.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>position interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-position-3/#position-property">
+<meta name="assert" content="position has discrete animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  position: relative;
+  display: inline-block;
+  height: 10px;
+  margin: 0px;
+}
+.target {
+  width: 10px;
+  height: 10px;
+  background-color: black;
+  left: 10px;
+  position: 10px;
+}
+.expected {
+  background-color: green;
+}
+</style>
+
+<body>
+<template id="target-template">
+  <div class="parent">
+    <div class="target"></div>
+  </div>
+</template>
+</body>
+
+<script>
+test_no_interpolation({
+  property: 'position',
+  from: 'absolute',
+  to: 'static',
+});
+
+// This is still discrete interpolation; this test ensures that the neutral
+// keyframe is defined correctly for position.
+test_interpolation({
+  property: 'position',
+  from: neutralKeyframe,
+  to: 'absolute',
+  method: 'CSS Animations',
+}, [
+  {at: -1, expect: 'static'},
+  {at: 0, expect: 'static'},
+  {at: 0.25, expect: 'static'},
+  {at: 0.5, expect: 'absolute'},
+  {at: 0.75, expect: 'absolute'},
+  {at: 1, expect: 'absolute'},
+  {at: 2, expect: 'absolute'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-position/position-absolute-crash-chrome-012.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<link rel="help" href="https://crbug.com/996085">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>test(()=>{})</script>
+<style>
+  #container {
+    width: 600px;
+    position: relative;
+  }
+  #target {
+    position: absolute;
+    left: 0px;
+    right: 33554000px;
+    width: 10px;
+    margin-left: 33554432px;
+    margin-right: 33554432px;
+    height: 20px;
+  }
+</style>
+<body>
+  <div id="container">
+    <div id="target"></div>
+  </div>
+</body>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/animation/caret-color-interpolation.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>caret-color interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#propdef-caret-color">
+<meta name="assert" content="caret-color supports animation by computed value">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  caret-color: blue;
+}
+.target {
+  display: inline-block;
+  font-size: 60pt;
+  caret-color: yellow;
+}
+.expected {
+  margin-right: 15px;
+}
+</style>
+
+<body contenteditable>
+  <template id="target-template">T</template>
+</body>
+
+<script>
+test_interpolation({
+  property: 'caret-color',
+  from: neutralKeyframe,
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(255, 255, 0)'},
+  {at: 0, expect: 'rgb(255, 255, 0)'},
+  {at: 0.3, expect: 'rgb(179, 217, 0)'},
+  {at: 0.6, expect: 'rgb(102, 179, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 65, 0)'},
+]);
+
+test_no_interpolation({
+  property: 'caret-color',
+  from: 'initial',
+  to: 'green',
+});
+
+test_no_interpolation({
+  property: 'caret-color',
+  from: 'auto',
+  to: 'green',
+});
+
+test_interpolation({
+  property: 'caret-color',
+  from: 'currentColor',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 0)'},
+  {at: 0, expect: 'rgb(0, 0, 0)'},
+  {at: 0.3, expect: 'rgb(0, 38, 0)'},
+  {at: 0.6, expect: 'rgb(0, 77, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'caret-color',
+  from: 'inherit',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 255)'},
+  {at: 0, expect: 'rgb(0, 0, 255)'},
+  {at: 0.3, expect: 'rgb(0, 38, 179)'},
+  {at: 0.6, expect: 'rgb(0, 77, 102)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'caret-color',
+  from: 'unset',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 255)'},
+  {at: 0, expect: 'rgb(0, 0, 255)'},
+  {at: 0.3, expect: 'rgb(0, 38, 179)'},
+  {at: 0.6, expect: 'rgb(0, 77, 102)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'caret-color',
+  from: 'black',
+  to: 'orange',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 0)'},
+  {at: 0, expect: 'rgb(0, 0, 0)'},
+  {at: 0.3, expect: 'rgb(77, 50, 0)'},
+  {at: 0.6, expect: 'rgb(153, 99, 0)'},
+  {at: 1, expect: 'rgb(255, 165, 0)'},
+  {at: 1.5, expect: 'rgb(255, 248, 0)'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/animation/outline-color-interpolation.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>outline-color interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-color">
+<meta name="assert" content="outline-color supports animation by computed value">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  outline-color: yellow;
+}
+.target {
+  width: 50px;
+  height: 50px;
+  background-color: black;
+  display: inline-block;
+  outline: 12px solid white;
+  margin: 12px 12px;
+  outline-color: blue;
+}
+.expected {
+  background-color: lime;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'outline-color',
+  from: neutralKeyframe,
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 255)'},
+  {at: 0, expect: 'rgb(0, 0, 255)'},
+  {at: 0.3, expect: 'rgb(0, 38, 179)'},
+  {at: 0.6, expect: 'rgb(0, 77, 102)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'outline-color',
+  from: 'initial',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 0)'},
+  {at: 0, expect: 'rgb(0, 0, 0)'},
+  {at: 0.3, expect: 'rgb(0, 38, 0)'},
+  {at: 0.6, expect: 'rgb(0, 77, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'outline-color',
+  from: 'inherit',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(255, 255, 0)'},
+  {at: 0, expect: 'rgb(255, 255, 0)'},
+  {at: 0.3, expect: 'rgb(179, 217, 0)'},
+  {at: 0.6, expect: 'rgb(102, 179, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 65, 0)'},
+]);
+
+test_interpolation({
+  property: 'outline-color',
+  from: 'unset',
+  to: 'green',
+}, [
+  {at: -0.3, expect: 'rgb(0, 0, 0)'},
+  {at: 0, expect: 'rgb(0, 0, 0)'},
+  {at: 0.3, expect: 'rgb(0, 38, 0)'},
+  {at: 0.6, expect: 'rgb(0, 77, 0)'},
+  {at: 1, expect: 'rgb(0, 128, 0)'},
+  {at: 1.5, expect: 'rgb(0, 192, 0)'},
+]);
+
+test_interpolation({
+  property: 'outline-color',
+  from: 'white',
+  to: 'orange'
+}, [
+  {at: -0.3, expect: 'white'},
+  {at: 0, expect: 'white'},
+  {at: 0.3, expect: 'rgb(255, 228, 179)'},
+  {at: 0.6, expect: 'rgb(255, 201, 102)'},
+  {at: 1, expect: 'orange'},
+  {at: 1.5, expect: 'rgb(255, 120, 0)'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/animation/outline-offset-interpolation.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>outline-offset interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-offset">
+<meta name="assert" content="outline-offset supports animation by computed value">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  outline: solid 0px;
+  outline-offset: 30px;
+}
+.target {
+  width: 50px;
+  height: 50px;
+  background-color: black;
+  display: inline-block;
+  margin: 40px 0px 0px 40px;
+  outline: 4px solid orange;
+  outline-offset: 10px;
+}
+.expected {
+  background-color: green;
+  margin-right: 18px;
+}
+</style>
+
+<body></body>
+
+<script>
+test_interpolation({
+  property: 'outline-offset',
+  from: neutralKeyframe,
+  to: '20px',
+}, [
+  {at: -0.3, expect: '7px'},
+  {at: 0, expect: '10px'},
+  {at: 0.3, expect: '13px'},
+  {at: 0.6, expect: '16px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '25px'},
+]);
+
+test_interpolation({
+  property: 'outline-offset',
+  from: 'initial',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '-6px'},
+  {at: 0, expect: '0px'},
+  {at: 0.3, expect: '6px'},
+  {at: 0.6, expect: '12px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '30px'},
+]);
+
+test_interpolation({
+  property: 'outline-offset',
+  from: 'inherit',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '33px'},
+  {at: 0, expect: '30px'},
+  {at: 0.3, expect: '27px'},
+  {at: 0.6, expect: '24px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '15px'},
+]);
+
+test_interpolation({
+  property: 'outline-offset',
+  from: 'unset',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '-6px'},
+  {at: 0, expect: '0px'},
+  {at: 0.3, expect: '6px'},
+  {at: 0.6, expect: '12px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '30px'},
+]);
+
+test_interpolation({
+  property: 'outline-offset',
+  from: '-5px',
+  to: '5px',
+}, [
+  {at: -0.3, expect: '-8px'},
+  {at: 0, expect: '-5px'},
+  {at: 0.3, expect: '-2px'},
+  {at: 0.6, expect: '1px'},
+  {at: 1, expect: '5px'},
+  {at: 1.5, expect: '10px'},
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/animation/outline-width-interpolation.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>outline-width interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-width">
+<meta name="assert" content="outline-width supports animation by computed value">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+  outline: solid transparent;
+  outline-width: 30px;
+}
+.target {
+  width: 50px;
+  height: 50px;
+  background-color: black;
+  display: inline-block;
+  margin: 18px;
+  outline: solid orange;
+  outline-width: 10px;
+  opacity: 0.5;
+}
+.expected {
+  background-color: green;
+}
+</style>
+
+<body></body>
+
+<script>
+// NOTE: The below tests make assumptions about the values of medium (for unset
+// and initial) and thick, namely that:
+//   * medium=3px
+//   * thick=3px
+//
+// A better version of these tests would dynamically generate the expected values
+// by querying the computed style from the UA.
+
+test_interpolation({
+  property: 'outline-width',
+  from: neutralKeyframe,
+  to: '20px',
+}, [
+  {at: -0.3, expect: '7px'},
+  {at: 0, expect: '10px'},
+  {at: 0.3, expect: '13px'},
+  {at: 0.6, expect: '16px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '25px'},
+]);
+
+test_interpolation({
+  property: 'outline-width',
+  from: 'initial',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '0px'},
+  {at: 0, expect: '3px'},
+  {at: 0.3, expect: '8px'},
+  {at: 0.6, expect: '13px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '28px'},
+]);
+
+test_interpolation({
+  property: 'outline-width',
+  from: 'inherit',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '33px'},
+  {at: 0, expect: '30px'},
+  {at: 0.3, expect: '27px'},
+  {at: 0.6, expect: '24px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '15px'},
+]);
+
+test_interpolation({
+  property: 'outline-width',
+  from: 'unset',
+  to: '20px',
+}, [
+  {at: -0.3, expect: '0px'},
+  {at: 0, expect: '3px'},
+  {at: 0.3, expect: '8px'},
+  {at: 0.6, expect: '13px'},
+  {at: 1, expect: '20px'},
+  {at: 1.5, expect: '28px'},
+]);
+
+test_interpolation({
+  property: 'outline-width',
+  from: '0px',
+  to: '10px',
+}, [
+  {at: -0.3, expect: '0px'}, // CSS outline-width can't be negative.
+  {at: 0, expect: '0px'},
+  {at: 0.3, expect: '3px'},
+  {at: 0.6, expect: '6px'},
+  {at: 1, expect: '10px'},
+  {at: 1.5, expect: '15px'}
+]);
+
+test_interpolation({
+  property: 'outline-width',
+  from: 'thick',
+  to: '15px',
+}, [
+  {at: -2, expect: '0px'}, // CSS outline-width can't be negative.
+  {at: -0.3, expect: '2px'},
+  {at: 0, expect: '5px'},
+  {at: 0.3, expect: '8px'},
+  {at: 0.6, expect: '11px'},
+  {at: 1, expect: '15px'},
+  {at: 1.5, expect: '20px'}
+]);
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/dom/idlharness.any.js
@@ -0,0 +1,22 @@
+// META: global=!window,worker
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+// META: timeout=long
+
+'use strict';
+
+idl_test(
+  ['dom'],
+  ['html'],
+  idl_array => {
+    idl_array.add_objects({
+      EventTarget: ['new EventTarget()'],
+      Event: ['new Event("foo")'],
+      CustomEvent: ['new CustomEvent("foo")'],
+      AbortController: ['new AbortController()'],
+      AbortSignal: ['new AbortController().signal'],
+    });
+  }
+);
+
+done();
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/dom/idlharness.window.js
@@ -0,0 +1,44 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+// META: script=/common/subset-tests-by-key.js
+// META: variant=?include=Node
+// META: variant=?exclude=Node
+// META: timeout=long
+
+'use strict';
+
+idl_test(
+  ['dom'],
+  ['html'],
+  idl_array => {
+    self.xmlDoc = document.implementation.createDocument(null, '', null);
+    self.detachedRange = document.createRange();
+    detachedRange.detach();
+    self.element = xmlDoc.createElementNS(null, 'test');
+    element.setAttribute('bar', 'baz');
+
+    idl_array.add_objects({
+      EventTarget: ['new EventTarget()'],
+      Event: ['document.createEvent("Event")', 'new Event("foo")'],
+      CustomEvent: ['new CustomEvent("foo")'],
+      AbortController: ['new AbortController()'],
+      AbortSignal: ['new AbortController().signal'],
+      Document: ['new Document()'],
+      XMLDocument: ['xmlDoc'],
+      DOMImplementation: ['document.implementation'],
+      DocumentFragment: ['document.createDocumentFragment()'],
+      DocumentType: ['document.doctype'],
+      Element: ['element'],
+      Attr: ['document.querySelector("[id]").attributes[0]'],
+      Text: ['document.createTextNode("abc")'],
+      ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
+      Comment: ['document.createComment("abc")'],
+      Range: ['document.createRange()', 'detachedRange'],
+      NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
+      TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
+      NodeList: ['document.querySelectorAll("script")'],
+      HTMLCollection: ['document.body.children'],
+      DOMTokenList: ['document.body.classList'],
+    });
+  }
+);
deleted file mode 100644
--- a/testing/web-platform/tests/dom/interfaces.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>DOM IDL tests</title>
-<meta name="timeout" content="long">
-<meta name="variant" content="?include=Node">
-<meta name="variant" content="?exclude=Node">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/common/subset-tests-by-key.js></script>
-<script src=/resources/WebIDLParser.js></script>
-<script src=/resources/idlharness.js></script>
-
-<h1>DOM IDL tests</h1>
-<div id=log></div>
-<script>
-"use strict";
-var xmlDoc = document.implementation.createDocument(null, "", null);
-var detachedRange = document.createRange();
-detachedRange.detach();
-var element = xmlDoc.createElementNS(null, "test");
-element.setAttribute("bar", "baz");
-
-var idlArray = new IdlArray();
-
-function doTest([html, dom]) {
-  idlArray.add_idls(dom);
-  idlArray.add_dependency_idls(html);
-  idlArray.add_objects({
-    EventTarget: ['new EventTarget()'],
-    Event: ['document.createEvent("Event")', 'new Event("foo")'],
-    CustomEvent: ['new CustomEvent("foo")'],
-    AbortController: ['new AbortController()'],
-    AbortSignal: ['new AbortController().signal'],
-    Document: ['new Document()'],
-    XMLDocument: ['xmlDoc'],
-    DOMImplementation: ['document.implementation'],
-    DocumentFragment: ['document.createDocumentFragment()'],
-    DocumentType: ['document.doctype'],
-    Element: ['element'],
-    Attr: ['document.querySelector("[id]").attributes[0]'],
-    Text: ['document.createTextNode("abc")'],
-    ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
-    Comment: ['document.createComment("abc")'],
-    Range: ['document.createRange()', 'detachedRange'],
-    NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
-    TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
-    NodeList: ['document.querySelectorAll("script")'],
-    HTMLCollection: ['document.body.children'],
-    DOMTokenList: ['document.body.classList'],
-  });
-  idlArray.test();
-}
-
-function fetchText(url) {
-  return fetch(url).then((response) => response.text());
-}
-
-promise_test(function() {
-  return Promise.all(['/interfaces/html.idl',
-                      '/interfaces/dom.idl'].map(fetchText))
-                .then(doTest);
-}, "Test driver");
-</script>
--- a/testing/web-platform/tests/encrypted-media/idlharness.https.html
+++ b/testing/web-platform/tests/encrypted-media/idlharness.https.html
@@ -17,21 +17,24 @@
       This test verifies that implementations of the Encrypted Media Extensions API match its WebIDL definition.
     </p>
 
     <div id='log'></div>
 
     <script>
       'use strict';
 
-      promise_test(async () => {
-        const idls = await fetch('/interfaces/encrypted-media.idl').then(r => r.text());
-        const html = await fetch('/interfaces/html.idl').then(r => r.text());
-        const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
-        var idl_array = new IdlArray();
-        idl_array.add_idls(idls);
-        idl_array.add_dependency_idls(html);
-        idl_array.add_dependency_idls(dom);
-        idl_array.test();
-      }, 'Test encrypted-media IDL');
+      idl_test(
+        ['encrypted-media'],
+        ['html', 'dom'],
+        idl_array => {
+          self.audio = document.createElement('audio');
+          self.video = document.createElement('video');
+          idl_array.add_objects({
+            HTMLAudioElement: ['audio'],
+            HTMLVideoElement: ['video'],
+            Navigator: ['navigator'],
+          });
+        }
+      );
     </script>
   </body>
 </html>
deleted file mode 100644
--- a/testing/web-platform/tests/event-timing/bufferbeforeonload.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html>
-<html>
-<meta charset=utf-8 />
-<title>Event Timing: buffer long-latency events before onload</title>
-<meta name="timeout" content="long">
-<button id='button' onmousedown='clickDelay()'>Generate a 'click' event</button>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/testdriver.js></script>
-<script src=/resources/testdriver-vendor.js></script>
-
-<script src=resources/event-timing-test-utils.js></script>
-<img src=resources/slow-image.py>
-
-<script>
-  let clickTimeMin;
-  let processingStartMin;
-  let onloadStart;
-  let firstClickStart = 0;
-  let firstClickEnd = 0;
-  function clickDelay() {
-    const onclickStart = performance.now();
-    if (firstClickStart === 0)
-      firstClickStart = onclickStart;
-    while(performance.now() < onclickStart + 60) {}
-    if (firstClickEnd === 0)
-      firstClickEnd = performance.now();
-  }
-
-  function validateEntries(entries) {
-    const entriesBeforeOnload = entries.filter(
-        e => e.startTime < onloadStart);
-    assert_equals(entriesBeforeOnload.length, 1,
-        "Long latency events before onload should be buffered.");
-    const entry = entriesBeforeOnload[0];
-    verifyClickEvent(entry, true);
-
-    assert_greater_than_equal(entry.startTime, clickTimeMin,
-        "The entry's start time should be later than clickTimeMin.");
-    assert_greater_than_equal(entry.processingStart, processingStartMin,
-        "The entry should be processed later than processingStartMin.");
-    assert_less_than_equal(entry.processingStart, firstClickStart,
-        "The processingStart must be before firstClickStart.")
-    assert_greater_than_equal(entry.processingEnd, firstClickEnd,
-        "The processingEnd must be after firstClickEnd.");
-
-    const entriesAfterOnload = entries.filter(
-        e => e.startTime >= onloadStart);
-    assert_equals(entriesAfterOnload.length, 1,
-        "Events after onload should still be buffered.");
-  }
-
-  /* Timeline:
-     Begin Busy Loop
-     Click 1 arrives
-     End Busy Loop
-     (Dispatch and Process Click 1 - buffered)
-     Onload Event Fires
-     Begin Busy Loop
-     Click 2 arrives
-     End Busy Loop
-     (Dispatch and Process Click 2 - not buffered)
-  */
-  async_test(function(t) {
-    if (!window.PerformanceEventTiming)
-      assert_unreached("PerformanceEventTiming is not supported");
-
-    clickTimeMin = performance.now();
-    clickAndBlockMain('button');
-    // Event handlers will be dispatched asynchronously, so this will be called
-    // before processing begins.
-    processingStartMin = performance.now();
-    const bufferedEntries = [];
-    on_event(window, 'load', e => {
-      onloadStart = performance.now();
-      // Register the observer after the page has been loaded
-      const observer = new PerformanceObserver(function (entryList, observer) {
-        entryList.getEntries().forEach(function(entry) {
-          assert_equals(entry.entryType, "event");
-          if (entry.name === 'mousedown') {
-            bufferedEntries.push(entry);
-          }
-          if (bufferedEntries.length == 2) {
-            validateEntries(bufferedEntries)
-            observer.disconnect();
-            t.done();
-          }
-        });
-      })
-      observer.observe({
-        type: "event",
-        buffered: true
-      });
-      clickAndBlockMain('button');
-    });
-  }, "Event Timing: click, onload.");
-
-</script>
-</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/event-timing/click-timing.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing: compare timing of two long clicks
+</title>
+<button id='button'>Generate a 'click' event</button>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<script>
+  /* Timeline:
+     Observer starts
+     Long click 1
+     Long click 2
+     Once two clicks have been received by observer, compare the timestamps.
+  */
+  let timeBeforeFirstClick;
+  let timeAfterFirstClick;
+  let timeAfterSecondClick;
+  let observedEntries = [];
+  async_test(function(t) {
+    if (!window.PerformanceEventTiming)
+      assert_unreached("PerformanceEventTiming is not supported");
+
+    new PerformanceObserver(t.step_func(entryList => {
+      observedEntries = observedEntries.concat(entryList.getEntries().filter(
+        entry => entry.name === 'mousedown'));
+      if (observedEntries.length < 2)
+        return;
+
+      assert_not_equals(timeBeforeFirstClick, undefined);
+      assert_not_equals(timeAfterFirstClick, undefined);
+      assert_not_equals(timeAfterSecondClick, undefined);
+      // First click.
+      verifyClickEvent(observedEntries[0]);
+      assert_between_exclusive(observedEntries[0].processingStart,
+          timeBeforeFirstClick,
+          timeAfterFirstClick,
+          "First click's processingStart");
+      assert_greater_than(timeAfterFirstClick, observedEntries[0].startTime,
+          "timeAfterFirstClick should be later than first click's start time.");
+
+      // Second click.
+      verifyClickEvent(observedEntries[1]);
+      assert_between_exclusive(observedEntries[1].processingStart,
+          timeAfterFirstClick,
+          timeAfterSecondClick,
+          "Second click's processingStart");
+      assert_greater_than(timeAfterSecondClick, observedEntries[1].startTime,
+          "timeAfterSecondClick should be later than second click's start time.");
+      t.done();
+    })).observe({type: 'event'});
+    timeBeforeFirstClick = performance.now();
+    clickAndBlockMain('button').then( () => {
+      timeAfterFirstClick = performance.now();
+      clickAndBlockMain('button').then(() => {
+        timeAfterSecondClick = performance.now();
+      })
+    });
+  }, "Event Timing: compare click timings.");
+</script>
+</html>
deleted file mode 100644
--- a/testing/web-platform/tests/event-timing/observethenonload.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<html>
-<meta charset=utf-8 />
-<title>Event Timing: Performance observers can observe long-latency events
-</title>
-<meta name="timeout" content="long">
-<button id='button'>Generate a 'click' event</button>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/testdriver.js></script>
-<script src=/resources/testdriver-vendor.js></script>
-
-<script src=resources/event-timing-test-utils.js></script>
-<img src=resources/slow-image.py>
-
-<script>
-  let timeBeforeFirstClick;
-  let timeAfterFirstClick;
-  let timeAfterSecondClick;
-  let onloadStart;
-  let observedEntries = [];
-
-  function verifyObserverEntries(observedEntries) {
-    const entriesAfterFirstClick = observedEntries.filter(
-        e => e.startTime > timeAfterFirstClick);
-    assert_equals(entriesAfterFirstClick.length, 1,
-        'There should be one event after timeAfterFirstClick.');
-    const entry1 = entriesAfterFirstClick[0];
-    verifyClickEvent(entry1);
-    assert_greater_than(entry1.processingStart, timeAfterFirstClick,
-        "entry1's processing start should be after timeAfterFirstClick");
-    assert_less_than(entry1.processingStart, timeAfterSecondClick,
-        "entry1's processing start should be before timeAfterSecondClick.");
-    assert_greater_than(entry1.startTime, onloadStart,
-        "entry1's start time should be later than onloadStart.");
-
-    const entriesBeforeFirstClick =
-        observedEntries.filter(e => e.startTime < timeAfterFirstClick);
-    assert_equals(entriesBeforeFirstClick.length, 1,
-        'There should be one event before timeAfterFirstClick.'
-    );
-    const entry2 = entriesBeforeFirstClick[0];
-    verifyClickEvent(entry2);
-    assert_greater_than(entry2.processingStart, timeBeforeFirstClick,
-        "entry2's processing start should be after timeBeforeFirstClick");
-    assert_less_than(entry2.processingStart, timeAfterFirstClick,
-        "entry2's processing start should be berfore timeAfterFirstClick.");
-    assert_greater_than(timeAfterFirstClick, entry2.startTime,
-        "timeAfterFirstClick should be later than entry2's start time.");
-    // This should happen before onLoad
-    assert_greater_than(onloadStart, entry2.startTime,
-        "Onload should be later than entry's start time.");
-  }
-
-  /* Timeline:
-     Observer starts
-     Begin Busy Loop
-     Click 1 arrives
-     End Busy Loop
-     (Dispatch and Process Click 1 (buffered, observed))
-     Onload Event Fires
-     Begin Busy Loop
-     Click 2 arrives
-     End Busy Loop
-     (Dispatch and Process Click 2 (buffered, observed))
-     observer callback start
-  */
-  async_test(function(t) {
-    if (!window.PerformanceEventTiming)
-      assert_unreached("PerformanceEventTiming is not supported");
-
-    const observerPromise = new Promise((resolve, reject) => {
-      new PerformanceObserver(function(entryList) {
-        observedEntries = observedEntries.concat(entryList.getEntries().filter(
-          entry => entry.name === 'mousedown'));
-        if (observedEntries.length < 2) return;
-        resolve(observedEntries);
-      }).observe({ type: 'event' , buffered: true});
-    });
-    timeBeforeFirstClick = performance.now();
-    clickAndBlockMain('button').then( () => {
-      timeAfterFirstClick = performance.now();
-    });
-    on_event(window, 'load', function(e) {
-      onloadStart = performance.now();
-      // After onload start and before registering observer.
-      const bufferPromise = clickAndBlockMain('button').then(wait);
-      Promise.all([observerPromise, bufferPromise]).then((results) => {
-        timeAfterSecondClick = performance.now();
-        t.step(verifyObserverEntries.bind(null, results[0]));
-        t.done();
-      });
-    });
-  }, "Event Timing: click, observer, onload, click.");
-
-</script>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/event-timing/onloadthenobserve-firstInput.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html>
-<meta charset=utf-8 />
-<title>Event Timing: buffer long-latency events before onload</title>
-<meta name="timeout" content="long">
-<button id='button'>Generate a 'click' event</button>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/testdriver.js></script>
-<script src=/resources/testdriver-vendor.js></script>
-
-<script src=resources/event-timing-test-utils.js></script>
-
-<script>
-  /* Timeline:
-     Onload
-     PerformanceObserver is registered
-     Click 1
-     Click 2
-     PerformanceObserver should observe only one first-input entry.
-     (Dispatch and Process Click 2 - not buffered)
-  */
-  async_test(function(t) {
-    if (!window.PerformanceEventTiming)
-      assert_unreached("PerformanceEventTiming is not supported");
-
-    let numFirstInputObserved = 0;
-    let numEventsObserved = 0;
-    let observedEventEntries = [];
-
-    const event_observer_promise = new Promise((resolve, reject) => {
-      new PerformanceObserver(function(entryList) {
-        observedEventEntries = entryList.getEntries().filter(
-          entry => entry.name === 'mousedown');
-        numEventsObserved += observedEventEntries.length;
-        if (numEventsObserved >= 2) {
-          // There should be 2 event entries.
-          assert_equals(numEventsObserved, 2,
-            "There should be 2 observed event entries.");
-          resolve();
-        }
-      }).observe({ type: 'event' , buffered: true});
-    });
-
-    const first_input_observer_promise = new Promise((resolve, reject) => {
-      new PerformanceObserver(function(entryList) {
-        assert_equals(entryList.getEntries().length, 1);
-        resolve();
-      }).observe({ type: 'first-input' , buffered: true});
-    });
-
-    on_event(window, 'load', function(e) {
-      const click_promise = clickAndBlockMain('button').then(() => {
-        clickAndBlockMain('button');
-      });
-      Promise.all(
-          [event_observer_promise, first_input_observer_promise, click_promise]
-              ).then(() => {
-        t.done();
-      });
-    });
-  },
-  "Event Timing: check first-input after onload, observer, click, click."
-  );
-</script>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/event-timing/onloadthenobserve.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html>
-<html>
-<meta charset=utf-8 />
-<title>Event Timing: long-latency events after onload and before observer
-registration are lost
-</title>
-<meta name="timeout" content="long">
-<button id='button'>Generate a 'click' event</button>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/testdriver.js></script>
-<script src=/resources/testdriver-vendor.js></script>
-
-<script src=resources/event-timing-test-utils.js></script>
-<script>
-  let callbackTime;
-  let observerStart;
-  let processingStartMin;
-
-  function verifyObserverEntries(observedEntries) {
-    // Verify observer entries.  Should not include first click since we didn't
-    // buffered to true.
-    assert_equals(observedEntries.length, 1, "Long latency task after observer start should be observed.");
-    const entry = observedEntries[0];
-    verifyClickEvent(entry);
-    assert_greater_than(entry.processingStart, processingStartMin,
-        "The entry's processing start should be later than processingStartMin.");
-    assert_greater_than(callbackTime, entry.processingStart,
-        "The callback time should be later than the entry's processing start.");
-    assert_greater_than(entry.startTime, observerStart,
-        "The entry's start time should be later than observer start.");
-    assert_greater_than(callbackTime, entry.startTime,
-        "The callback time should be later than entry's start time.");
-  }
-
-  function startObserver(t) {
-    new PerformanceObserver(t.step_func_done((entryList, obs) => {
-        callbackTime = performance.now();
-        const observedEntries = entryList.getEntries().filter(
-            entry => entry.name === 'mousedown');
-        verifyObserverEntries(observedEntries);
-      })).observe({ type: 'event'});
-    observerStart = performance.now();
-  }
-
-  /* Timeline:
-     Onload Event fires
-     Begin Busy Loop
-     Click 1 arrives
-     End Busy Loop
-     (Dispatch and Process Click 1 (not buffered, not observed))
-     Observer start
-     Begin Busy Loop
-     Click 2 arrives
-     End Busy Loop
-     (Dispatch and Process Click 2 (not buffered, observed))
-  */
-  async_test(function(t) {
-    if (!window.PerformanceEventTiming)
-      assert_unreached("PerformanceEventTiming is not supported");
-
-    // Use a dummy observer to know when the first click has been dispatched.
-    const observerPromise = new Promise((resolve, reject) => {
-      new PerformanceObserver((entryList, observer) => {
-        resolve();
-        observer.disconnect();
-      }).observe({ entryTypes: ['event'] });
-    });
-    on_event(window, 'load', () => {
-      const clickPromise = clickAndBlockMain('button');
-      Promise.all([observerPromise, clickPromise]).then(() => {
-        startObserver(t);
-        clickAndBlockMain('button');
-        processingStartMin = performance.now();
-      });
-    });
-  },"Event Timing: onload, click, observer, click.");
-
-</script>
-</html>
--- a/testing/web-platform/tests/fetch/api/basic/scheme-data.any.js
+++ b/testing/web-platform/tests/fetch/api/basic/scheme-data.any.js
@@ -24,17 +24,17 @@ function checkFetchResponse(url, data, m
 checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII");
 checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII", "same-origin");
 checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII", "cors");
 checkFetchResponse("data:text/plain;base64,cmVzcG9uc2UncyBib2R5", "response's body", "text/plain");
 checkFetchResponse("data:image/png;base64,cmVzcG9uc2UncyBib2R5",
                    "response's body",
                    "image/png");
 checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII", null, "POST");
-checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII", null, "HEAD");
+checkFetchResponse("data:,response%27s%20body", "", "text/plain;charset=US-ASCII", null, "HEAD");
 
 function checkKoUrl(url, method, desc) {
   var cut = (url.length >= 40) ? "[...]" : "";
   desc = "Fetching [" + method + "] " + url.substring(0, 45) + cut + " is KO"
   promise_test(function(test) {
     return promise_rejects(test, new TypeError(), fetch(url, {"method": method}));
   }, desc);
 }
--- a/testing/web-platform/tests/geolocation-API/idlharness.window.js
+++ b/testing/web-platform/tests/geolocation-API/idlharness.window.js
@@ -1,18 +1,17 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 // https://www.w3.org/TR/geolocation-API/
 
-promise_test(async () => {
-  const idl = await fetch('/interfaces/geolocation-API.idl').then(r => r.text());
-  const html = await fetch('/interfaces/html.idl').then(r => r.text());
-
-  const idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(html);
-  idl_array.add_objects({
-    Navigator: ["navigator"],
-    Geolocation: ["navigator.geolocation"]
-  });
-  idl_array.test();
-}, 'geolocation-API interfaces');
+idl_test(
+  ['geolocation-API'],
+  ['html'],
+  idl_array => {
+    self.audio = document.createElement('audio');
+    self.video = document.createElement('video');
+    idl_array.add_objects({
+      Navigator: ['navigator'],
+      Geolocation: ['navigator.geolocation'],
+    });
+  }
+);
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-failure.html
@@ -0,0 +1,3 @@
+<script>
+parent.postMessage(new SharedArrayBuffer(10), "*");
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-failure.html.headers
@@ -0,0 +1,2 @@
+Cross-Origin-Embedder-Policy: require-corp
+Cross-Origin-Resource-Policy: cross-site
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<div id=log></div>
+<script>
+async_test(t => {
+  const frame = document.createElement("iframe");
+  t.add_cleanup(() => frame.remove());
+  frame.src = get_host_info().HTTPS_NOTSAMESITE_ORIGIN + new URL("resources/iframe-failure.html", location).pathname;
+  window.onmessage = t.unreached_func("Got a message event, expected a messageerror event");
+  window.onmessageerror = t.step_func_done();
+  document.body.append(frame);
+}, "SharedArrayBuffer and a cross-site <iframe>");
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html.headers
@@ -0,0 +1,2 @@
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html
@@ -0,0 +1,10 @@
+<base id="base" target="_blank">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe id="i" src="about:blank"></iframe>
+<script>
+async_test(function(t) {
+  window.onmessage = () => t.done();
+  i.src = "data:text/html,This should navigate the iframe<script>top.postMessage('done', '*');</sc" + "ript>";
+});
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html
@@ -0,0 +1,10 @@
+<base id="base" target="_blank">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe id="i" src="about:blank"></iframe>
+<script>
+async_test(function(t) {
+  window.onmessage = () => t.done();
+  i.contentWindow.location = "data:text/html,This should navigate the iframe<script>top.postMessage('done', '*');</sc" + "ript>";
+});
+</script>
rename from testing/web-platform/tests/infrastructure/metadata/infrastructure/reftest/reftest_fuzzy_chain_ini.html
rename to testing/web-platform/tests/infrastructure/metadata/infrastructure/reftest/reftest_fuzzy_chain_ini.html.ini
--- a/testing/web-platform/tests/interfaces/html.idl
+++ b/testing/web-platform/tests/interfaces/html.idl
@@ -74,17 +74,16 @@ partial interface Document {
   [CEReactions] Document open(optional DOMString unused1, optional DOMString unused2); // both arguments are ignored
   WindowProxy? open(USVString url, DOMString name, DOMString features);
   [CEReactions] void close();
   [CEReactions] void write(DOMString... text);
   [CEReactions] void writeln(DOMString... text);
 
   // user interaction
   readonly attribute WindowProxy? defaultView;
-  readonly attribute Element? activeElement;
   boolean hasFocus();
   [CEReactions] attribute DOMString designMode;
   [CEReactions] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
   boolean queryCommandEnabled(DOMString commandId);
   boolean queryCommandIndeterm(DOMString commandId);
   boolean queryCommandState(DOMString commandId);
   boolean queryCommandSupported(DOMString commandId);
   DOMString queryCommandValue(DOMString commandId);
@@ -92,16 +91,20 @@ partial interface Document {
   // special event handler IDL attributes that only apply to Document objects
   [LenientThis] attribute EventHandler onreadystatechange;
 
   // also has obsolete members
 };
 Document includes GlobalEventHandlers;
 Document includes DocumentAndElementEventHandlers;
 
+partial interface mixin DocumentOrShadowRoot {
+  readonly attribute Element? activeElement;
+};
+
 [Exposed=Window,
  HTMLConstructor]
 interface HTMLElement : Element {
   // metadata attributes
   [CEReactions] attribute DOMString title;
   [CEReactions] attribute DOMString lang;
   [CEReactions] attribute boolean translate;
   [CEReactions] attribute DOMString dir;
@@ -1597,17 +1600,17 @@ interface Window : EventTarget {
 
   // other browsing contexts
   [Replaceable] readonly attribute WindowProxy frames;
   [Replaceable] readonly attribute unsigned long length;
   [Unforgeable] readonly attribute WindowProxy? top;
   attribute any opener;
   [Replaceable] readonly attribute WindowProxy? parent;
   readonly attribute Element? frameElement;
-  WindowProxy? open(optional USVString url = "about:blank", optional DOMString target = "_blank", optional [TreatNullAs=EmptyString] DOMString features = "");
+  WindowProxy? open(optional USVString url = "", optional DOMString target = "_blank", optional [TreatNullAs=EmptyString] DOMString features = "");
   getter object (DOMString name);
   // Since this is the global object, the IDL named getter adds a NamedPropertiesObject exotic
   // object on the prototype chain. Indeed, this does not make the global object an exotic object.
   // Indexed access is taken care of by the WindowProxy exotic object.
 
   // the user agent
   readonly attribute Navigator navigator;
   [SecureContext] readonly attribute ApplicationCache applicationCache;
@@ -1808,17 +1811,16 @@ interface mixin GlobalEventHandlers {
   attribute EventHandler oninput;
   attribute EventHandler oninvalid;
   attribute EventHandler onkeydown;
   attribute EventHandler onkeypress;
   attribute EventHandler onkeyup;
   attribute EventHandler onload;
   attribute EventHandler onloadeddata;
   attribute EventHandler onloadedmetadata;
-  attribute EventHandler onloadend;
   attribute EventHandler onloadstart;
   attribute EventHandler onmousedown;
   [LenientThis] attribute EventHandler onmouseenter;
   [LenientThis] attribute EventHandler onmouseleave;
   attribute EventHandler onmousemove;
   attribute EventHandler onmouseout;
   attribute EventHandler onmouseover;
   attribute EventHandler onmouseup;
--- a/testing/web-platform/tests/interfaces/media-capabilities.idl
+++ b/testing/web-platform/tests/interfaces/media-capabilities.idl
@@ -36,16 +36,17 @@ dictionary VideoConfiguration {
   boolean hasAlphaChannel;
 };
 
 dictionary AudioConfiguration {
   required DOMString contentType;
   DOMString channels;
   unsigned long long bitrate;
   unsigned long samplerate;
+  boolean spatialRendering;
 };
 
 dictionary MediaCapabilitiesKeySystemConfiguration {
     required DOMString keySystem;
     DOMString initDataType = "";
     DOMString audioRobustness = "";
     DOMString videoRobustness = "";
     MediaKeysRequirement distinctiveIdentifier = "optional";
@@ -75,16 +76,17 @@ partial interface WorkerNavigator {
 };
 
 [Exposed=(Window, Worker)]
 interface MediaCapabilities {
   [NewObject] Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
   [NewObject] Promise<MediaCapabilitiesInfo> encodingInfo(MediaEncodingConfiguration configuration);
 };
 
+[Exposed=Window]
 interface ScreenLuminance {
   readonly attribute double min;
   readonly attribute double max;
   readonly attribute double maxAverage;
 };
 
 enum ScreenColorGamut {
   "srgb",
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-contents.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>display: contents</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
+<meta name="assert" content="Verify that display: contents computes to display: none">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/mathml-fragments.js"></script>
+<script>
+  setup({ explicit_done: true });
+  window.addEventListener("load", runTests);
+  function runTests() {
+      var container = document.getElementById("container");
+      for (tag in MathMLFragments) {
+          container.insertAdjacentHTML("beforeend", `<math>${MathMLFragments[tag]}</math>`);
+      }
+      test(function() {
+          Array.from(document.getElementsByClassName("element")).forEach(element => {
+              var style = window.getComputedStyle(element);
+              element.setAttribute("style", "display: contents");
+              assert_equals(style.getPropertyValue("display"), "none", `${tag}`);
+          });
+      }, "display: contents computes to display: none");
+      done();
+  }
+</script>
+</head>
+<body>
+  <div id="log"></div>
+  <div id="container">
+    <math class="element"></math>
+  </div>
+</body>
+</html>
--- a/testing/web-platform/tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
+++ b/testing/web-platform/tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
@@ -19,16 +19,17 @@
   function runTests() {
 
     for (tag in MathMLFragments) {
         if (!FragmentHelper.isValidChildOfMrow(tag) ||
             FragmentHelper.isEmpty(tag))
             continue;
         // TODO: Add floats too?
         ["display: none",
+         "display: contents",
          "position: absolute",
          "position: fixed"
         ].forEach(style => {
             document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
 <div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
 <div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
 </div>`);
             var div = document.body.lastElementChild;
--- a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-002.html
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-002.html
@@ -23,38 +23,41 @@
 
         var style = "border-left: 30px solid; border-right: 40px solid; border-top: 50px solid; border-bottom: 60px solid;";
 
         if (FragmentHelper.isEmpty(tag)) {
             test(function() {
                 var s = compareSizeWithAndWithoutStyle(tag, style);
                 assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "left/right border");
                 assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "top/bottom border");
+                assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
             }, `Border properties on ${tag}`);
             continue;
         }
 
         test(function() {
             var s = compareSpaceWithAndWithoutStyle(tag, style);
             assert_approx_equals(s.left_delta, 30, epsilon, "left border");
             assert_approx_equals(s.right_delta, 40, epsilon, "right border");
             assert_approx_equals(s.top_delta, 50, epsilon, "top border");
             assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom border");
             assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "element preferred width");
         }, `Border properties on ${tag}`);
 
         test(function() {
             var s = compareSpaceWithAndWithoutStyle(tag, style, null, "rtl");
             assert_approx_equals(s.left_delta, 30, epsilon, "left border");
             assert_approx_equals(s.right_delta, 40, epsilon, "right border");
             assert_approx_equals(s.top_delta, 50, epsilon, "top border");
             assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom border");
             assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "element preferred width");
         }, `Border properties on ${tag} (rtl)`);
     }
 
     done();
   }
 </script>
 </head>
 <body>
--- a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-002.html
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-002.html
@@ -25,50 +25,54 @@
 
         if (FragmentHelper.isEmpty(tag)) {
             test(function() {
                 var s = compareSizeWithAndWithoutStyle(tag, style);
                 assert_approx_equals(s.width_delta, 30 + 40, epsilon, "left/right margin");
                 assert_approx_equals(s.height_delta, 50 + 60, epsilon, "top/bottom margin");
                 assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
                 assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
+                assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
             }, `Margin properties on ${tag}`);
             continue;
         }
 
         test(function() {
             var s = compareSpaceWithAndWithoutStyle(tag, style);
             assert_approx_equals(s.left_delta, 30, epsilon, "left margin");
             assert_approx_equals(s.right_delta, 40, epsilon, "right margin");
             assert_approx_equals(s.top_delta, 50, epsilon, "top margin");
             assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom margin");
             assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
         }, `Margin properties on ${tag}`);
 
         test(function() {
             var s = compareSpaceWithAndWithoutStyle(tag, style, null, "rtl");
             assert_approx_equals(s.left_delta, 30, epsilon, "left margin");
             assert_approx_equals(s.right_delta, 40, epsilon, "right margin");
             assert_approx_equals(s.top_delta, 50, epsilon, "top margin");
             assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom margin");
             assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
         }, `Margin properties on ${tag} (rtl)`);
 
         test(function() {
             // Apply the same margin style on the parent mrow.
             // The margins are not collapsed so they should be added twice.
             var s = compareSpaceWithAndWithoutStyle(tag, style, style);
             assert_approx_equals(s.left_delta, 30 * 2, epsilon, "left margin");
             assert_approx_equals(s.right_delta, 40 * 2, epsilon, "right margin");
             assert_approx_equals(s.top_delta, 50 * 2, epsilon, "top margin");
             assert_approx_equals(s.bottom_delta, 60 * 2, epsilon, "bottom margin");
             assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, (30 + 40) * 2, epsilon, "preferred width");
         }, `Margin properties on ${tag} (no margin-collapsing)`);
     }
 
     done();
   }
 </script>
 </head>
 <body>
--- a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
@@ -23,38 +23,41 @@
 
         var style = "padding-left: 30px; padding-right: 40px;  padding-top: 50px; padding-bottom: 60px;";
 
         if (FragmentHelper.isEmpty(tag)) {
             test(function() {
                 var s = compareSizeWithAndWithoutStyle(tag, style);
                 assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "left/right padding");
                 assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "top/bottom padding");
+                assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
             }, `Padding properties on ${tag}`);
             continue;
         }
 
         test(function() {
             var s = compareSpaceWithAndWithoutStyle(tag, style);
             assert_approx_equals(s.left_delta, 30, epsilon, "left padding");
             assert_approx_equals(s.right_delta, 40, epsilon, "right padding");
             assert_approx_equals(s.top_delta, 50, epsilon, "top padding");
             assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom padding");
             assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
         }, `Padding properties on ${tag}`);
 
         test(function() {
             var s = compareSpaceWithAndWithoutStyle(tag, style, "rtl");
             assert_approx_equals(s.left_delta, 30, epsilon, "left padding");
             assert_approx_equals(s.right_delta, 40, epsilon, "right padding");
             assert_approx_equals(s.top_delta, 50, epsilon, "top padding");
             assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom padding");
             assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
             assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
+            assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
         }, `Padding properties on ${tag} (rtl)`);
     }
 
     done();
   }
 </script>
 </head>
 <body>
--- a/testing/web-platform/tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
@@ -1,30 +1,15 @@
 <!DOCTYPE html>
 <title>DocumentAndElementEventHandlers / clipboard events for MathML</title>
-<link
-  rel="help"
-  href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
-/>
-<link
-  rel="help"
-  href="https://html.spec.whatwg.org/multipage/webappapis.html#documentandelementeventhandlers"
-/>
-<link
-  rel="help"
-  href="https://w3c.github.io/clipboard-apis/#clipboard-event-copy"
-/>
-<link
-  rel="help"
-  href="https://w3c.github.io/clipboard-apis/#clipboard-event-cut"
-/>
-<link
-  rel="help"
-  href="https://w3c.github.io/clipboard-apis/#clipboard-event-paste"
-/>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/webappapis.html#documentandelementeventhandlers"/>
+<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-copy"/>
+<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-cut"/>
+<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-paste"/>
 <meta
   name="assert"
   content="MathMLElements incorporate a functional DocumentAndElementEventHandlers interface"
 />
 
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
--- a/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html
@@ -1,17 +1,14 @@
 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title>MathML 'ElementCSSInlineStyle` Mixin Tests</title>
-    <link
-      rel="help"
-      href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
-    />
+    <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
     <style>
       math * {
         background-color: red;
       }
     </style>
     <meta
       name="assert"
       content="MathMLElements incorporate a functional ElementCSSInlineStyle interface"
--- a/testing/web-platform/tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html
@@ -1,17 +1,14 @@
 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title>MathML 'HTMLOrForeignElement` Mixin Tests</title>
-    <link
-      rel="help"
-      href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
-    />
+    <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
     <style>
       mi {
         background-color: red;
       }
       :focus {
         background-color: rgb(0, 255, 0);
       }
     </style>
--- a/testing/web-platform/tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
@@ -1,23 +1,14 @@
 <!DOCTYPE html>
 <title>MathMLElement GlobalEventHandlers</title>
 <link rel="author" title="Brian Kardell" href="mailto:bkardell@igalia.com" />
-<link
-  rel="help"
-  href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
-/>
-<link
-  rel="help"
-  href="https://html.spec.whatwg.org/multipage/#event-handler-idl-attributes"
-/>
-<link
-  rel="help"
-  href="https://html.spec.whatwg.org/multipage/#event-handler-content-attributes"
-/>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#event-handler-idl-attributes"/>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#event-handler-content-attributes"/>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/WebIDLParser.js"></script>
 
 <script>
   "use strict";
   setup({ explicit_done: true });
 
--- a/testing/web-platform/tests/mathml/support/box-comparison.js
+++ b/testing/web-platform/tests/mathml/support/box-comparison.js
@@ -18,75 +18,89 @@ function measureSpaceAround(id) {
 function compareSpaceWithAndWithoutStyle(tag, style, parentStyle, direction) {
     if (!FragmentHelper.isValidChildOfMrow(tag) ||
         FragmentHelper.isEmpty(tag))
         throw `Invalid argument: ${tag}`;
 
     if (!direction)
       direction = "ltr";
     document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
-<math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math>\
-<math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math>\
+<div style="display: inline-block"><math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math></div>\
+<div style="display: inline-block"><math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math></div>\
 </div>`);
     var div = document.body.lastElementChild;
 
-    var styleMath = div.firstElementChild;
+    var styleDiv = div.firstElementChild;
+    var styleMath = styleDiv.firstElementChild;
     var styleParent = styleMath.firstElementChild;
     if (parentStyle)
         styleParent.setAttribute("style", parentStyle);
     var styleElement = FragmentHelper.element(styleMath);
     styleElement.setAttribute("style", style);
     var styleChild = FragmentHelper.forceNonEmptyElement(styleElement);
     var styleMathBox = styleMath.getBoundingClientRect();
     var styleElementBox = styleElement.getBoundingClientRect();
     var styleChildBox = styleChild.getBoundingClientRect();
     var styleSpace = spaceBetween(styleChildBox, styleMathBox);
 
-    var noStyleMath = div.lastElementChild;
+    var noStyleDiv = div.lastElementChild;
+    var noStyleMath = noStyleDiv.firstElementChild;
     var noStyleElement = FragmentHelper.element(noStyleMath);
     var noStyleChild = FragmentHelper.forceNonEmptyElement(noStyleElement);
     var noStyleMathBox = noStyleMath.getBoundingClientRect();
     var noStyleElementBox = noStyleElement.getBoundingClientRect();
     var noStyleChildBox = noStyleChild.getBoundingClientRect();
     var noStyleSpace = spaceBetween(noStyleChildBox, noStyleMathBox);
 
+    var preferredWidthDelta =
+        styleDiv.getBoundingClientRect().width -
+        noStyleDiv.getBoundingClientRect().width;
+
     div.style = "display: none;"; // Hide the div after measurement.
 
     return {
+        preferred_width_delta: preferredWidthDelta,
         left_delta: styleSpace.left - noStyleSpace.left,
         right_delta: styleSpace.right - noStyleSpace.right,
         top_delta: styleSpace.top - noStyleSpace.top,
         bottom_delta: styleSpace.bottom - noStyleSpace.bottom,
         element_width_delta: styleElementBox.width - noStyleElementBox.width,
         element_height_delta: styleElementBox.height - noStyleElementBox.height
     };
 }
 
 function compareSizeWithAndWithoutStyle(tag, style) {
     if (!FragmentHelper.isValidChildOfMrow(tag))
         throw `Invalid argument: ${tag}`;
 
     document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
-<math>${MathMLFragments[tag]}</math>\
-<math>${MathMLFragments[tag]}</math>\
+<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
+<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
 </div>`);
     var div = document.body.lastElementChild;
 
-    var styleMath = div.firstElementChild;
+    var styleDiv = div.firstElementChild;
+    var styleMath = styleDiv.firstElementChild;
     var styleElement = FragmentHelper.element(styleMath);
     styleElement.setAttribute("style", style);
     var styleMathBox = styleMath.getBoundingClientRect();
     var styleElementBox = styleElement.getBoundingClientRect();
 
-    var noStyleMath = div.lastElementChild;
+    var noStyleDiv = div.lastElementChild;
+    var noStyleMath = noStyleDiv.firstElementChild;
     var noStyleElement = FragmentHelper.element(noStyleMath);
     var noStyleMathBox = noStyleMath.getBoundingClientRect();
     var noStyleElementBox = noStyleElement.getBoundingClientRect();
 
+    var preferredWidthDelta =
+        styleDiv.getBoundingClientRect().width -
+        noStyleDiv.getBoundingClientRect().width;
+
     div.style = "display: none;"; // Hide the div after measurement.
 
     return {
+        preferred_width_delta: preferredWidthDelta,
         width_delta: styleMathBox.width - noStyleMathBox.width,
         height_delta: styleMathBox.height - noStyleMathBox.height,
         element_width_delta: styleElementBox.width - noStyleElementBox.width,
         element_height_delta: styleElementBox.height - noStyleElementBox.height
     };
 };
deleted file mode 100644
--- a/testing/web-platform/tests/media-source/idlharness.any.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// META: script=/resources/WebIDLParser.js
-// META: script=/resources/idlharness.js
-
-// https://w3c.github.io/media-source/
-
-'use strict';
-
-var mediaSource;
-var sourceBuffer;
-var video = document.createElement("video");
-
-promise_test(async t => {
-  const srcs = ['media-source', 'dom', 'html', 'url'];
-  const [idl, dom, html, url] = await Promise.all(
-      srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
-  var idlArray = new IdlArray();
-  idlArray.add_idls(idl);
-  idlArray.add_dependency_idls(dom);
-  idlArray.add_dependency_idls(html);
-  idlArray.add_dependency_idls(url);
-
-  const testIdls = new Promise(resolve => {
-    try {
-      mediaSource = new MediaSource();
-      video.src = URL.createObjectURL(mediaSource);
-      mediaSource.addEventListener("sourceopen", function () {
-        var defaultType ='video/webm;codecs="vp8,vorbis"';
-        if (MediaSource.isTypeSupported(defaultType)) {
-          sourceBuffer = mediaSource.addSourceBuffer(defaultType);
-        } else {
-          sourceBuffer = mediaSource.addSourceBuffer('video/mp4');
-        }
-        sourceBuffer.addEventListener("updateend", function (e) {
-          mediaSource.endOfStream();
-          resolve();
-        });
-        sourceBuffer.appendBuffer(new ArrayBuffer());
-      });
-    } catch (e) {
-      // Will be surfaced in idlharness.js's test_object below.
-    }
-  })
-
-  idlArray.add_objects({
-    MediaSource: ['mediaSource'],
-    SourceBuffer: ['sourceBuffer'],
-    SourceBufferList: ['mediaSource.sourceBuffers']
-  });
-
-  const timeout = new Promise((_, reject) => t.step_timeout(reject, 3000));
-  return Promise
-      .race([testIdls, timeout])
-      .then(() => { idlArray.test(); })
-      .catch(() => {
-        idlArray.test();
-        return Promise.reject('Failed to create media-source objects')
-      });
-}, 'media-source interfaces');
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/media-source/idlharness.window.js
@@ -0,0 +1,36 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/media-source/
+
+'use strict';
+
+idl_test(
+  ['media-source'],
+  ['dom', 'html', 'url'],
+  async idl_array => {
+    self.audio = document.createElement('audio');
+    self.video = document.createElement('video');
+    idl_array.add_objects({
+      MediaSource: ['mediaSource'],
+      SourceBuffer: ['sourceBuffer'],
+      SourceBufferList: ['mediaSource.sourceBuffers'],
+    });
+
+    const video = document.createElement('video');
+    self.mediaSource = new MediaSource();
+    video.src = URL.createObjectURL(mediaSource);
+
+    self.sourceBuffer = await new Promise((resolve, reject) => {
+      mediaSource.addEventListener('sourceopen', () => {
+        var defaultType = 'video/webm;codecs="vp8,vorbis"';
+        if (MediaSource.isTypeSupported(defaultType)) {
+          resolve(mediaSource.addSourceBuffer(defaultType));
+        } else {
+          resolve(mediaSource.addSourceBuffer('video/mp4'));
+        }
+      });
+      step_timeout(() => reject(new Error('sourceopen event not fired')), 3000);
+    });
+  }
+);
--- a/testing/web-platform/tests/mediacapture-depth/idlharness.html
+++ b/testing/web-platform/tests/mediacapture-depth/idlharness.html
@@ -1,31 +1,29 @@
 <!DOCTYPE html>
 <html>
 
 <head>
   <meta charset=utf-8>
   <title>Media Capture Depth Stream Extensions IDL test</title>
-  <link rel="help" href="See https://w3c.github.io/mediacapture-depth/">
+  <link rel="help" href="https://w3c.github.io/mediacapture-depth/">
   <script src="/resources/testharness.js"></script>
   <script src="/resources/testharnessreport.js"></script>
   <script src="/resources/WebIDLParser.js"></script>
   <script src="/resources/idlharness.js"></script>
 </head>
 
 <body>
   <script>
     'use strict';
 
-    promise_test(async () => {
-      const idl = await fetch('/interfaces/mediacapture-depth.idl').then(r => r.text());
-      const main = await fetch('/interfaces/mediacapture-streams.idl').then(r => r.text());
-
-      var idl_array = new IdlArray();
-      idl_array.add_idls(idl);
-      idl_array.add_dependency_idls(main);
-      idl_array.test();
-    }, 'mediacapture-depth interfaces');
+    idl_test(
+      ['mediacapture-depth'],
+      ['mediacapture-streams'],
+      idl_array => {
+        // No objects, spec defines dictionaries only.
+      }
+    );
   </script>
   <div id="log"></div>
 </body>
 
 </html>
--- a/testing/web-platform/tests/mediacapture-streams/idlharness.https.window.js
+++ b/testing/web-platform/tests/mediacapture-streams/idlharness.https.window.js
@@ -1,54 +1,48 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 'use strict';
 
 // https://w3c.github.io/mediacapture-main/
 
-
-promise_test(async () => {
-  const srcs = ['mediacapture-streams','dom','html'];
-  const [idl, dom, html] = await Promise.all(
-    srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
-  const idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(html);
-  idl_array.add_dependency_idls(dom);
+idl_test(
+  ['mediacapture-streams'],
+  ['dom', 'html'],
+  async idl_array => {
+    const inputDevices = [];
+    const outputDevices = [];
+    try {
+      const list = await navigator.mediaDevices.enumerateDevices();
+      for (const device of list) {
+        if (device.kind in self) {
+          continue;
+        }
+        assert_in_array(device.kind, ['audioinput', 'videoinput', 'audiooutput']);
+        self[device.kind] = device;
+        if (device.kind.endsWith('input')) {
+          inputDevices.push(device.kind);
+        } else {
+          outputDevices.push(device.kind);
+        }
+      }
+    } catch (e) {}
 
-  const devices = [];
-  // Errors will be surfaced in idlharness.js's test_object below.
-  try {
-    const list = await navigator.mediaDevices.enumerateDevices();
-    for (const item of list) {
-      switch (item.kind) {
-      case 'audioinput':
-      case 'videoinput':
-      case 'audiooutput':
-        self[item.kind] = item;
-        devices.push(item.kind);
-      default:
-        assert_unreached(
-          'media.kind should be one of "audioinput", "videoinput", or "audiooutput".');
-      }
-    }
-  } catch (e) {}
+    try {
+      self.stream = await navigator.mediaDevices.getUserMedia({audio: true});
+      self.track = stream.getTracks()[0];
+      self.trackEvent = new MediaStreamTrackEvent("type", {
+        track: track,
+      });
+    } catch (e) {}
 
-  try {
-    self.stream = await navigator.mediaDevices.getUserMedia({audio: true});
-    self.track = stream.getTracks()[0];
-    self.trackEvent = new MediaStreamTrackEvent("type", {
-      track: track,
+    idl_array.add_objects({
+      InputDeviceInfo: inputDevices,
+      MediaStream: ['stream', 'new MediaStream()'],
+      Navigator: ['navigator'],
+      MediaDevices: ['navigator.mediaDevices'],
+      MediaDeviceInfo: outputDevices,
+      MediaStreamTrack: ['track'],
+      MediaStreamTrackEvent: ['trackEvent'],
     });
-  } catch (e) { throw e}
-
-  idl_array.add_objects({
-    InputDeviceInfo: devices,
-    MediaStream: ['stream', 'new MediaStream()'],
-    Navigator: ['navigator'],
-    MediaDevices: ['navigator.mediaDevices'],
-    MediaStreamTrack: ['track'],
-    MediaStreamTrackEvent: ['trackEvent'],
-  });
-  idl_array.test();
-}, 'mediacapture-streams interfaces.');
+  }
+);
--- a/testing/web-platform/tests/orientation-event/idlharness.https.window.js
+++ b/testing/web-platform/tests/orientation-event/idlharness.https.window.js
@@ -1,23 +1,18 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 // https://w3c.github.io/deviceorientation/spec-source-orientation.html
 
 'use strict';
 
-promise_test(async () => {
-  const idl = await fetch('/interfaces/orientation-event.idl').then(r => r.text());
-  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
-  const html = await fetch('/interfaces/html.idl').then(r => r.text());
-
-  var idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(html);
-  idl_array.add_dependency_idls(dom);
-  idl_array.add_objects({
-    Window: ['window'],
-    DeviceOrientationEvent: ['new DeviceOrientationEvent("foo")'],
-    DeviceMotionEvent: ['new DeviceMotionEvent("foo")'],
-  });
-  idl_array.test();
-}, 'orientation-event interfaces');
+idl_test(
+  ['orientation-event'],
+  ['html', 'dom'],
+  idl_array => {
+    idl_array.add_objects({
+      Window: ['window'],
+      DeviceOrientationEvent: ['new DeviceOrientationEvent("foo")'],
+      DeviceMotionEvent: ['new DeviceMotionEvent("foo")'],
+    });
+  }
+);
--- a/testing/web-platform/tests/permissions/interfaces.any.js
+++ b/testing/web-platform/tests/permissions/interfaces.any.js
@@ -1,41 +1,27 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
-"use strict";
-
-if (self.importScripts) {
-  importScripts("/resources/testharness.js");
-  importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js");
-}
-
 // https://w3c.github.io/permissions/#idl-index
 
-promise_test(async () => {
-  const idl = await fetch("/interfaces/permissions.idl").then(r => r.text());
-  const dom = await fetch("/interfaces/dom.idl").then(r => r.text());
-  const html = await fetch("/interfaces/html.idl").then(r => r.text());
+"use strict";
 
-  const idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(dom);
-  idl_array.add_dependency_idls(html);
+idl_test(
+  ['permissions'],
+  ['html', 'dom'],
+  async idl_array => {
+    try {
+      self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
+    } catch (e) {}
 
-  try {
-    self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
-    self.permissionStatus = await navigator.permissions.query({ name: "background-fetch" });
-  } catch (e) {
-    // Will be surfaced in idlharness.js's test_object below.
-  }
+    if (self.GLOBAL.isWorker()) {
+      idl_array.add_objects({ WorkerNavigator: ['navigator'] });
+    } else {
+      idl_array.add_objects({ Navigator: ['navigator'] });
+    }
 
-  if (self.GLOBAL.isWorker()) {
-    idl_array.add_objects({ WorkerNavigator: ['navigator'] });
-  } else {
-    idl_array.add_objects({ Navigator: ['navigator'] });
+    idl_array.add_objects({
+      Permissions: ['navigator.permissions'],
+      PermissionStatus: ['permissionStatus']
+    });
   }
-
-  idl_array.add_objects({
-    Permissions: ['navigator.permissions'],
-    PermissionStatus: ['permissionStatus']
-  });
-  idl_array.test();
-}, "Test IDL implementation of Permissions API");
+);
--- a/testing/web-platform/tests/referrer-policy/generic/referrer-policy-test-case.sub.js
+++ b/testing/web-platform/tests/referrer-policy/generic/referrer-policy-test-case.sub.js
@@ -124,65 +124,73 @@ function ReferrerPolicyTestCase(scenario
       url: urls.testUrl,
       policyDeliveries: [delivery]
     };
 
     let currentURL = location.toString();
     const expectedReferrer =
       referrerUrlResolver[scenario.referrer_url](currentURL);
 
-    function asyncResolve(result) {
-      return new Promise((resolve, reject) => {
-        step_timeout(() => resolve(result), 0);
-      });
+    function historyBackPromise(t, scenario) {
+      history.back();
+      return new Promise(resolve => {
+          // Wait for completion of `history.back()` by listening the
+          // popstate events that are fired near the end of
+          // `history.back()` processing.
+          window.addEventListener('popstate', resolve, {once: true});
+
+          // Workaround for Safari: Waiting for popstate events causes
+          // timeout in a-tag tests. To avoid timeout, we anyway resolve
+          // the promise.
+          if (scenario.subresource === 'a-tag') {
+            t.step_timeout(resolve, 1000);
+          }
+        });
     }
 
     // Request in the top-level document.
     promise_test(_ => {
       return invokeRequest(subresource, [])
         .then(result => checkResult(expectedReferrer, result));
     }, testDescription);
 
     // `Referer` headers with length over 4k are culled down to an origin, so, let's test around
     // that boundary for tests that would otherwise return the complete URL.
     if (scenario.referrer_url == "stripped-referrer") {
-      promise_test(_ => {
+      promise_test(t => {
         history.pushState(null, null, "/");
         history.replaceState(null, null, "A".repeat(4096 - location.href.length - 1));
         const expectedReferrer = location.href;
         // Ensure that we don't load the same URL as the previous test.
         subresource.url += "&-1";
         return invokeRequest(subresource, [])
           .then(result => checkResult(location.href, result))
-          .then(_ => history.back())
-          .then(asyncResolve);
+          .finally(_ => historyBackPromise(t, scenario));
       }, "`Referer` header with length < 4k is not stripped to an origin.");
 
-      promise_test(_ => {
+      promise_test(t => {
         history.pushState(null, null, "/");
         history.replaceState(null, null, "A".repeat(4096 - location.href.length));
         const expectedReferrer = location.href;
         // Ensure that we don't load the same URL as the previous test.
         subresource.url += "&0";
         return invokeRequest(subresource, [])
           .then(result => checkResult(expectedReferrer, result))
-          .then(_ => history.back())
-          .then(asyncResolve);
+          .finally(_ => historyBackPromise(t, scenario));
       }, "`Referer` header with length == 4k is not stripped to an origin.");
 
-      promise_test(_ => {
+      promise_test(t => {
         const originString = referrerUrlResolver["origin"](currentURL);
         history.pushState(null, null, "/");
         history.replaceState(null, null, "A".repeat(4096 - location.href.length + 1));
         // Ensure that we don't load the same URL as the previous test.
         subresource.url += "&+1";
         return invokeRequest(subresource, [])
           .then(result => checkResult(originString, result))
-          .then(_ => history.back())
-          .then(asyncResolve);
+          .finally(_ => historyBackPromise(t, scenario));
       }, "`Referer` header with length > 4k is stripped to an origin.");
     }
 
     // We test requests from inside iframes only for <img> tags.
     // This is just to preserve the previous test coverage.
     // TODO(hiroshige): Enable iframe tests for all subresource types.
     if (scenario.subresource !== "img-tag") {
       return;
--- a/testing/web-platform/tests/requestidlecallback/idlharness.window.js
+++ b/testing/web-platform/tests/requestidlecallback/idlharness.window.js
@@ -1,30 +1,24 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
-async_test(function() {
-  const srcs = ['requestidlecallback', 'html', 'dom'];
-  Promise.all(srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())))
-    .then(([idl, html, dom]) => {
-      var idl_array = new IdlArray();
-      idl_array.add_idls(idl);
-      idl_array.add_dependency_idls(html);
-      idl_array.add_dependency_idls(dom);
-      idl_array.add_objects({Window: ['window']});
+// https://w3c.github.io/requestidlecallback/
+
+'use strict';
 
-      let deadline;
-      const execIDLTest = this.step_func_done(function() {
-        idl_array.add_objects({IdleDeadline: [deadline]});
-        idl_array.test();
-      });
+idl_test(
+  ['requestidlecallback'],
+  ['html', 'dom'],
+  async idl_array => {
+    idl_array.add_objects({
+      IdleDeadline: ['deadline'],
+      Window: ['window'],
+    });
 
-      if (!window.requestIdleCallback) {
-        execIDLTest();
-      } else {
-        const callback = this.step_func(d => {
-          deadline = d;
-          execIDLTest();
-        });
-        requestIdleCallback(callback, { timeout: 100 });
-      }
+    await new Promise(resolve => {
+      requestIdleCallback(d => {
+        self.deadline = d;
+        resolve();
+      }, { timeout: 100 });
     });
-}, 'IdleDeadline object setup');
+  }
+);
--- a/testing/web-platform/tests/server-timing/idlharness.https.any.js
+++ b/testing/web-platform/tests/server-timing/idlharness.https.any.js
@@ -1,21 +1,16 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 'use strict';
 
 // https://w3c.github.io/server-timing/
 
-promise_test(async () => {
-  const idl = await fetch('/interfaces/server-timing.idl').then(r => r.text());
-  const res = await fetch('/interfaces/resource-timing.idl').then(r => r.text());
-  const perf = await fetch('/interfaces/performance-timeline.idl').then(r => r.text());
-
-  const idl_array = new IdlArray();
-  idl_array.add_idls(idl);
-  idl_array.add_dependency_idls(res);
-  idl_array.add_dependency_idls(perf);
-  idl_array.add_objects({
-    Performance: ['performance'],
-  });
-  idl_array.test();
-}, 'Test server-timing IDL implementation');
+idl_test(
+  ['server-timing'],
+  ['resource-timing', 'performance-timeline'],
+  idl_array => {
+    idl_array.add_objects({
+      Performance: ['performance'],
+    });
+  }
+);
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -1,11 +1,12 @@
 import json
 import os
 import socket
+import sys
 import threading
 import time
 import traceback
 import urlparse
 import uuid
 
 from .base import (CallbackHandler,
                    RefTestExecutor,
@@ -227,20 +228,24 @@ class WebDriverProtocol(Protocol):
         capabilities = {"alwaysMatch": self.capabilities}
         self.webdriver = client.Session(host, port, capabilities=capabilities)
         self.webdriver.start()
 
 
     def teardown(self):
         self.logger.debug("Hanging up on WebDriver session")
         try:
-            self.webdriver.quit()
-        except Exception:
-            pass
-        del self.webdriver
+            self.webdriver.end()
+        except Exception as e:
+            message = str(getattr(e, "message", ""))
+            if message:
+                message += "\n"
+            message += traceback.format_exc(e)
+            self.logger.debug(message)
+        self.webdriver = None
 
     def is_alive(self):
         try:
             # Get a simple property over the connection
             self.webdriver.window_handle
         except (socket.timeout, client.UnknownErrorException):
             return False
         return True
@@ -272,17 +277,20 @@ class WebDriverRun(object):
 
         flag = self.result_flag.wait(timeout + 2 * extra_timeout)
         if self.result is None:
             if flag:
                 # flag is True unless we timeout; this *shouldn't* happen, but
                 # it can if self._run fails to set self.result due to raising
                 self.result = False, ("INTERNAL-ERROR", "self._run didn't set a result")
             else:
-                self.result = False, ("EXTERNAL-TIMEOUT", None)
+                message = "Waiting on browser:\n"
+                # get a traceback for the current stack of the executor thread
+                message += "".join(traceback.format_stack(sys._current_frames()[executor.ident]))
+                self.result = False, ("EXTERNAL-TIMEOUT", message)
 
         return self.result
 
     def _run(self):
         try:
             self.result = True, self.func(self.protocol, self.url, self.timeout)
         except (client.TimeoutException, client.ScriptTimeoutException):
             self.result = False, ("EXTERNAL-TIMEOUT", None)
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/webdriver_server.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/webdriver_server.py
@@ -76,16 +76,17 @@ class WebDriverServer(object):
                 "WebDriver was not accessible "
                 "within the timeout:\n%s" % traceback.format_exc())
             raise
 
         if block:
             self._proc.wait()
 
     def stop(self, force=False):
+        self.logger.debug("Stopping WebDriver")
         if self.is_alive:
             return self._proc.kill()
         return not self.is_alive
 
     @property
     def is_alive(self):
         return hasattr(self._proc, "proc") and self._proc.poll() is None
 
--- a/testing/web-platform/tests/trusted-types/GlobalEventHandlers-onclick.tentative.html
+++ b/testing/web-platform/tests/trusted-types/GlobalEventHandlers-onclick.tentative.html
@@ -3,21 +3,90 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support/helper.sub.js"></script>
 
 <meta http-equiv="Content-Security-Policy" content="trusted-types *">
 <body>
 <div id="container"></div>
 <script>
 var container = document.querySelector('#container');
+const policy = createScript_policy(window, 'onclick');
+const policy_html = createHTML_policy(window, 'onclick-html');
 
 // Trusted Type assignments do not throw.
 async_test(t => {
-  window.onclickTest = t.step_func_done();
-  let policy = createScript_policy(window, 'onclick');
-  let script = policy.createScript("window.onclickTest();");
-
+  window.onclickDone1 = t.step_func_done();
+  let script = policy.createScript("window.onclickDone1();");
   let el = document.createElement('a');
   el.setAttribute('onclick', script);
   container.appendChild(el);
   el.click();
+}, "a.setAttribte('onclick') sets a trusted script.");
+
+// Unsuitable TrustedType assignments do throw.
+async_test(t => {
+  window.onclickFail1 = t.unreached_func();
+  let script = policy_html.createHTML("window.onclickFail1();");
+  let el = document.createElement('a');
+  try {
+    el.setAttribute('onclick', script);
+    container.appendChild(el);
+    el.click();
+  } catch (e) {
+    t.done();
+  }
+  assert_unreached();
+}, "a.setAttribute('onclick') sets an unsuitable trusted type.");
+
+// So do plain test assignments.
+async_test(t => {
+  window.onclickFail2 = t.unreached_func();
+  let el = document.createElement('a');
+  try {
+    el.setAttribute("onclick", "window.onclickFail2();");
+    container.appendChild(el);
+    el.click();
+  } catch (e) {
+    t.done();
+  }
+  assert_unreached();
+}, "a.setAttribute('click') sets a test string.");
+/*
+// Trusted Type assignments via property access does not throw.
+async_test(t => {
+  window.onclickDone2 = t.step_func_done();
+  let script = policy.createScript("window.onclickDone2();");
+  let el = document.createElement('a');
+  el.onclick = script;
+  container.appendChild(el);
+  el.click();
 }, "a.onclick assigned via policy (successful Script transformation).");
+
+// Unsuitable TrustedType assignments do throw.
+async_test(t => {
+  window.onclickFail3 = t.unreached_func();
+  let script = policy_html.createHTML("window.onclickFail3();");
+  let el = document.createElement('a');
+  try {
+    el.onclick = script;
+    container.appendChild(el);
+    el.click();
+  } catch (e) {
+    t.done();
+  }
+  assert_unreached();
+}, "a.onclick assigned via an unsuitable policy.");
+
+// So do plain test assignments.
+async_test(t => {
+  window.onclickFail4 = t.unreached_func();
+  let el = document.createElement('a');
+  try {
+    el.onclick = window.onclickFail4();
+    container.appendChild(el);
+    el.click();
+  } catch (e) {
+    t.done();
+  }
+  assert_unreached();
+}, "a.onclick assigned a test string.");
+*/
 </script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/trusted-types/TrustedTypePolicyFactory-getPropertyType.tentative.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+
+<meta http-equiv="Content-Security-Policy" content="trusted-types *">
+<body>
+<div id="target"></div>
+<script>
+  test(t => {
+    assert_equals(TrustedTypes.getPropertyType("a", "href"), "TrustedURL");
+    assert_equals(TrustedTypes.getPropertyType("a", "id"), null);
+    assert_equals(TrustedTypes.getPropertyType("a", "b"), null);
+  }, "sanity check TrustedTypes.getPropertyType for the HTML a element.");
+
+  test(t => {
+    assert_equals(TrustedTypes.getAttributeType("img", "onerror"), "TrustedScript");
+    assert_equals(TrustedTypes.getAttributeType("img", "width"), null);
+    assert_equals(TrustedTypes.getAttributeType("img", "madeup"), null);
+  }, "sanity check TrustedTypes.getAttributeType.");
+
+  test(t => {
+    assert_true(!!TrustedTypes.getTypeMapping());
+  }, "sanity check TrustedTypes.getTypeMapping");
+
+
+  // getPropertyType tests adapted from WICG/trusted-types polyfill:
+  test(t => {
+    // returns the proper type for attribute-related properties
+    assert_equals(TrustedTypes.getPropertyType("script", "src"), "TrustedScriptURL");
+    assert_equals(TrustedTypes.getPropertyType("img", "src"), "TrustedURL");
+
+    // is case insensitive for tag names
+    assert_equals(TrustedTypes.getPropertyType("SCRIPT", "src"), "TrustedScriptURL");
+    assert_equals(TrustedTypes.getPropertyType("ImG", "src"), "TrustedURL");
+
+    // is case sensitive for property names
+    assert_equals(TrustedTypes.getPropertyType("script", "sRc"), null);
+    assert_equals(TrustedTypes.getPropertyType("div", "innerhtml"), null);
+
+    // returns the proper type for innerHTML
+    assert_equals(TrustedTypes.getPropertyType("div", "innerHTML"), "TrustedHTML");
+
+    // returns the proper type for outerHTML
+    assert_equals(TrustedTypes.getPropertyType("div", "outerHTML"), "TrustedHTML");
+
+    // returns the proper type for script.prop
+    ["text", "innerText", "textContent"].forEach((prop) => {
+      assert_equals(TrustedTypes.getPropertyType("script", prop), "TrustedScript");
+    });
+  }, "getPropertyType tests adapted from WICG/trusted-types polyfill");
+
+  test(t => {
+    // returns the proper type
+    assert_equals(TrustedTypes.getAttributeType('script', 'src'), 'TrustedScriptURL');
+    assert_equals(TrustedTypes.getAttributeType('img', 'src'), 'TrustedURL');
+
+    // ignores attributes from unknown namespaces
+    assert_equals(TrustedTypes.getAttributeType(
+          'a', 'href', '', 'http://foo.bar'), null);
+
+    // is case insensitive for element names
+    assert_equals(TrustedTypes.getAttributeType('SCRIPT', 'src'), 'TrustedScriptURL');
+    assert_equals(TrustedTypes.getAttributeType('imG', 'src'), 'TrustedURL');
+
+    // is case insensitive for the attribute names
+    assert_equals(TrustedTypes.getAttributeType('script', 'SRC'), 'TrustedScriptURL');
+    assert_equals(TrustedTypes.getAttributeType('imG', 'srC'), 'TrustedURL');
+
+    // supports the inline event handlers
+    assert_equals(TrustedTypes.getAttributeType('img', 'onerror'), 'TrustedScript');
+    assert_equals(TrustedTypes.getAttributeType('unknown', 'onerror'), 'TrustedScript');
+
+    // defaults to undefined
+    assert_equals(TrustedTypes.getAttributeType('unknown', 'src'), null);
+    assert_equals(TrustedTypes.getAttributeType('img', 'bar'), null);
+  }, "getAttributeType tests adapted from WICG/trusted-types polyfill");
+
+
+  test(t=> {
+    const map = TrustedTypes.getTypeMapping();
+
+    // Spot testing some values.
+    assert_equals(map["script"].attributes.src, "TrustedScriptURL");
+    assert_equals(map["img"].attributes.src, "TrustedURL");
+    assert_equals(map["*"].properties.innerHTML, "TrustedHTML");
+    assert_equals(map["foo"], undefined);
+
+    // getTypeMapping returns a 'clean' object, in case the return value has
+    // been modified.
+    map["*"].attributes["foo"] = "bar";
+    assert_equals(TrustedTypes.getTypeMapping()["*"].attributes["foo"], undefined);
+;
+    // Unknown namespaces:
+    assert_equals(TrustedTypes.getTypeMapping("http://foo/bar"), undefined);
+  }, "getTypeMapping tests adapted from WICG/trusted-types polyfill");
+
+  // Test case handling for both attributes and properties.
+  for (let attr of ["codeBase", "CODEBASE", "codebase"]) {
+    for (let elem of ["object", "OBJECT", "oBjEcT"]) {
+      test(t => {
+        // attributes are case-insensitive, so all variants should be defined.
+        assert_true(TrustedTypes.getAttributeType(elem, attr) != undefined);
+      }, `${elem}[${attr}] is defined`);
+      test(t => {
+        // properties are case-sensitive, so only the "correct" spelling
+        // should be defined.
+        assert_equals(TrustedTypes.getPropertyType(elem, attr) != undefined,
+                      attr == "codeBase");
+      }, `${elem}.${attr} is maybe defined`);
+    }
+  }
+</script>
+</body>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/trusted-types/TrustedTypePolicyFactory-metadata.tentative.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+
+<meta http-equiv="Content-Security-Policy" content="trusted-types *">
+<body>
+<div id="target"></div>
+<script>
+
+  const policy = TrustedTypes.createPolicy("anythinggoes", {
+    "createHTML": x => x,
+    "createScript": x => x,
+    "createURL": x => x,
+    "createScriptURL": x => x,
+  });
+
+  const create_value = {
+    "TrustedHTML": policy.createHTML("hello"),
+    "TrustedScript": policy.createScript("x => x + x"),
+    "TrustedURL": policy.createURL("https://url.invalid/"),
+    "TrustedScriptURL": policy.createScriptURL("https://url.invalid/blubb.js"),
+    null: "empty",
+  };
+
+  // The tests will assign all values to all sink types. To prevent spurious
+  // errors when assigning "hello" to a script sink, we'll just define a
+  // varaible of that name.
+  const hello = "";
+
+  // We seed our elements and properties with one element/property that has no
+  // 'trusted type' sinks, and one non-specced (madeup) element/property.
+  // Also add several event handlers (onclick).
+  let elements = ['madeup', 'b'];
+  let properties = ['madeup', 'id', "onerror", "onclick"];
+  const types = [null, "TrustedHTML", "TrustedScript", "TrustedScriptURL",
+                 "TrustedURL"];
+
+  // We'll wrap construction of the elements/properties list in a test, mainly
+  // so we'll get decent error messages when it might fail.
+  test(t => {
+    // Collect all element and property names from getTypeMapping().
+    const map = TrustedTypes.getTypeMapping();
+    for (let elem in map) {
+      elements.push(elem);
+      properties = properties.concat(Object.keys(map[elem].properties));
+    }
+
+    // Remove "*" entries and de-duplicate properties.
+    elements = elements.filter(s => !s.includes("*"));
+    properties = properties.filter(s => !s.includes("*"));
+    properties = Array.from(new Set(properties));
+  }, "Prepare parameters for generic test series below.");
+
+  // Iterate one test for each combination of element, property, and sink type.
+  const target = document.getElementById("target");
+  for (elem of elements) {
+    for (property of properties) {
+      for (type of types) {
+        // Conceptually, our test is beautifully simple: Ask getPropertyType
+        // about the expected trusted type. If it's the one we're testing,
+        // expect the assignment to pass, and expect we can read back the same
+        // value. If it's a different type, expect the assignment to fail.
+        //
+        // The idealized test case would look something like this:
+        //   const value = ....;
+        //   const test_fn = _ => { element[property] = value };
+        //   if (type == expected_type || !expected_type) {
+        //     test_fn();
+        //     assert_equals(element[property], value);
+        //   } else {
+        //     assert_throws(..., test_fn, ...);
+        //   }
+        //
+        // Below is the same logic, but extended to handle the various edge
+        // cases.
+        //
+        // Some difficulties we need to accomodate:
+        // - Some properties have built-in behaviours. (E.g. the "innerHTML"
+        //   value depends on whether elements are visible or not.) To
+        //   accomodate this, we have a big switch-statement that handles
+        //   those types of exceptions.
+        // - Some properties parse their values, so that you can't easily get
+        //   the original text value back (e.g. error handlers).
+        // - Some properties cause actions as side-effects (e.g. loading a
+        //   script), which will cause errors in the test (despite the actual
+        //   code-under-test meeting our expectations). This is handled with
+        //   a cleanup script which removes the element (and thus cancels
+        //   the loading actions).
+        test(t => {
+          const element = target.appendChild(document.createElement(elem));
+          t.add_cleanup(_ => element.remove());
+          const expected_type = TrustedTypes.getPropertyType(elem, property);
+          const value = create_value[type];
+          const test_fn = _ => { element[property] = value; };
+          if (type == expected_type || !expected_type) {
+            test_fn();
+            let result_value = element[property];
+            switch (property) {
+              // Node.innerText returns the rendered text of an Element, which
+              // in this test case is usually empty. For this specific case,
+              // let's just check "textContent" instead.
+              // Node.innerHTML re-creates a text representation from the DOM,
+              // which may not always match the exact input.
+              case "innerText":
+              case "innerHTML":
+                result_value = element["textContent"];
+                break;
+              // Node.outerHTML replaces the node, which means the simple
+              // checking logic below does not work. In this case, we'll just
+              // return and hence skip the result comparison.
+              case "outerHTML":
+                return;
+              // Properties starting with "on" are usually error handlers,
+              // which will parse their input as a function. In this case,
+              // also skip the result comparison.
+              default:
+                if (property.startsWith("on")) return;
+                break;
+            }
+            assert_equals("" + result_value, "" + value);
+          } else {
+            assert_throws(new TypeError(), test_fn, "throws");
+          }
+        }, `Test assignment of ${type ? type : "string"} on ${elem}.${property}`);
+
+        // And once more, for attributes.
+        test(t => {
+          const element = target.appendChild(document.createElement(elem));
+          t.add_cleanup(_ => element.remove());
+          const expected_type = TrustedTypes.getAttributeType(elem, property);
+          const value = create_value[type];
+          const test_fn = _ => { element.setAttribute(property, value); };
+          if (type == expected_type || !expected_type) {
+            test_fn();
+            assert_equals("" + element.getAttribute(property), "" + value);
+          } else {
+            assert_throws(new TypeError(), test_fn, "throws");
+          }
+        }, `Test assignment of ${type ? type : "string"} on ${elem}.setAttribute(${property},..)`);
+      }
+    }
+  }
+
+</script>
+</body>
--- a/testing/web-platform/tests/webdriver/tests/permissions/set.py
+++ b/testing/web-platform/tests/webdriver/tests/permissions/set.py
@@ -25,17 +25,18 @@ def query(session, name):
     { "descriptor": { }, "state": "granted" },
     { "descriptor": { "name": "geolocation" }, "state": "Granted" },
     { "descriptor": 23, "state": "granted" },
     { "descriptor": "geolocation", "state": "granted" },
     { "descriptor": [ { "name": "geolocation" } ], "state": "granted" },
     [ { "descriptor": { "name": "geolocation" }, "state": "granted" } ],
     { "descriptor": { "name": "geolocation" }, "state": "granted", "oneRealm": 23 }
 ])
-def test_invalid_parameters(session, parameters):
+def test_invalid_parameters(session, url, parameters):
+    session.url = url("/common/blank.html", protocol="https")
     response = session.transport.send(
         "POST",
         "/session/{session_id}/permissions".format(**vars(session)),
         parameters
     )
     assert_error(response, "invalid argument")
 
 # > 6. If settings is a non-secure context and rootDesc.name isn't allowed in
@@ -52,17 +53,18 @@ def test_non_secure_context(session, url
     assert_error(response, "invalid argument")
 
 @pytest.mark.parametrize("state", ["granted", "denied", "prompt"])
 @pytest.mark.parametrize("realmSetting", [
     { "oneRealm": True },
     { "oneRealm": False },
     {}
 ])
-def test_set_to_state(session, state, realmSetting):
+def test_set_to_state(session, url, state, realmSetting):
+    session.url = url("/common/blank.html", protocol="https")
     parameters = { "descriptor": { "name": "geolocation" }, "state": state }
     parameters.update(realmSetting)
     response = session.transport.send(
         "POST", "/session/{session_id}/permissions".format(**vars(session)),
         parameters
     )
 
     try:
@@ -90,19 +92,21 @@ def test_set_to_state(session, state, re
 # >    objects whose origin is the same as the origin of settings.
 #
 # Ensure that all realms are affected when `oneRealm` is not enabled.
 @pytest.mark.parametrize("state", ["granted", "denied", "prompt"])
 @pytest.mark.parametrize("realmSetting", [
     { "oneRealm": False },
     {}
 ])
-def test_set_to_state_cross_realm(session, create_window, state, realmSetting):
+def test_set_to_state_cross_realm(session, create_window, url, state, realmSetting):
+    session.url = url("/common/blank.html", protocol="https")
     original_window = session.window_handle
     session.window_handle = create_window()
+    session.url = url("/common/blank.html", protocol="https")
     parameters = { "descriptor": { "name": "geolocation" }, "state": state }
     parameters.update(realmSetting)
 
     response = session.transport.send(
         "POST", "/session/{session_id}/permissions".format(**vars(session)),
         parameters
     )
 
--- a/testing/web-platform/tests/webgpu/framework/version.js
+++ b/testing/web-platform/tests/webgpu/framework/version.js
@@ -1,3 +1,3 @@
 // AUTO-GENERATED - DO NOT EDIT. See tools/gen_version.
 
-export const version = '84ef21bec576c9272e64e08727dbdf75a2b0e9d8';
+export const version = 'f690ac56a3291801e817433f43877132bb531d5f';
--- a/testing/web-platform/tests/webgpu/suites/cts/command_buffer/render/basic.spec.js
+++ b/testing/web-platform/tests/webgpu/suites/cts/command_buffer/render/basic.spec.js
@@ -17,17 +17,17 @@ g.test('clear', async t => {
     format: 'rgba8unorm',
     size: {
       width: 1,
       height: 1,
       depth: 1
     },
     usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.OUTPUT_ATTACHMENT
   });
-  const colorAttachmentView = colorAttachment.createDefaultView();
+  const colorAttachmentView = colorAttachment.createView();
   const encoder = t.device.createCommandEncoder({});
   const pass = encoder.beginRenderPass({
     colorAttachments: [{
       attachment: colorAttachmentView,
       loadValue: {
         r: 0.0,
         g: 1.0,
         b: 0.0,
--- a/testing/web-platform/tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js
+++ b/testing/web-platform/tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js
@@ -15,17 +15,17 @@ g.test('fullscreen quad', async t => {
     format: 'rgba8unorm',
     size: {
       width: 1,
       height: 1,
       depth: 1
     },
     usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.OUTPUT_ATTACHMENT
   });
-  const colorAttachmentView = colorAttachment.createDefaultView();
+  const colorAttachmentView = colorAttachment.createView();
   const vertexModule = t.device.createShaderModule({
     code:
     /* GLSL(
      *       'vertex',
      *       `#version 310 es
      *         void main() {
      *           const vec2 pos[3] = vec2[3](
      *               vec2(-1.f, -3.f), vec2(3.f, 1.f), vec2(-1.f, 1.f));
new file mode 100755
--- /dev/null
+++ b/testing/web-platform/tests/websockets/handlers/receive-backpressure_wsh.py
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+
+import time
+
+
+def web_socket_do_extra_handshake(request):
+    # Turn off permessage-deflate, otherwise it shrinks our 8MB buffer to 8KB.
+    request.ws_extension_processors = []
+
+
+def web_socket_transfer_data(request):
+    # Wait two seconds to cause backpressure.
+    time.sleep(2);
+    request.ws_stream.receive_message()
new file mode 100755
--- /dev/null
+++ b/testing/web-platform/tests/websockets/handlers/send-backpressure_wsh.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+
+import time
+
+# The amount of buffering a WebSocket connection has is not standardised, but
+# it's reasonable to expect that it will not be as large as 8MB.
+MESSAGE_SIZE = 8 * 1024 * 1024
+
+
+def web_socket_do_extra_handshake(request):
+    # Turn off permessage-deflate, otherwise it shrinks our 8MB buffer to 8KB.
+    request.ws_extension_processors = []
+
+
+def web_socket_transfer_data(request):
+    # TODO(ricea@chromium.org): Use time.perf_counter() when migration to python
+    # 3 is complete. time.time() can go backwards.
+    start_time = time.time()
+    request.ws_stream.send_message(b' ' * MESSAGE_SIZE, binary=True)
+    request.ws_stream.send_message(str(time.time() - start_time), binary=False)
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/websockets/stream-tentative/backpressure-receive.any.js
@@ -0,0 +1,29 @@
+// META: script=../websocket.sub.js
+// META: script=resources/url-constants.js
+// META: global=window,worker
+// META: timeout=long
+
+// This test works by using a server WebSocket handler which sends an 8MB
+// message, and then sends a second message with the time it measured the first
+// message taking. On the browser side, we wait 2 seconds before reading from
+// the socket. This should ensure it takes at least 2 seconds to finish sending
+// the 8MB message.
+promise_test(async t => {
+  const wss = new WebSocketStream(`${BASEURL}/send-backpressure`);
+  const { readable } = await wss.connection;
+  const reader = readable.getReader();
+
+  // Create backpressure for 2 seconds.
+  await new Promise(resolve => t.step_timeout(resolve, 2000));
+
+  // Skip the 8MB message.
+  await reader.read();
+
+  // Read the time it took.
+  const { value, done } = await reader.read();
+
+  // A browser can pass this test simply by being slow. This may be a source of
+  // flakiness for browsers that do not implement backpressure properly.
+  assert_greater_than_equal(Number(value), 2,
+                            'data send should have taken at least 2 seconds');
+}, 'backpressure should be applied to received messages');
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/websockets/stream-tentative/backpressure-send.any.js
@@ -0,0 +1,23 @@
+// META: script=../websocket.sub.js
+// META: script=resources/url-constants.js
+// META: global=window,worker
+// META: timeout=long
+
+// Allow for this much timer jitter.
+const JITTER_ALLOWANCE_MS = 200;
+
+// The amount of buffering a WebSocket connection has is not standardised, but
+// it's reasonable to expect that it will not be as large as 8MB.
+const MESSAGE_SIZE = 8 * 1024 * 1024;
+
+// In this test, the server WebSocket handler waits 2 seconds, and the browser
+// times how long it takes to send the first message.
+promise_test(async t => {
+  const wss = new WebSocketStream(`${BASEURL}/receive-backpressure`);
+  const { writable } = await wss.connection;
+  const writer = writable.getWriter();
+  const start = performance.now();
+  await writer.write(new Uint8Array(MESSAGE_SIZE));
+  const elapsed = performance.now() - start;
+  assert_greater_than_equal(elapsed, 2000 - JITTER_ALLOWANCE_MS);
+}, 'backpressure should be applied to sent messages');
--- a/testing/web-platform/tests/xhr/send-redirect-bogus-sync.htm
+++ b/testing/web-platform/tests/xhr/send-redirect-bogus-sync.htm
@@ -12,15 +12,15 @@
       function redirect(code, location) {
         test(function() {
           var client = new XMLHttpRequest()
           client.open("GET", "resources/redirect.py?location=" + location + "&code=" + code, false)
           assert_throws("NetworkError", function() { client.send(null) })
         }, document.title + " (" + code + ": " + location + ")")
       }
       redirect("301", "foobar://abcd")
-      redirect("302", "http://z")
+      redirect("302", "http://z.")
       redirect("302", "mailto:someone@example.org")
-      redirect("303", "http://z")
+      redirect("303", "http://z.")
       redirect("303", "tel:1234567890")
     </script>
   </body>
 </html>