diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
new file mode 100644
index 00000000000..4bfb0c2053a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-004.html]
+  [Miss float below something else]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini
deleted file mode 100644
index baa9f1a7541..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-005.html]
-  [Miss clipped float]
-    expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/linebox/inline-negative-margin-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/linebox/inline-negative-margin-001.html.ini
index 6425f4beda1..cb2edcb5dcd 100644
--- a/tests/wpt/metadata-layout-2020/css/CSS2/linebox/inline-negative-margin-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/linebox/inline-negative-margin-001.html.ini
@@ -5,9 +5,6 @@
   [[data-expected-height\] 7]
     expected: FAIL
 
-  [[data-expected-height\] 1]
-    expected: FAIL
-
-  [[data-expected-height\] 2]
+  [[data-expected-height\] 4]
     expected: FAIL
 
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..4c79907309b
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,4 @@
+[CaretPosition-001.html]
+  [Element at (400, 100)]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini
new file mode 100644
index 00000000000..e6e1f29e274
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini
@@ -0,0 +1,2 @@
+[matchMedia-display-none-iframe.html]
+  expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
index 92131edd34a..0a2b0ecfc1e 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
@@ -315,15 +315,15 @@
   [<iframe>: separate response Content-Type: text/html;" text/plain]
     expected: FAIL
 
-  [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+  [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
     expected: FAIL
 
-  [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
+  [<iframe>: separate response Content-Type: text/html */*]
     expected: FAIL
 
-  [<iframe>: separate response Content-Type: text/plain */*]
+  [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
     expected: FAIL
 
-  [<iframe>: combined response Content-Type: */* text/html]
+  [<iframe>: combined response Content-Type: text/html;x=" text/plain]
     expected: FAIL
 
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
index 5c001592859..b2ffc8abf78 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
@@ -56,6 +56,6 @@
   [separate text/javascript x/x]
     expected: FAIL
 
-  [separate text/javascript;charset=windows-1252 error text/javascript]
+  [separate text/javascript error]
     expected: FAIL
 
diff --git a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
index aa6eb8f6085..7277f622b20 100644
--- a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,6 +11,6 @@
   [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
     expected: FAIL
 
-  [X-Content-Type-Options%3A%20'NosniFF']
+  [X-Content-Type-Options%3A%20%2Cnosniff]
     expected: FAIL
 
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+  [Multiple history traversals from the same task]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
new file mode 100644
index 00000000000..75d75b4cda2
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_2.html]
+  [Multiple history traversals, last would be aborted]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html.ini
new file mode 100644
index 00000000000..735a9a75a2a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html.ini
@@ -0,0 +1,2 @@
+[cross-origin-objects-on-new-window.html]
+  expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
index 5c3ac06f42a..09ae27d7480 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
@@ -171,3 +171,6 @@
   [XHTML img usemap="#hash-id"]
     expected: FAIL
 
+  [HTML (standards) IMG usemap="no-hash-name"]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
index c6f45be1eb2..e63fe7c263e 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
@@ -1,5 +1,5 @@
 [iframe_sandbox_popups_escaping-2.html]
-  expected: TIMEOUT
+  expected: CRASH
   [Check that popups from a sandboxed iframe escape the sandbox if\n       allow-popups-to-escape-sandbox is used]
     expected: TIMEOUT
 
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 3080be9afc0..d913fcbb129 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,5 +1,5 @@
 [iframe_sandbox_popups_nonescaping-1.html]
-  expected: CRASH
+  expected: TIMEOUT
   [Check that popups from a sandboxed iframe do not escape the sandbox]
     expected: NOTRUN
 
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
index 0407f0cc2b7..9eb581fcf1f 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
@@ -1,5 +1,5 @@
 [iframe_sandbox_popups_nonescaping-2.html]
-  expected: TIMEOUT
+  expected: CRASH
   [Check that popups from a sandboxed iframe do not escape the sandbox]
     expected: NOTRUN
 
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index 7a36937927c..f4f994c5d6f 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,4 +1,5 @@
 [iframe_sandbox_popups_nonescaping-3.html]
+  expected: TIMEOUT
   [Check that popups from a sandboxed iframe do not escape the sandbox]
-    expected: FAIL
+    expected: NOTRUN
 
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js.ini
new file mode 100644
index 00000000000..f1dff84610d
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js.ini
@@ -0,0 +1,4 @@
+[checkpoint-importScripts.any.sharedworker.html]
+  expected: ERROR
+
+[checkpoint-importScripts.any.worker.html]
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
index dbec6f2c2ff..5602ea31dbe 100644
--- a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
@@ -3,3 +3,6 @@
   [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
     expected: TIMEOUT
 
+  [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
+    expected: TIMEOUT
+
diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
 [realtimeanalyser-fft-scaling.html]
-  expected: TIMEOUT
   [X 2048-point FFT peak position is not equal to 64. Got 0.]
     expected: FAIL
 
diff --git a/tests/wpt/metadata-layout-2020/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/with-ports/017.html.ini
new file mode 100644
index 00000000000..064cf47545b
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/webmessaging/with-ports/017.html.ini
@@ -0,0 +1,5 @@
+[017.html]
+  expected: TIMEOUT
+  [origin of the script that invoked the method, about:blank]
+    expected: TIMEOUT
+
diff --git a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini
new file mode 100644
index 00000000000..663a1f8fa30
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini
@@ -0,0 +1,5 @@
+[018.html]
+  expected: TIMEOUT
+  [origin of the script that invoked the method, javascript:]
+    expected: TIMEOUT
+
diff --git a/tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini
deleted file mode 100644
index 80f9a4f15b8..00000000000
--- a/tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[Worker-constructor.html]
-  expected: ERROR
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index a18f9258d5e..b77f988f230 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -337959,6 +337959,10 @@
          "checkpoint-after-error-event.js": [
           "f415732aa68dd529dcdacc49fb0d0ca6816c1249",
           []
+         ],
+         "resolve-then-throw.js": [
+          "a841eb780a050a82acb3cd496f4f7ad04a8f3a5b",
+          []
          ]
         }
        },
@@ -340137,10 +340141,6 @@
        "document-fonts-ready.html.ini": [
         "d074292053b6d580efda36155c1d82af699494bc",
         []
-       ],
-       "html-elements.html.ini": [
-        "67caa470342db6d2b46dab28464f2491f84dd7b2",
-        []
        ]
       },
       "browsers": {
@@ -341060,7 +341060,7 @@
      []
     ],
     "trusted-types.tentative.idl": [
-     "4e469c19b823bf3d452f480e086474e49741964a",
+     "df7bebae7bb6f5c1b62b908ede3ac3cdf112d520",
      []
     ],
     "ua-client-hints.idl": [
@@ -341108,7 +341108,7 @@
      []
     ],
     "web-animations.idl": [
-     "ae64bb867eb23d6c491d3e9fee743c7cf8963236",
+     "2f2b086e65cc981d47def182b46ad48ebb28f846",
      []
     ],
     "web-bluetooth.idl": [
@@ -351130,7 +351130,7 @@
        []
       ],
       "safari-technology-preview.rb": [
-       "63ad4e5425e593e6641bc36d4ac4fc1bbb9085d6",
+       "9219623d55f6e034703f5125ac7285e1ba68d7aa",
        []
       ],
       "system_info.yml": [
@@ -357590,7 +357590,7 @@
        []
       ],
       "client.py": [
-       "7f122c83dd99117678e574b7a7a81b6e976dbfd9",
+       "fe5189ec0b30a4e20642624c55e464ef40f2901d",
        []
       ],
       "error.py": [
@@ -358115,7 +358115,7 @@
         []
        ],
        "executorwebdriver.py": [
-        "2b3d53d7445706ae3ab601c42e2f17496f6868db",
+        "695b16b9cca19525a0656f66da45fe66c599fb8b",
         []
        ],
        "executorwebkit.py": [
@@ -360340,7 +360340,7 @@
        []
       ],
       "conftest.py": [
-       "d5fd320a696a507718299c765278edde6205608a",
+       "bd5db0cfeba7bbc8aaf23c3151109cf48094ff09",
        []
       ]
      },
@@ -360390,10 +360390,6 @@
        []
       ],
       "support": {
-       "close_window.html": [
-        "7a3619829d10de99268b35968e8dec8985575564",
-        []
-       ],
        "input.html": [
         "e2c6dadd1218e0a7d8b7d243a1c49b7f47092d77",
         []
@@ -360452,7 +360448,7 @@
        []
       ],
       "conftest.py": [
-       "d5fd320a696a507718299c765278edde6205608a",
+       "bd5db0cfeba7bbc8aaf23c3151109cf48094ff09",
        []
       ]
      },
@@ -360682,7 +360678,7 @@
        []
       ],
       "conftest.py": [
-       "f34630c3cbc5de2700552e576bc7c797d2bd724f",
+       "b080761bde881d236aed87dbfcd03963051ba443",
        []
       ]
      },
@@ -360722,11 +360718,11 @@
        []
       ],
       "fixtures.py": [
-       "80ccfddf3d15ad739f7eca6a77fac79e2dcdcaef",
+       "364ede1c93b12debcfbb171cc0aada8a663dbab4",
        []
       ],
       "helpers.py": [
-       "8bc53e7b4030dfdc6a78d11cb95915ea081eae73",
+       "f857083b47743e0925e7baf8b0b964008be7923c",
        []
       ],
       "html": {
@@ -436294,7 +436290,7 @@
       ]
      ],
      "script-resource-with-nonsniffable-types.tentative.sub.html": [
-      "81e256003b685305551fb54bf729461024853cf4",
+      "6d490d55bce25f807b2fe84ad110ceb166f30f8f",
       [
        null,
        {}
@@ -470270,6 +470266,31 @@
           null,
           {}
          ]
+        ],
+        "checkpoint-importScripts.any.js": [
+         "8791a099b6ec875e5851d3f18c0b9c29a9eab83b",
+         [
+          "html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.sharedworker.html",
+          {
+           "script_metadata": [
+            [
+             "global",
+             "dedicatedworker,sharedworker"
+            ]
+           ]
+          }
+         ],
+         [
+          "html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.worker.html",
+          {
+           "script_metadata": [
+            [
+             "global",
+             "dedicatedworker,sharedworker"
+            ]
+           ]
+          }
+         ]
         ]
        },
        "module": {
@@ -521287,7 +521308,7 @@
        ]
       ],
       "setting-the-timeline-of-an-animation.html": [
-       "dd8617503951aafd71015d591914a1b54e3907a7",
+       "7e98ef4260f778c4257203f92db39a6bdaa92871",
        [
         null,
         {}
@@ -525904,7 +525925,7 @@
      ]
     ],
     "RTCPeerConnection-createDataChannel.html": [
-     "87867664b58a6787bd96cfb85559b4f1171e263f",
+     "7ad8bf7d46ecd7a3702542d8b484132afcc94d63",
      [
       null,
       {
@@ -525973,7 +525994,7 @@
      ]
     ],
     "RTCPeerConnection-iceGatheringState.html": [
-     "d9e3f42d2c21003c5a6c5614c24398aa9e681c60",
+     "88acf348eb5eaf0e803a88381d1b5463647b7a9e",
      [
       null,
       {}
@@ -562281,14 +562302,14 @@
      },
      "close_window": {
       "close.py": [
-       "f4e3b0481d3b3cbc93ba8b44c639934cf8eef9de",
+       "fa8236791067410c01bae081723ee26e237a476b",
        [
         null,
         {}
        ]
       ],
       "user_prompts.py": [
-       "22df9155e8e7bd3aa32fc96c7dd482972c490fd2",
+       "c0f9cc7610c21ea97064392eb2e09fce6f853bbc",
        [
         null,
         {
@@ -562408,7 +562429,7 @@
        ]
       ],
       "navigate.py": [
-       "ead4f5aa04befe664f17036de925fd9df7626470",
+       "9426ea089b0f24da8576ac39eab74abe4abe4786",
        [
         null,
         {}
@@ -562950,7 +562971,7 @@
      },
      "get_window_handles": {
       "get.py": [
-       "07ff9d4d26fd3b7cff5620b5295ebe386a226cf2",
+       "b25d76ce588449cf3279aa61e4c1c39863e44d12",
        [
         null,
         {}
@@ -563334,7 +563355,7 @@
      },
      "permissions": {
       "set.py": [
-       "349462dbb5037321e16b92b8055bd94c015ea11c",
+       "4dce1589641d9c35e729344ac548f3ba99bc084a",
        [
         null,
         {}
@@ -563492,14 +563513,14 @@
      },
      "switch_to_window": {
       "alerts.py": [
-       "8824138c2d25c07232847062c4853d73075eb94e",
+       "2fc390e8641b980bc1c317db93f9f1166bcb8284",
        [
         null,
         {}
        ]
       ],
       "switch.py": [
-       "907be66a149e8196c87760544140636d9625bbb9",
+       "8fb80fb3238f99eae758658d7796b29c1f8db717",
        [
         null,
         {}
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
new file mode 100644
index 00000000000..4bfb0c2053a
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-004.html]
+  [Miss float below something else]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
deleted file mode 100644
index baa9f1a7541..00000000000
--- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-005.html]
-  [Miss clipped float]
-    expected: FAIL
-
diff --git a/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini
index 076c791cd3d..94a3570d26b 100644
--- a/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini
+++ b/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini
@@ -8,9 +8,6 @@
   [[data-expected-height\] 3]
     expected: FAIL
 
-  [[data-expected-height\] 1]
-    expected: FAIL
-
-  [[data-expected-height\] 2]
+  [[data-expected-height\] 4]
     expected: FAIL
 
diff --git a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..4c79907309b
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,4 @@
+[CaretPosition-001.html]
+  [Element at (400, 100)]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
new file mode 100644
index 00000000000..e6e1f29e274
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
@@ -0,0 +1,2 @@
+[matchMedia-display-none-iframe.html]
+  expected: ERROR
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 5285b1d6cd2..4e3da8a6166 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -315,15 +315,15 @@
   [<iframe>: separate response Content-Type: text/html;" text/plain]
     expected: FAIL
 
-  [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+  [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
     expected: FAIL
 
-  [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
+  [<iframe>: separate response Content-Type: text/html */*]
     expected: FAIL
 
-  [<iframe>: separate response Content-Type: text/plain */*]
+  [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
     expected: FAIL
 
-  [<iframe>: combined response Content-Type: */* text/html]
+  [<iframe>: combined response Content-Type: text/html;x=" text/plain]
     expected: FAIL
 
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index 5c001592859..b2ffc8abf78 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,6 +56,6 @@
   [separate text/javascript x/x]
     expected: FAIL
 
-  [separate text/javascript;charset=windows-1252 error text/javascript]
+  [separate text/javascript error]
     expected: FAIL
 
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index aa6eb8f6085..7277f622b20 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,6 +11,6 @@
   [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
     expected: FAIL
 
-  [X-Content-Type-Options%3A%20'NosniFF']
+  [X-Content-Type-Options%3A%20%2Cnosniff]
     expected: FAIL
 
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+  [Multiple history traversals from the same task]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
new file mode 100644
index 00000000000..75d75b4cda2
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_2.html]
+  [Multiple history traversals, last would be aborted]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html.ini b/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html.ini
new file mode 100644
index 00000000000..735a9a75a2a
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html.ini
@@ -0,0 +1,2 @@
+[cross-origin-objects-on-new-window.html]
+  expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
index 1de3f8d68b2..98163335e40 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
@@ -172,3 +172,6 @@
   [XHTML img usemap="http://example.org/#garbage-before-hash-id"]
     expected: FAIL
 
+  [HTML (standards) IMG usemap="no-hash-name"]
+    expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
index c6f45be1eb2..e63fe7c263e 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
@@ -1,5 +1,5 @@
 [iframe_sandbox_popups_escaping-2.html]
-  expected: TIMEOUT
+  expected: CRASH
   [Check that popups from a sandboxed iframe escape the sandbox if\n       allow-popups-to-escape-sandbox is used]
     expected: TIMEOUT
 
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 963d4cd20ef..9df1ac56f2a 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,6 +1,6 @@
 [iframe_sandbox_popups_nonescaping-1.html]
   type: testharness
-  expected: CRASH
+  expected: TIMEOUT
   [Check that popups from a sandboxed iframe do not escape the sandbox]
     expected: NOTRUN
 
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
index d43f38b40cd..45d8be1c898 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
@@ -1,6 +1,6 @@
 [iframe_sandbox_popups_nonescaping-2.html]
   type: testharness
-  expected: TIMEOUT
+  expected: CRASH
   [Check that popups from a sandboxed iframe do not escape the sandbox]
     expected: NOTRUN
 
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index dc856a3d5a3..e440b1e38c6 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,5 +1,6 @@
 [iframe_sandbox_popups_nonescaping-3.html]
   type: testharness
+  expected: TIMEOUT
   [Check that popups from a sandboxed iframe do not escape the sandbox]
-    expected: FAIL
+    expected: NOTRUN
 
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js.ini
new file mode 100644
index 00000000000..f1dff84610d
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js.ini
@@ -0,0 +1,4 @@
+[checkpoint-importScripts.any.sharedworker.html]
+  expected: ERROR
+
+[checkpoint-importScripts.any.worker.html]
diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
index 0cef5158fae..edae5e5adcd 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
@@ -4,3 +4,6 @@
   [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
     expected: TIMEOUT
 
+  [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
+    expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
 [realtimeanalyser-fft-scaling.html]
-  expected: TIMEOUT
   [X 2048-point FFT peak position is not equal to 64. Got 0.]
     expected: FAIL
 
diff --git a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini
new file mode 100644
index 00000000000..064cf47545b
--- /dev/null
+++ b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini
@@ -0,0 +1,5 @@
+[017.html]
+  expected: TIMEOUT
+  [origin of the script that invoked the method, about:blank]
+    expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini
new file mode 100644
index 00000000000..663a1f8fa30
--- /dev/null
+++ b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini
@@ -0,0 +1,5 @@
+[018.html]
+  expected: TIMEOUT
+  [origin of the script that invoked the method, javascript:]
+    expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
deleted file mode 100644
index 80f9a4f15b8..00000000000
--- a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[Worker-constructor.html]
-  expected: ERROR
diff --git a/tests/wpt/web-platform-tests/fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html b/tests/wpt/web-platform-tests/fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html
index 81e256003b6..6d490d55bce 100644
--- a/tests/wpt/web-platform-tests/fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html
@@ -42,12 +42,7 @@ function test(mime_type, is_blocking_expected) {
     });
 
     // www1 is cross-origin, so the HTTP response is CORB-eligible.
-    //
-    // TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
-    // https://crbug.com/1098938 are fixed, we should use a cross-*origin*
-    // rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
-    // See also https://crbug.com/918660 for more context.
-    var src_prefix = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
+    var src_prefix = "http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
     body = `window['${script_has_run_token}'] = true;`
     script.src = src_prefix + "?type=" + mime_type + "&body=" + encodeURIComponent(body);
     document.body.appendChild(script)
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js
new file mode 100644
index 00000000000..8791a099b6e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.js
@@ -0,0 +1,40 @@
+// META: global=dedicatedworker,sharedworker
+
+// The `then` handlers for `Promise.resolve()` are evaluated in the first
+// microtasks checkpoint after `Promise.resolve()`.
+
+// ----------------------------------------------------------------
+// Check when microtasks checkpoint is performed around importScripts().
+
+// The expectation is: the `then` handlers are evaluated after the script
+// calling importScripts() is finished, not immediately after importScripts().
+// Although #clean-up-after-running-script is executed as a part of
+// #run-a-classic-script for importScripts()ed scripts, but at that time
+// microtasks checkpoint is NOT performed because JavaScript execution context
+// stack is not empty.
+
+self.log = [];
+
+// Microtasks should be executed before
+// #run-a-classic-script/#run-a-module-script is completed, and thus before
+// script evaluation scheduled by setTimeout().
+async_test(t => {
+  self.addEventListener('error',
+      t.unreached_func('error event should not be fired'));
+
+  t.step_timeout(() => {
+      assert_array_equals(log, [
+          'importScripts()ed script',
+          'catch',
+          'promise'
+        ]);
+      t.done();
+    },
+    0);
+}, "Promise resolved during importScripts()");
+
+try {
+  importScripts('resources/resolve-then-throw.js');
+} catch (e) {
+  self.log.push('catch');
+}
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/microtasks/resources/resolve-then-throw.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/microtasks/resources/resolve-then-throw.js
new file mode 100644
index 00000000000..a841eb780a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/microtasks/resources/resolve-then-throw.js
@@ -0,0 +1,3 @@
+self.log.push('importScripts()ed script');
+Promise.resolve().then(() => self.log.push('promise'));
+throw new Error('foo');
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
deleted file mode 100644
index 67caa470342..00000000000
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[html-elements.html]
-  [Compare CSS span definitions (only valid if pre-reqs pass)]
-    expected:
-      if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=187052
-
-
-  [Compare CSS div definitions (only valid if pre-reqs pass)]
-    expected:
-      if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=187052
diff --git a/tests/wpt/web-platform-tests/interfaces/trusted-types.tentative.idl b/tests/wpt/web-platform-tests/interfaces/trusted-types.tentative.idl
index 4e469c19b82..df7bebae7bb 100644
--- a/tests/wpt/web-platform-tests/interfaces/trusted-types.tentative.idl
+++ b/tests/wpt/web-platform-tests/interfaces/trusted-types.tentative.idl
@@ -30,7 +30,20 @@ typedef [StringContext=TrustedScriptURL] USVString ScriptURLString;
   SecureContext
 ] interface TrustedTypePolicyFactory : EventTarget {
     TrustedTypePolicy createPolicy(DOMString policyName, optional TrustedTypePolicyOptions policyOptions = {});
-    // All the policy object names that have been created
+    boolean isHTML(any checkedObject);
+    boolean isScript(any checkedObject);
+    boolean isScriptURL(any checkedObject);
+    readonly attribute TrustedHTML emptyHTML;
+    readonly attribute TrustedScript emptyScript;
+    DOMString? getAttributeType(DOMString tagName, DOMString attribute,
+        optional DOMString elementNS, optional DOMString attrNs);
+    DOMString? getPropertyType(DOMString tagName, DOMString property,
+        optional DOMString elementNS);
+
+    readonly attribute TrustedTypePolicy defaultPolicy;
+    object? getTypeMapping(optional DOMString ns);
+
+    attribute EventHandler onbeforecreatepolicy;
 };
 
 [
diff --git a/tests/wpt/web-platform-tests/interfaces/web-animations.idl b/tests/wpt/web-platform-tests/interfaces/web-animations.idl
index ae64bb867eb..2f2b086e65c 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-animations.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-animations.idl
@@ -24,7 +24,7 @@ interface Animation : EventTarget {
                 optional AnimationTimeline? timeline);
              attribute DOMString                id;
              attribute AnimationEffect?         effect;
-    readonly attribute AnimationTimeline?       timeline;
+             attribute AnimationTimeline?       timeline;
              attribute double?                  startTime;
              attribute double?                  currentTime;
              attribute double                   playbackRate;
diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
index 63ad4e5425e..9219623d55f 100644
--- a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
+++ b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
@@ -1,10 +1,10 @@
 cask 'safari-technology-preview' do
-  if MacOS.version <= :mojave
-    version '108,001-15210-20200610-d35e22e0-d9fa-4503-9988-cf7b2b554e15'
-    sha256 '0299fd2f2836b170a8b633b00d289bcc6913716042e82251af4fa1d5394b87d5'
+  if MacOS.version <= :catalina
+    version '111,001-32177-20200728-f459b529-99a7-4707-a85c-e693ddb56eee'
+    sha256 'f95f72e8cf6a3160fad71411168c8f0eeb805ca1e7a7eec06b6e92d2a0ab6e85'
   else
-    version '108,001-16091-20200610-09f04256-ae36-4930-b7c4-b1333f8d8e5f'
-    sha256 '22a4d9ca7fb39227cbf4a83be13ad05973171cf88eb6bcc2fac4556a36017357'
+    version '111,001-32479-20200728-12c458d1-e348-4ec5-9d55-9e9bad9c805e'
+    sha256 '6b199cca77be7407f40a62bc1ec576a8751b24da15613dfc0a951ac3d996f45f'
   end
 
   url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"
@@ -13,7 +13,7 @@ cask 'safari-technology-preview' do
   homepage 'https://developer.apple.com/safari/download/'
 
   auto_updates true
-  depends_on macos: '>= :mojave'
+  depends_on macos: '>= :catalina'
 
   pkg 'Safari Technology Preview.pkg'
 
diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py
index 7f122c83dd9..fe5189ec0b3 100644
--- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py
+++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py
@@ -242,6 +242,15 @@ class Window(object):
     def __init__(self, session):
         self.session = session
 
+    @command
+    def close(self):
+        handles = self.session.send_session_command("DELETE", "window")
+        if handles is not None and len(handles) == 0:
+            # With no more open top-level browsing contexts, the session is closed.
+            self.session.session_id = None
+
+        return handles
+
     @property
     @command
     def rect(self):
@@ -548,6 +557,13 @@ class Session(object):
     def source(self):
         return self.send_session_command("GET", "source")
 
+    @command
+    def new_window(self, type_hint=None):
+        body = {"type": type_hint}
+        value = self.send_session_command("POST", "window/new", body)
+
+        return value["handle"]
+
     @property
     @command
     def window_handle(self):
@@ -569,15 +585,6 @@ class Session(object):
 
         return self.send_session_command("POST", url, body)
 
-    @command
-    def close(self):
-        handles = self.send_session_command("DELETE", "window")
-        if handles is not None and len(handles) == 0:
-            # With no more open top-level browsing contexts, the session is closed.
-            self.session_id = None
-
-        return handles
-
     @property
     @command
     def handles(self):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
index 2b3d53d7445..695b16b9cca 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -112,7 +112,7 @@ class WebDriverTestharnessProtocolPart(TestharnessProtocolPart):
         for handle in handles:
             try:
                 self.webdriver.window_handle = handle
-                self.webdriver.close()
+                self.webdriver.window.close()
             except client.NoSuchWindowException:
                 pass
         self.webdriver.window_handle = self.runner_handle
diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html
index dd861750395..7e98ef4260f 100644
--- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html
+++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html
@@ -60,7 +60,7 @@ test(t => {
     new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
                   null);
   animation.startTime = document.timeline.currentTime;
-  assert_equals(animation.playState, 'idle');
+  assert_equals(animation.playState, 'running');
 
   animation.timeline = document.timeline;
 
@@ -73,7 +73,7 @@ test(t => {
     new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
                   null);
   animation.startTime = document.timeline.currentTime - 200 * MS_PER_SEC;
-  assert_equals(animation.playState, 'idle');
+  assert_equals(animation.playState, 'running');
 
   animation.timeline = document.timeline;
 
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/back/conftest.py b/tests/wpt/web-platform-tests/webdriver/tests/back/conftest.py
index d5fd320a696..bd5db0cfeba 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/back/conftest.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/back/conftest.py
@@ -4,15 +4,15 @@ from webdriver.error import NoSuchWindowException
 
 
 @pytest.fixture(name="session")
-def fixture_session(capabilities, session, create_window):
+def fixture_session(capabilities, session):
     """Prevent re-using existent history by running the test in a new window."""
     original_handle = session.window_handle
-    session.window_handle = create_window()
+    session.window_handle = session.new_window()
 
     yield session
 
     try:
-        session.close()
+        session.window.close()
     except NoSuchWindowException:
         pass
 
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/close_window/close.py b/tests/wpt/web-platform-tests/webdriver/tests/close_window/close.py
index f4e3b0481d3..fa823679106 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/close_window/close.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/close_window/close.py
@@ -15,10 +15,10 @@ def test_no_browsing_context(session, closed_window):
     assert_error(response, "no such window")
 
 
-def test_close_browsing_context(session, create_window):
+def test_close_browsing_context(session):
     original_handles = session.handles
 
-    new_handle = create_window()
+    new_handle = session.new_window()
     session.window_handle = new_handle
 
     response = close(session)
@@ -27,10 +27,10 @@ def test_close_browsing_context(session, create_window):
     assert new_handle not in handles
 
 
-def test_close_browsing_context_with_dismissed_beforeunload_prompt(session, create_window):
+def test_close_browsing_context_with_dismissed_beforeunload_prompt(session):
     original_handles = session.handles
 
-    new_handle = create_window()
+    new_handle = session.new_window()
     session.window_handle = new_handle
 
     session.url = inline("""
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/close_window/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/close_window/user_prompts.py
index 22df9155e8e..c0f9cc7610c 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/close_window/user_prompts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/close_window/user_prompts.py
@@ -11,10 +11,10 @@ def close(session):
 
 
 @pytest.fixture
-def check_user_prompt_closed_without_exception(session, create_dialog, create_window):
+def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         original_handle = session.window_handle
-        new_handle = create_window()
+        new_handle = session.new_window()
         session.window_handle = new_handle
 
         create_dialog(dialog_type, text=dialog_type)
@@ -34,9 +34,9 @@ def check_user_prompt_closed_without_exception(session, create_dialog, create_wi
 
 
 @pytest.fixture
-def check_user_prompt_closed_with_exception(session, create_dialog, create_window):
+def check_user_prompt_closed_with_exception(session, create_dialog):
     def check_user_prompt_closed_with_exception(dialog_type, retval):
-        new_handle = create_window()
+        new_handle = session.new_window()
         session.window_handle = new_handle
 
         create_dialog(dialog_type, text=dialog_type)
@@ -52,9 +52,9 @@ def check_user_prompt_closed_with_exception(session, create_dialog, create_windo
 
 
 @pytest.fixture
-def check_user_prompt_not_closed_but_exception(session, create_dialog, create_window):
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
     def check_user_prompt_not_closed_but_exception(dialog_type):
-        new_handle = create_window()
+        new_handle = session.new_window()
         session.window_handle = new_handle
 
         create_dialog(dialog_type, text=dialog_type)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py
index ead4f5aa04b..9426ea089b0 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py
@@ -1,8 +1,7 @@
-import pytest
-
-from tests.support.asserts import assert_error, assert_success
+from tests.support.asserts import assert_success
 from tests.support.inline import inline
 
+
 def element_click(session, element):
     return session.transport.send(
         "POST", "session/{session_id}/element/{element_id}/click".format(
@@ -93,12 +92,14 @@ def test_link_hash(session):
             """, args=(element,)) is True
 
 
-def test_link_closes_window(session, create_window):
-    new_handle = create_window()
+def test_link_closes_window(session, url):
+    new_handle = session.new_window()
     session.window_handle = new_handle
 
-    session.url = inline("""<a href="/webdriver/tests/element_click/support/close_window.html">asdf</a>""")
+    session.url = inline("""<a href="javascript:window.close()">Close me</a>""")
     element = session.find.css("a", all=False)
+
     response = element_click(session, element)
     assert_success(response)
+
     assert new_handle not in session.handles
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/support/close_window.html b/tests/wpt/web-platform-tests/webdriver/tests/element_click/support/close_window.html
deleted file mode 100644
index 7a3619829d1..00000000000
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/support/close_window.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-    <body onload="checkload()">
-        <script>
-        function checkload() {
-            window.close()
-        }
-        </script>
-    </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/forward/conftest.py b/tests/wpt/web-platform-tests/webdriver/tests/forward/conftest.py
index d5fd320a696..bd5db0cfeba 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/forward/conftest.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/forward/conftest.py
@@ -4,15 +4,15 @@ from webdriver.error import NoSuchWindowException
 
 
 @pytest.fixture(name="session")
-def fixture_session(capabilities, session, create_window):
+def fixture_session(capabilities, session):
     """Prevent re-using existent history by running the test in a new window."""
     original_handle = session.window_handle
-    session.window_handle = create_window()
+    session.window_handle = session.new_window()
 
     yield session
 
     try:
-        session.close()
+        session.window.close()
     except NoSuchWindowException:
         pass
 
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_window_handles/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_window_handles/get.py
index 07ff9d4d26f..b25d76ce588 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/get_window_handles/get.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_window_handles/get.py
@@ -6,12 +6,11 @@ def get_window_handles(session):
         "GET", "session/{session_id}/window/handles".format(**vars(session)))
 
 
-def test_no_browsing_context(session, create_window):
+def test_no_browsing_context(session):
     window_handles = session.handles
 
-    new_handle = create_window()
-    session.window_handle = new_handle
-    session.close()
+    session.window_handle = session.new_window()
+    session.window.close()
 
     response = get_window_handles(session)
     assert_success(response, window_handles)
@@ -26,9 +25,9 @@ def test_single_window(session):
     assert value[0] == session.window_handle
 
 
-def test_multiple_windows(session, create_window):
+def test_multiple_windows(session):
     original_handle = session.window_handle
-    new_handle = create_window()
+    new_handle = session.new_window()
 
     response = get_window_handles(session)
     value = assert_success(response)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/permissions/set.py b/tests/wpt/web-platform-tests/webdriver/tests/permissions/set.py
index 349462dbb50..4dce1589641 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/permissions/set.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/permissions/set.py
@@ -100,10 +100,10 @@ def test_set_to_state(session, url, state, realmSetting):
     {}
 ])
 @pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_set_to_state_cross_realm(session, create_window, url, state, realmSetting):
+def test_set_to_state_cross_realm(session, url, state, realmSetting):
     session.url = url("/common/blank.html", protocol="https")
     original_window = session.window_handle
-    session.window_handle = create_window()
+    session.window_handle = session.new_window()
     session.url = url("/common/blank.html", protocol="https")
     parameters = { "descriptor": { "name": "geolocation" }, "state": state }
     parameters.update(realmSetting)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/conftest.py b/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/conftest.py
index f34630c3cbc..b080761bde8 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/conftest.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/conftest.py
@@ -4,10 +4,10 @@ from webdriver.error import NoSuchAlertException, NoSuchWindowException
 
 
 @pytest.fixture(name="session")
-def fixture_session(capabilities, session, create_window):
+def fixture_session(capabilities, session):
     """Prevent dialog rate limits by running the test in a new window."""
     original_handle = session.window_handle
-    session.window_handle = create_window()
+    session.window_handle = session.new_window()
 
     yield session
 
@@ -17,7 +17,7 @@ def fixture_session(capabilities, session, create_window):
         pass
 
     try:
-        session.close()
+        session.window.close()
     except NoSuchWindowException:
         pass
 
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py
index 80ccfddf3d1..364ede1c93b 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py
@@ -87,18 +87,6 @@ def create_frame(session):
     return create_frame
 
 
-@pytest.fixture
-def create_window(session):
-    """Open new window and return the window handle."""
-    def create_window():
-        windows_before = session.handles
-        name = session.execute_script("window.open()")
-        assert len(session.handles) == len(windows_before) + 1
-        new_windows = list(set(session.handles) - set(windows_before))
-        return new_windows.pop()
-    return create_window
-
-
 @pytest.fixture
 def http(configuration):
     return HTTPRequest(configuration["host"], configuration["port"])
@@ -224,13 +212,13 @@ def create_dialog(session):
 
 
 @pytest.fixture
-def closed_window(session, create_window):
+def closed_window(session):
     original_handle = session.window_handle
+    new_handle = session.new_window()
 
-    new_handle = create_window()
     session.window_handle = new_handle
 
-    session.close()
+    session.window.close()
     assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
 
     yield new_handle
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
index 8bc53e7b403..f857083b477 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
@@ -70,7 +70,7 @@ def cleanup_session(session):
         for window in _windows(session, exclude=[current_window]):
             session.window_handle = window
             if len(session.handles) > 1:
-                session.close()
+                session.window.close()
 
         session.window_handle = current_window
 
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/alerts.py b/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/alerts.py
index 8824138c2d2..2fc390e8641 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/alerts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/alerts.py
@@ -11,10 +11,10 @@ def switch_to_window(session, handle):
         {"handle": handle})
 
 
-def test_retain_tab_modal_status(session, create_window):
+def test_retain_tab_modal_status(session):
     handle = session.window_handle
 
-    new_handle = create_window()
+    new_handle = session.new_window()
     response = switch_to_window(session, new_handle)
     assert_success(response)
 
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/switch.py b/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/switch.py
index 907be66a149..8fb80fb3238 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/switch.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/switch_to_window/switch.py
@@ -15,9 +15,7 @@ def test_null_parameter_value(session, http):
         assert_error(Response.from_http(response), "invalid argument")
 
 
-def test_null_response_value(session, create_window):
-    new_handle = create_window()
-
-    response = switch_to_window(session, new_handle)
+def test_null_response_value(session):
+    response = switch_to_window(session, session.new_window())
     value = assert_success(response)
     assert value is None
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html
index 87867664b58..7ad8bf7d46e 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html
@@ -707,6 +707,11 @@ for (const options of [{}, {negotiated: true, id: 0}]) {
     await createDataChannelPair(t, options, pc1);
   }, `addTrack, then creating ${mode}, should negotiate properly when max-bundle is used`);
 
+/*
+This test is disabled until https://github.com/w3c/webrtc-pc/issues/2562
+has been resolved; it presupposes that stopping the first transceiver
+breaks the transport.
+
   promise_test(async t => {
     const pc1 = new RTCPeerConnection({bundlePolicy: "max-bundle"});
     const pc2 = new RTCPeerConnection();
@@ -726,6 +731,7 @@ for (const options of [{}, {negotiated: true, id: 0}]) {
     await dc1Closed;
   }, `Stopping the bundle-tag when there is a ${mode} in the bundle ` +
      `should kill the DataChannel`);
+*/
 }
 
 /*
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html
index d9e3f42d2c2..88acf348eb5 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html
@@ -137,8 +137,12 @@
     await pc1.setLocalDescription(await pc1.createOffer());
     await pc2.setRemoteDescription(pc1.localDescription);
     await pc2.setLocalDescription(await pc2.createAnswer());
+    assert_equals(pc2.getTransceivers().length, 0,
+                 'PC2 transceivers should be invisible after negotiation');
     await iceGatheringStateTransitions(pc2, 'new');
     await pc1.setRemoteDescription(pc2.localDescription);
+    assert_equals(pc1.getTransceivers().length, 0,
+                 'PC1 transceivers should be invisible after negotiation');
     await iceGatheringStateTransitions(pc1, 'new');
   }, 'renegotiation that closes all transports should result in ICE gathering state "new"');