Import wpt@37d215c69e495f287cc96902b47af64d21922305

Using wpt-import in Chromium 11f7bdb064d917947d1f37e728ba7192c70162fc.
With Chromium commits locally applied on WPT:
d1fb50d23a "Increase timeout of openSXGInIframeAndWaitForMessage to 15 sec"
19df13a3f9 "[Private Network Access] Add WPTs for WebSockets."


Note to sheriffs: This CL imports external tests and adds
expectations for those tests; if this CL is large and causes
a few new failures, please fix the failures by adding new
lines to TestExpectations rather than reverting. See:
https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md

Directory owners for changes in this CL:
jsbell@chromium.org:
  external/wpt/resources

NOAUTOREVERT=true

No-Export: true
Change-Id: I379d5ef80541612e4de9df0ec702a166c053b017
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3092847
Reviewed-by: Weizhong Xia <weizhong@google.com>
Reviewed-by: Kyle Ju <kyleju@chromium.org>
Commit-Queue: Weizhong Xia <weizhong@google.com>
Cr-Commit-Position: refs/heads/master@{#911871}
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 66b04947..8ae0bd1 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -76789,6 +76789,32 @@
        {}
       ]
      ],
+     "float-in-self-collapsing-block-000.html": [
+      "e42d941e78ab45e9107ac49ee8c8c2b4c6d43c9d",
+      [
+       null,
+       [
+        [
+         "/css/reference/ref-filled-green-100px-square.xht",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
+     "float-in-self-collapsing-block-001.html": [
+      "835a5be09a80c19b079b1aa71fddee8e450f9a20",
+      [
+       null,
+       [
+        [
+         "/css/reference/ref-filled-green-100px-square.xht",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "float-inside-small-block.html": [
       "2afd6dacc9c1f910be33a97677c0f5841fe5b035",
       [
@@ -112498,7 +112524,7 @@
        ]
       ],
       "custom-highlight-painting-invalidation-001.html": [
-       "909779d98a87e5a8030d941cc26956512ce72c2a",
+       "aef391ec0f3c749554bc2cf284b18ff78f8bc525",
        [
         null,
         [
@@ -112511,7 +112537,7 @@
        ]
       ],
       "custom-highlight-painting-invalidation-002.html": [
-       "197b9a40a481d9abe1e50103739ba7b028328c3c",
+       "99271ff7a0ea2d15e0a4a6d7448cfbcc44d42486",
        [
         null,
         [
@@ -112524,7 +112550,7 @@
        ]
       ],
       "custom-highlight-painting-invalidation-003.html": [
-       "a02d0503b5446d8c46bf7f784b65d94244ddcf2a",
+       "d1f87223887a4d38235212948d319c18e9e005e3",
        [
         null,
         [
@@ -112537,7 +112563,7 @@
        ]
       ],
       "custom-highlight-painting-invalidation-004.html": [
-       "2b227432a9842131908ef65936f7994685ab3f4f",
+       "62f05a84abcb9a81ea7ec1fdcbcaad5e1ddf8a17",
        [
         null,
         [
@@ -112550,7 +112576,7 @@
        ]
       ],
       "custom-highlight-painting-invalidation-005.html": [
-       "b22b7d7e746f1f3083cdce335ec758b51d3ad2ad",
+       "cabc4c3b9c00282ef632f40c7f4d7092abff9bd1",
        [
         null,
         [
@@ -112563,7 +112589,7 @@
        ]
       ],
       "custom-highlight-painting-invalidation-006.html": [
-       "d773a015c4e625299540cd993838f0d2dc9deb28",
+       "81c2298e1322a103997982bda008c1679e91a033",
        [
         null,
         [
@@ -112641,7 +112667,7 @@
        ]
       ],
       "custom-highlight-painting-staticrange-004.html": [
-       "fa3d7ce373878fcfac3981c7f82b81bd0f09bc4d",
+       "14e9766a981afe6ce2efa368eb2fbb5ec62a697e",
        [
         null,
         [
@@ -112654,7 +112680,7 @@
        ]
       ],
       "custom-highlight-painting-staticrange-005.html": [
-       "ab486ae644adb2e2dda7f70364bf9a6f95bb8aa1",
+       "b955b0fcee4342a24a6b59d6d91e0f2fbdd4126f",
        [
         null,
         [
@@ -112667,7 +112693,7 @@
        ]
       ],
       "custom-highlight-painting-staticrange-006.html": [
-       "52ab8c7fb05dbd4f66840733b8a0b481c4b62a6c",
+       "8436102240d04b161bf55d711a64ad92c1309959",
        [
         null,
         [
@@ -112680,7 +112706,7 @@
        ]
       ],
       "custom-highlight-painting-staticrange-007.html": [
-       "d56082a119ce21f0d87d69c52cdf0833e5d31a21",
+       "03a7ee6d54534a7545f26be083659c0c26c4e4fc",
        [
         null,
         [
@@ -172312,12 +172338,12 @@
     },
     "css-variables": {
      "css-vars-custom-property-case-sensitive-001.html": [
-      "6644175e5533a19ef4125dd8aecd833f1be12c39",
+      "df2b352702311f0a2ae55160cb9fbc2bde576dd0",
       [
        null,
        [
         [
-         "/css/css-variables/reference/css-vars-custom-property-case-sensitive-ref.html",
+         "/css/reference/ref-filled-green-100px-square.xht",
          "=="
         ]
        ],
@@ -172325,12 +172351,12 @@
       ]
      ],
      "css-vars-custom-property-inheritance.html": [
-      "fc6cfa0ed40cdd6e9f973e5da150afff9d992e33",
+      "bbda51d2fe512b8acf234274e131e4febc0d31b8",
       [
        null,
        [
         [
-         "/css/css-variables/reference/css-vars-custom-property-inheritance-ref.html",
+         "/css/reference/ref-filled-green-100px-square.xht",
          "=="
         ]
        ],
@@ -172637,7 +172663,7 @@
       ]
      ],
      "variable-declaration-24.html": [
-      "ead972c2aadf762f92ab727bde1d76f140643f56",
+      "14fe47a1e5ea424e107161dfe7d0f743068b2380",
       [
        null,
        [
@@ -172650,7 +172676,7 @@
       ]
      ],
      "variable-declaration-25.html": [
-      "64d19973d74ddb9394ea9bee861f84abd75c08ac",
+      "ad79f4ced1933c11890c4a0c6d3778aa140a021f",
       [
        null,
        [
@@ -193007,6 +193033,19 @@
        ],
        {}
       ]
+     ],
+     "xml-class-selector.xml": [
+      "5666c0065d6262e0ca3c586d145a67e7f9c2a3cf",
+      [
+       null,
+       [
+        [
+         "/css/selectors/xml-class-selector-ref.xml",
+         "=="
+        ]
+       ],
+       {}
+      ]
      ]
     },
     "vendor-imports": {
@@ -200532,6 +200571,21 @@
       }
      },
      "interactive-elements": {
+      "the-dialog-element": {
+       "backdrop-dynamic-display-none.html": [
+        "573ed2d6c62c416a532de11d5d2e1775f4086dce",
+        [
+         null,
+         [
+          [
+           "/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none-reference.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ]
+      },
       "the-popup-element": {
        "popup-hidden-display.tentative.html": [
         "b313f06f664d35ca86e98a2361c04e329964e02a",
@@ -238790,6 +238844,10 @@
        "iframe-code.html": [
         "a4a1829be229acb4c0cf75cbb0e2885060741d3f",
         []
+       ],
+       "run-after-layout-and-paint.js": [
+        "75d3e279a4cd6916f769a68f2c7f246e8ad354dc",
+        []
        ]
       }
      }
@@ -253032,14 +253090,6 @@
       []
      ],
      "reference": {
-      "css-vars-custom-property-case-sensitive-ref.html": [
-       "30bad67f85a38737a408350e46d7236a3e4462e3",
-       []
-      ],
-      "css-vars-custom-property-inheritance-ref.html": [
-       "fcacb7bb23d1ab8c1288b2de072416a7c7ee8623",
-       []
-      ],
       "variable-reference-without-whitespace-ref.html": [
        "3d9aaed6b129725cb5190afd9f19aefae834f37f",
        []
@@ -257408,6 +257458,10 @@
      "user-valid-expected.txt": [
       "60549107fbeec9ba2ae7c07bcf3afe5d5bc94b34",
       []
+     ],
+     "xml-class-selector-ref.xml": [
+      "6b44280737ab254649036ff50808b764bc87cc67",
+      []
      ]
     },
     "support": {
@@ -263425,17 +263479,25 @@
       "a69aab487239021088f944b0a8cee2dad4b3d111",
       []
      ],
+     "non-secure-context.window-expected.txt": [
+      "101160983b38cf7dac36d92ae865da8c2e1b9a0c",
+      []
+     ],
      "resources": {
       "fetcher.html": [
        "6fc321f345142c2379cee6e5845bc73b90cad509",
        []
       ],
       "ports.sub.js": [
-       "52919db847de01fc3bb3e17c0f561d71977a8062",
+       "fb3f0ad5c402eefea666251fe177e74e94d36450",
+       []
+      ],
+      "socket-opener.html": [
+       "48d27216bedf9aa1daf4d2a4e96f860e9315a0c3",
        []
       ],
       "support.js": [
-       "54177d5bfbf1fd57cb795d7d6c3cc141b2d083f0",
+       "16494bf197a1101a9b9445eae9b14ddd5c2bfb83",
        []
       ]
      }
@@ -268501,21 +268563,9 @@
        ]
       },
       "pixel-manipulation": {
-       "2d.imageData.create2.nonfinite-expected.txt": [
-        "3047af28cce2b4d27a6721802562289496db1219",
-        []
-       ],
-       "2d.imageData.get.nonfinite-expected.txt": [
-        "0755a317939083bff9e9d566086e6d0a05f85bd2",
-        []
-       ],
        "2d.imageData.get.tiny-expected.txt": [
         "bc72eb78a8fbdd7219a460807b09547605eddea9",
         []
-       ],
-       "2d.imageData.put.nonfinite-expected.txt": [
-        "d52021cc00ba4e8e77ce5919e611ed42d3f94528",
-        []
        ]
       },
       "text": {
@@ -276643,6 +276693,10 @@
        ]
       },
       "the-dialog-element": {
+       "backdrop-dynamic-display-none-reference.html": [
+        "c49a11d41634dcd035f926cb97fe1db9e16dfb78",
+        []
+       ],
        "centering-iframe.sub.html": [
         "6ffd72296d8302c71866624b08b1b3213f1b5e4e",
         []
@@ -282000,7 +282054,7 @@
     ]
    },
    "lint.ignore": [
-    "49a71f640d8033b95b5ab674d5a7dc35893258b8",
+    "d486fb9ed3c10788d7c3a0b6a66ffa046e242b22",
     []
    ],
    "loading": {
@@ -285087,7 +285141,7 @@
      ]
     },
     "show-consume-activation.https-expected.txt": [
-     "6ce291242ae95fffa1a86775c2a1479651b2349b",
+     "bd3d471c79db74a3c3d1683882f5170114d1946a",
      []
     ],
     "show-consume-activation.https.html.ini": [
@@ -285171,6 +285225,10 @@
     "permissions-query-feature-policy-attribute.https.sub-expected.txt": [
      "b3a521320e8acb70c2f2199d608d4bd3379934e0",
      []
+    ],
+    "permissionsstatus-name-expected.txt": [
+     "94dd7854162c1b0a606755a610a74c9a088cce89",
+     []
     ]
    },
    "permissions-policy": {
@@ -288431,7 +288489,7 @@
      []
     ],
     "testharness.js": [
-     "f85b19fd9bd90c3476dedcbe5825b82fb40de82c",
+     "d35e297aab0714ca00fd27607369a653977cb9ae",
      []
     ],
     "testharness.js.headers": [
@@ -295253,6 +295311,10 @@
      []
     ],
     "resources": {
+     "check-accept-header-and-return-bundle.py": [
+      "c2c8ebb601de7f53e2b9c3208d45093da1bf8cb5",
+      []
+     ],
      "check-sec-fetch-dest-header-and-return-bundle.py": [
       "da36e49320369ddc94405d298746db562be50045",
       []
@@ -296242,7 +296304,7 @@
       ]
      },
      "conftest.py": [
-      "42b82c9ecf29a1aed48bfa959c20aba6edd1319e",
+      "fe9f5cd268240662d0d7a6753e58a7fbedecad4e",
       []
      ],
      "delete_all_cookies": {
@@ -296649,7 +296711,7 @@
        []
       ],
       "asserts.py": [
-       "e60d53b6c6f0c5baf8694b82332df517a782e671",
+       "bc59d7b39664fe57e31f1e1aaf0f370aed651633",
        []
       ],
       "authentication.py": [
@@ -296661,7 +296723,15 @@
        []
       ],
       "fixtures.py": [
-       "f7eb8bf825b8ec8c3308e5bc340b3ec7f68ce807",
+       "e42b0ad9a26fd295d67913a9ffed56483e913b14",
+       []
+      ],
+      "fixtures_bidi.py": [
+       "cdfa3a08558517c021f42a8600bdf7b0f67f977f",
+       []
+      ],
+      "fixtures_http.py": [
+       "2d961d7f60c858972201c51378a738612deee11a",
        []
       ],
       "helpers.py": [
@@ -297099,7 +297169,7 @@
      []
     ],
     "RTCRtpTransceiver.https-expected.txt": [
-     "d7dae0f9210361eae456b249de4d8b0719154fbb",
+     "cba73637158287119471b23117bf859f98019ea4",
      []
     ],
     "RTCStats-helper.js": [
@@ -297397,7 +297467,7 @@
      []
     ],
     "supported-stats-expected.txt": [
-     "75425233f4b59a99e9ee9c8da54f0c9c104519d5",
+     "0ba4f70d25511e8ea124a3fdc734e94d1b77e171",
      []
     ]
    },
@@ -315661,7 +315731,7 @@
       ]
      ],
      "navigate-respondWith-history-state.html": [
-      "e0031d510486365052f50c32f8a836cbdd2b7528",
+      "c7e64b568d45af3c37cbf432177d1c8432a0be83",
       [
        null,
        {}
@@ -315682,7 +315752,7 @@
       ]
      ],
      "navigate-respondWith.html": [
-      "70a560d9b496b6c94eb111d7773bc8339400dc71",
+      "c65da903a6cd5bc1d5df3bd1e4e2063d43b2155b",
       [
        null,
        {}
@@ -316202,8 +316272,15 @@
        {}
       ]
      ],
+     "respondWith-multiple-times-reject.html": [
+      "0e1bd1963f202b2865b562f9c0e8ce9a80db9bdf",
+      [
+       null,
+       {}
+      ]
+     ],
      "respondWith-multiple-times.html": [
-      "f1694432d59c31c0ebe08b5d75753f6bd62d04ff",
+      "5ca6db0476a27ed0267f6c1590c75ab681707bc9",
       [
        null,
        {}
@@ -347708,7 +347785,7 @@
        ]
       ],
       "rowspan-height-redistribution.html": [
-       "3357cbdc4b81832e7b830ae54ecb7132ede4414c",
+       "364ae321c901b073d5eba9655b8481089a3b2f01",
        [
         null,
         {}
@@ -355027,7 +355104,7 @@
       ]
      ],
      "variable-pseudo-element.html": [
-      "1c5413bd542ab640a0dc5f2ff2344076dd4495c2",
+      "ee61cbf3948a89427e0cefcf4e6c0c4736e7c255",
       [
        null,
        {}
@@ -355090,28 +355167,21 @@
       ]
      ],
      "variable-substitution-filters.html": [
-      "5dc10e1d82fd6519402bf403db6805ef9bade044",
-      [
-       null,
-       {}
-      ]
-     ],
-     "variable-substitution-plus-box-shadow.html": [
-      "06dfd3628108333392c40e1afbca5e8406a9da02",
+      "5e48073158207046deffc78397b31b2198f40926",
       [
        null,
        {}
       ]
      ],
      "variable-substitution-replaced-size.html": [
-      "581ea6b8f20e35ebe48f75e1b7e3e2c68f2046e3",
+      "29bae38e3e99b4524e87f7dbd06567497bee3190",
       [
        null,
        {}
       ]
      ],
      "variable-substitution-shadow-properties.html": [
-      "bd7b5ef334d6aa85ac8bfc66590ed4e0afc12e87",
+      "f825b200f344f9f6d491ea7bdb30566412264cc7",
       [
        null,
        {}
@@ -388516,7 +388586,7 @@
     },
     "private-network-access": {
      "non-secure-context.window.js": [
-      "8e55559ac081e66b1abad0afc1bc9eab96ce8161",
+      "6b2b6be7e09708b3d3b6d30d08f476d7bf548dbd",
       [
        "fetch/private-network-access/non-secure-context.window.html",
        {
@@ -388534,7 +388604,7 @@
       ]
      ],
      "secure-context.https.window.js": [
-      "889c3e0dc9d8da8879b3d0aed9d3bd8d3e6b3313",
+      "1218700786f7bf61e47389cdb22365d2cb2f642a",
       [
        "fetch/private-network-access/secure-context.https.window.html",
        {
@@ -414054,37 +414124,6 @@
         {}
        ]
       ],
-      "cross-origin-isolated.tentative.window.js": [
-       "8ab0e7106db42756c7ca3bda6c15fb618a5cde7a",
-       [
-        "html/cross-origin-embedder-policy/anonymous-iframe/cross-origin-isolated.tentative.window.html",
-        {
-         "script_metadata": [
-          [
-           "script",
-           "/common/get-host-info.sub.js"
-          ],
-          [
-           "script",
-           "/common/utils.js"
-          ],
-          [
-           "script",
-           "../credentialless/resources/common.js"
-          ],
-          [
-           "script",
-           "../credentialless/resources/dispatcher.js"
-          ],
-          [
-           "timeout",
-           "long"
-          ]
-         ],
-         "timeout": "long"
-        }
-       ]
-      ],
       "local-storage.tentative.https.html": [
        "a49eac706bea9840e9ff58a5790669f12109d230",
        [
@@ -425718,8 +425757,17 @@
          {}
         ]
        ],
+       "popup-light-dismiss-resize.tentative.html": [
+        "cec65f77dcaddfd170581992ddec02c53619898e",
+        [
+         null,
+         {
+          "testdriver": true
+         }
+        ]
+       ],
        "popup-light-dismiss.tentative.html": [
-        "649b594c2efb45e5c875008169fbad86d4cb8fe9",
+        "e0012587fd217a935409b6c70af4db5c94a73332",
         [
          null,
          {
@@ -443270,6 +443318,85 @@
       }
      ]
     ],
+    "read_write_async_bufferlength.tentative.https.any.js": [
+     "7424d24e5231fc5bafc3413cf68232773acfc883",
+     [
+      "native-io/read_write_async_bufferlength.tentative.https.any.html",
+      {
+       "script_metadata": [
+        [
+         "title",
+         "NativeIO API: Read/Write correctly handle small buffer lengths."
+        ],
+        [
+         "global",
+         "window,worker"
+        ],
+        [
+         "script",
+         "resources/support.js"
+        ]
+       ]
+      }
+     ],
+     [
+      "native-io/read_write_async_bufferlength.tentative.https.any.serviceworker.html",
+      {
+       "script_metadata": [
+        [
+         "title",
+         "NativeIO API: Read/Write correctly handle small buffer lengths."
+        ],
+        [
+         "global",
+         "window,worker"
+        ],
+        [
+         "script",
+         "resources/support.js"
+        ]
+       ]
+      }
+     ],
+     [
+      "native-io/read_write_async_bufferlength.tentative.https.any.sharedworker.html",
+      {
+       "script_metadata": [
+        [
+         "title",
+         "NativeIO API: Read/Write correctly handle small buffer lengths."
+        ],
+        [
+         "global",
+         "window,worker"
+        ],
+        [
+         "script",
+         "resources/support.js"
+        ]
+       ]
+      }
+     ],
+     [
+      "native-io/read_write_async_bufferlength.tentative.https.any.worker.html",
+      {
+       "script_metadata": [
+        [
+         "title",
+         "NativeIO API: Read/Write correctly handle small buffer lengths."
+        ],
+        [
+         "global",
+         "window,worker"
+        ],
+        [
+         "script",
+         "resources/support.js"
+        ]
+       ]
+      }
+     ]
+    ],
     "read_write_correct_arraybufferview_async_basic.tentative.https.any.js": [
      "46bcc8d5bd85dbb60edc4e824f6bc729f85582f4",
      [
@@ -443393,6 +443520,28 @@
       }
      ]
     ],
+    "read_write_sync_bufferlength.tentative.https.any.js": [
+     "3f45f2702c3152c5ffea4c0caba6abc482f2188e",
+     [
+      "native-io/read_write_sync_bufferlength.tentative.https.any.worker.html",
+      {
+       "script_metadata": [
+        [
+         "title",
+         "Synchronous NativeIO API: Read/Write correctly handle small buffer lengths."
+        ],
+        [
+         "global",
+         "dedicatedworker"
+        ],
+        [
+         "script",
+         "resources/support.js"
+        ]
+       ]
+      }
+     ]
+    ],
     "rename_async_basic.tentative.https.any.js": [
      "47c9ffc6b919417dfbc47499b8029d13788cd8bf",
      [
@@ -446148,7 +446297,7 @@
      ]
     ],
     "show-consume-activation.https.html": [
-     "0b92c4c15cf158457a9cfae6fab02171a49ca5f2",
+     "044fca5d40801fcad93fc5137a12fdfc8db4147c",
      [
       null,
       {
@@ -446748,6 +446897,13 @@
       {}
      ]
     ],
+    "permissionsstatus-name.html": [
+     "db1d1bb83eba9f55e68b1cc5a0f8224be98a36cf",
+     [
+      null,
+      {}
+     ]
+    ],
     "screen-wake-lock-permission.html": [
      "0fa69ff96a03b36d3fbd3de15a70f9b199074ebc",
      [
@@ -487507,6 +487663,13 @@
        {}
       ]
      ],
+     "subresource-loading-accept-header.https.tentative.sub.html": [
+      "e8aa5f902da22b04279c38a76ac13309406b6483",
+      [
+       null,
+       {}
+      ]
+     ],
      "subresource-loading-cors-error.https.tentative.html": [
       "43b1f36386f9196030e1a94d21ff7443a394aa90",
       [
@@ -529955,6 +530118,15 @@
          {}
         ]
        ]
+      },
+      "session_subscribe": {
+       "subscribe.py": [
+        "42bcde48d687b66fd9052105c5a0e3faf8cdffb4",
+        [
+         null,
+         {}
+        ]
+       ]
       }
      },
      "close_window": {
@@ -530297,7 +530469,7 @@
      },
      "find_element_from_shadow_root": {
       "user_prompts.py": [
-       "3813a7df5d324231e18b89ebf46d72729f220942",
+       "e1326cf599a4affe3c269f205bdbd4e791b8f346",
        [
         null,
         {
@@ -530330,7 +530502,7 @@
      },
      "find_elements_from_shadow_root": {
       "user_prompts.py": [
-       "c4b903c836ef8ed89cd234ebe170a66f3b24631a",
+       "9950999226debc864f66e2096e8d2108c620f022",
        [
         null,
         {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-case-sensitive-001.html b/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-case-sensitive-001.html
index 6644175e..df2b352 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-case-sensitive-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-case-sensitive-001.html
@@ -6,32 +6,26 @@
     <link rel="author" title="Noah Collins" href="mailto:noahcollins@gmail.com">
     <link rel="help" href="http://www.w3.org/TR/css-variables-1/#using-variables">
     <meta name="assert" content="Custom property names are case-sensitive">
-    <link rel="match" href="reference/css-vars-custom-property-case-sensitive-ref.html">
+    <link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
     <style type="text/css">
         :root {
-            --veryblue:   #22e;
-            --AlsoBlue:   #22e;
+            --lowercasegreen: green;
+            --MixedCaseGreen: green;
 
-            --veryred:   #f00;
-            --AlsoRed:   #f00;
+            --lowercasered: red;
+            --MixedCaseRed: red;
         }
-
-        /* These match the case of the declarations */
-        .blue-good-1  { color: var(--veryblue); }
-        .blue-good-2  { color: var(--AlsoBlue); }
-
-        /* These DO NOT match the case of the declarations */
-        .red-bad-1    { color: var(--VeryRed);  }
-        .red-bad-2    { color: var(--alsored);  }
+        div {
+            width: 100px;
+            height: 25px;
+        }
     </style>
 </head>
 <body>
-    <h2 class="blue-good-1">Valid CSS Variable Names</h2>
-    <p class="blue-good-1">This paragraph is styled using a valid CSS Variable name. It should be blue.</p>
-    <p class="blue-good-2">This paragraph is styled using a valid CSS Variable name. It should be blue.</p>
-    <br>
-    <h2 class="red-bad-1">Invalid CSS Variable Names</h2>
-    <p class="red-bad-1">This paragraph is styled using an invalid CSS Variable name. Fail if red.</p>
-    <p class="red-bad-2">This paragraph is styled using an invalid CSS Variable name. Fail if red.</p>
+    <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+    <div style="background-color: var(--lowercasegreen, red);"></div>
+    <div style="background-color: var(--MixedCaseGreen, red);"></div>
+    <div style="background-color: var(--LowerCaseRed, green);"></div>
+    <div style="background-color: var(--mixedcasered, green);"></div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-inheritance.html b/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-inheritance.html
index fc6cfa0..bbda51d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-inheritance.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/css-vars-custom-property-inheritance.html
@@ -6,25 +6,25 @@
     <link rel="author" title="Noah Collins" href="mailto:noahcollins@gmail.com">
     <link rel="help" href="http://www.w3.org/TR/css-variables-1/#using-variables">
     <meta name="assert" content="custom properties are resolved with the normal inheritance and cascade rules">
-    <link rel="match" href="reference/css-vars-custom-property-inheritance-ref.html">
+    <link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
     <style type="text/css">
 
         /* test cascade importance */
-        :root { --color: #1c1 !important; }
-        :root { --color: red; }
+        :root { --color-1: green !important; }
+        :root { --color-1: red; }
+        div.color1 { background-color: var(--color-1); }
 
         /* test cascade order */
-        * { color: red; }
+        :root { --color-2: green; }
+        div.color2 { background-color: red; }
+        div.color2 { background-color: var(--color-2); }
 
-        /* test cascade order */
-        * { color: var(--color); }
-
+        div { width: 100px; height: 50px; }
     </style>
 </head>
 <body>
-    <p>Green</p>
-    <p>Green</p>
-    <p>Green</p>
-    <p>The test passes if everything is green. Any red means the test failed.</p>
+    <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+    <div class=color1></div>
+    <div class=color2></div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/css-vars-custom-property-case-sensitive-ref.html b/third_party/blink/web_tests/external/wpt/css/css-variables/reference/css-vars-custom-property-case-sensitive-ref.html
deleted file mode 100644
index 30bad67f..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/css-vars-custom-property-case-sensitive-ref.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>CSS Variables Test: custom property names are case-sensitive</title>
-    <meta charset="UTF-8">
-    <link rel="author" title="Noah Collins" href="mailto:noahcollins@gmail.com">
-    <style type="text/css">
-        .blue-good-1  { color: #22e; }
-        .blue-good-2  { color: #22e; }
-    </style>
-</head>
-<body>
-    <h2 class="blue-good-1">Valid CSS Variable Names</h2>
-    <p class="blue-good-1">This paragraph is styled using a valid CSS Variable name. It should be blue.</p>
-    <p class="blue-good-2">This paragraph is styled using a valid CSS Variable name. It should be blue.</p>
-    <br>
-    <h2>Invalid CSS Variable Names</h2>
-    <p>This paragraph is styled using an invalid CSS Variable name. Fail if red.</p>
-    <p>This paragraph is styled using an invalid CSS Variable name. Fail if red.</p>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/css-vars-custom-property-inheritance-ref.html b/third_party/blink/web_tests/external/wpt/css/css-variables/reference/css-vars-custom-property-inheritance-ref.html
deleted file mode 100644
index fcacb7b..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/css-vars-custom-property-inheritance-ref.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>CSS Variables Test: custom properties use normal inheritance and cascade rules</title>
-    <link rel="author" title="Noah Collins" href="mailto:noahcollins@gmail.com">
-    <style type="text/css">
-        * { color: #1c1; }
-    </style>
-</head>
-<body>
-    <p>Green</p>
-    <p>Green</p>
-    <p>Green</p>
-    <p>The test passes if everything is green. Any red means the test failed.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-24.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-24.html
index ead972c2a..14fe47a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-24.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-24.html
@@ -16,10 +16,10 @@
 }
 p {
   color: orange;
-  --a: green;
+  --a: red;
   --b: crimson;
-  --a: var(--b) <!--;
-  color: var(--a);
+  --a: var(--b) <!--; /* valid at parse */
+  color: var(--a);    /* but IACVT at substitution */
 }
 </style>
 <p>This text must be green.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-25.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-25.html
index 64d1997..ad79f4c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-25.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-declaration-25.html
@@ -16,10 +16,10 @@
 }
 p {
   color: orange;
-  --a: green;
+  --a: red;
   --b: crimson;
-  --a: --> var(--b);
-  color: var(--a);
+  --a: --> var(--b); /* valid at parse */
+  color: var(--a);   /* but IACVT at substitution */
 }
 </style>
 <p>This text must be green.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-pseudo-element.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-pseudo-element.html
index 1c5413bd..ee61cbf 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-pseudo-element.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-pseudo-element.html
@@ -1,106 +1,68 @@
 <!DOCTYPE html>
 <html>
 <head>
-    <title>Parse, store, and serialize CSS variable references</title>
+    <title>Variables work in ::before/::after pseudos</title>
 
     <meta rel="author" title="Kevin Babbitt">
     <meta rel="author" title="Greg Whitworth">
     <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
-    <!-- This is not directly specified in the spec but should work -->
+    <link rel="author" title="Tab Atkins-Bittner" href="https://xanthir.com/contact/">
     <link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables">
 
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
 
-    <!--
-        https://drafts.csswg.org/css-syntax/#error-handling
-        If the stylesheet ends while any rule, declaration, function, string, etc. are still open, everything is automatically closed.
-    -->
-    <style id="variable-reference-left-open">
-        div
-        {
-            color: var(--my-color);
-            --my-color: blue;
-            --my-color2: red;
+    <style>
+        :root {
+            --color: green;
+            --color2: red;
         }
-
-        #div1::after
-        {
-            content: '[after]';
-            color: var(--my-color);
-            --my-color: orange;
-        }
-
-        #div2::after
-        {
-            content: '[after]';
-            color: var(--my-color2);
-        }
-
-        #div3::after
-        {
-            content: '[after]';
-            --my-color: orange;
-        }
-
-        #div4::after
-        {
-            content: '[after]';
-            color: var(--my-color);
-            --my-color: pink;
-        }
-
-        #div1::before
-        {
+        div::before {
             content: '[before]';
-            color: var(--my-color);
-            --my-color: orange;
+        }
+        div::after {
+            content: '[after]';
         }
 
-        #div2::before
-        {
-            content: '[before]';
-            color: var(--my-color2);
+        #div1 {
+            color: red;
+        }
+        #div1::before, #div1::after {
+            color: var(--color2);
+            --color2: green;
         }
 
-        #div3::before
-        {
-            content: '[before]';
-            --my-color: orange;
+        #div2 {
+            color: var(--color2);
+        }
+        #div2::before, #div2::after {
+            color: var(--color);
         }
 
-        #div4::before
-        {
-            content: '[before]';
-            color: var(--my-color);
-            --my-color: purple;
+        #div3 {
+            color: var(--color);
+        }
+        #div3::before, #div3::after {
+            --color: red;
         }
     </style>
-</head>
-<body>
+
     <div id="div1">div1</div>
     <div id="div2">div2</div>
     <div id="div3">div3</div>
-    <div id="div4">div4</div>
+    <span id="control" style="color: green;"></span>
 
-<script type="text/javascript">
+<script>
     "use strict";
 
-    var testcases = [
-        { ID: "div1", expectedAfterColor: "rgb(255, 165, 0)", expectedBeforeColor: "rgb(255, 165, 0)" },
-        { ID: "div2", expectedAfterColor: "rgb(255, 0, 0)", expectedBeforeColor: "rgb(255, 0, 0)" },
-        { ID: "div3", expectedAfterColor: "rgb(0, 0, 255)", expectedBeforeColor: "rgb(0, 0, 255)" },
-        { ID: "div4", expectedAfterColor: "rgb(255, 192, 203)", expectedBeforeColor: "rgb(128, 0, 128)" },
-    ];
-
-    testcases.forEach(function (testcase) {
+    [...document.querySelectorAll("div")].forEach(function (div) {
         test( function () {
-            var div = document.getElementById(testcase.ID);
-            var actualAfterColor = window.getComputedStyle(div, ':after').getPropertyValue('color');
+            const expectedColor = getComputedStyle(document.querySelector("#control")).color;
             var actualBeforeColor = window.getComputedStyle(div, ':before').getPropertyValue('color');
-            assert_equals(actualBeforeColor, testcase.expectedBeforeColor, "The color of the before pseudo element should match the expected color");
-            assert_equals(actualAfterColor, testcase.expectedAfterColor, "The color of the after pseudo element should match the expected color");
-        }, testcase.ID);
+            var actualAfterColor = window.getComputedStyle(div, ':after').getPropertyValue('color');
+            assert_equals(actualBeforeColor, expectedColor);
+            assert_equals(actualAfterColor, expectedColor);
+        }, div.getAttribute("id"));
     });
 </script>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-filters.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-filters.html
index 5dc10e1..5e48073 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-filters.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-filters.html
@@ -6,7 +6,6 @@
     <meta rel="author" title="Kevin Babbitt">
     <meta rel="author" title="Greg Whitworth">
     <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
-    <!-- This is testing filters functions with var() function -->
     <link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables">
 
     <script src="/resources/testharness.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-plus-box-shadow.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-plus-box-shadow.html
deleted file mode 100644
index 06dfd36..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-plus-box-shadow.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>box-shadow + variable substitution on same element</title>
-
-    <meta rel="author" title="Kevin Babbitt">
-    <meta rel="author" title="Greg Whitworth">
-    <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
-    <!-- This is testing filters functions with var() function -->
-    <link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables">
-
-    <script src="/resources/testharness.js"></script>
-    <script src="/resources/testharnessreport.js"></script>
-</head>
-<body>
-    <div id="target" style="box-shadow: 1px 1px 1px green; color: var(--alpha); --alpha: green;">This div should have green text and a green shadow.</div>
-
-    <script type="text/javascript">
-        "use strict";
-        let target = document.getElementById('target');
-        let computedStyle = window.getComputedStyle(target);
-
-        let templates = [
-            {
-                testName:"box-shadow",
-                value: computedStyle.boxShadow,
-                potentialValues: ["1px 1px 1px green", "rgb(0, 128, 0) 1px 1px 1px 0px"],
-                description: "Expected value should be 1px 1px 1px green or rgb(0, 128, 0) 1px 1px 1px 0px"
-            },
-            {
-                testName:"--alpha",
-                value: computedStyle.getPropertyValue("--alpha").trim(),
-                potentialValues: ["green"],
-                description: "Expected value is green"
-            },
-            {
-                testName:"color",
-                value: computedStyle.color,
-                potentialValues: ["rgb(0, 128, 0)", "rgba(0, 128, 0, 1)"],
-                description: "Expected value to be rgb(0, 128, 0) or rgba(0, 128, 0, 1)"
-            }
-        ];
-
-        templates.forEach(function (template) {
-            test( function () {
-                assert_in_array(template.value, template.potentialValues, template.description);
-            }, template.testName);
-        });
-    </script>
-</body>
-</html>
-
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-replaced-size.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-replaced-size.html
index 581ea6b8..29bae38 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-replaced-size.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-replaced-size.html
@@ -6,7 +6,6 @@
     <meta rel="author" title="Kevin Babbitt">
     <meta rel="author" title="Greg Whitworth">
     <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
-    <!-- This is testing filters functions with var() function -->
     <link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables">
 
     <script src="/resources/testharness.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-shadow-properties.html b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-shadow-properties.html
index bd7b5ef..f825b20 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-shadow-properties.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/variable-substitution-shadow-properties.html
@@ -6,7 +6,6 @@
     <meta rel="author" title="Kevin Babbitt">
     <meta rel="author" title="Greg Whitworth">
     <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
-    <!-- This is testing filters functions with var() function -->
     <link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables">
 
     <script src="/resources/testharness.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none-reference.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none-reference.html
new file mode 100644
index 0000000..c49a11d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none-reference.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<html>
+<title>Reference: Test that adding display: none; dynamically on ::backdrop makes it disappear</title>
+<meta charset="utf-8">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<p>Test passes if there is no red.</p>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none.html
new file mode 100644
index 0000000..573ed2d6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<title>Test that adding display: none; dynamically on ::backdrop makes it disappear</title>
+<meta charset="utf-8">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="backdrop-dynamic-display-none-reference.html">
+<p>Test passes if there is no red.</p>
+<dialog></dialog>
+<style>
+dialog { visibility: hidden; }
+::backdrop { background-color: red; }
+.hidden-backdrop::backdrop {
+    display: none;
+}
+</style>
+<script>
+dialog = document.querySelector("dialog");
+dialog.showModal();
+requestAnimationFrame(() => {
+    dialog.classList.add("hidden-backdrop");
+});
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https-expected.txt b/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https-expected.txt
index 6ce29124..bd3d471c 100644
--- a/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Calling share consumes user activation promise_rejects_dom: function "function() { throw e }" threw object "UnknownError: Renderer process could not establish or lost IPC connection to the PaymentRequest service in the browser process." that is not a DOMException NotAllowedError: property "name" is equal to "UnknownError", expected "NotAllowedError"
+FAIL Calling share consumes user activation promise_rejects_dom: function "function() { throw e }" threw object "UnknownError: Renderer process could not establish or lost IPC connection to the PaymentRequest service in the browser process." that is not a DOMException SecurityError: property "code" is equal to 0, expected 18
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https.html b/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https.html
index 0b92c4c..044fca5 100644
--- a/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https.html
+++ b/third_party/blink/web_tests/external/wpt/payment-request/show-consume-activation.https.html
@@ -38,7 +38,7 @@
         const pr = new PaymentRequest(defaultMethods, defaultDetails);
 
         // Not activated by user gesture, so not allowed!
-        await promise_rejects_dom(t, "NotAllowedError", pr.show());
+        await promise_rejects_dom(t, "SecurityError", pr.show());
 
         await test_driver.bless("Calls show() method");
 
@@ -47,7 +47,7 @@
 
         // The activation has been consumed, so calling show() again would require
         // a new gesture.
-        await promise_rejects_dom(t, "NotAllowedError", pr.show());
+        await promise_rejects_dom(t, "InvalidStateError", pr.show());
 
         // Abort the payment request
         pr.abort()
diff --git a/third_party/blink/web_tests/external/wpt/permissions/permissionsstatus-name-expected.txt b/third_party/blink/web_tests/external/wpt/permissions/permissionsstatus-name-expected.txt
new file mode 100644
index 0000000..94dd7854
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/permissions/permissionsstatus-name-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Test PermissionStatus's name attribute. assert_equals: Name was geolocation expected (string) "geolocation" but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/permissions/permissionsstatus-name.html b/third_party/blink/web_tests/external/wpt/permissions/permissionsstatus-name.html
new file mode 100644
index 0000000..db1d1bb8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/permissions/permissionsstatus-name.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Test PermissionStatus's name attribute.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id="log"></div>
+
+<script>
+promise_test(async () => {
+  const result = await navigator.permissions.query({
+    name: "geolocation",
+  });
+  assert_equals(result.name, "geolocation", "Name was geolocation");
+});
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/resources/testharness.js b/third_party/blink/web_tests/external/wpt/resources/testharness.js
index f85b19f..d35e297 100644
--- a/third_party/blink/web_tests/external/wpt/resources/testharness.js
+++ b/third_party/blink/web_tests/external/wpt/resources/testharness.js
@@ -2629,7 +2629,7 @@
     RemoteContext.prototype.remote_done = function(data) {
         if (tests.status.status === null &&
             data.status.status !== data.status.OK) {
-            tests.set_status(data.status.status, data.status.message, data.status.sack);
+            tests.set_status(data.status.status, data.status.message, data.status.stack);
         }
 
         for (let assert of data.asserts) {
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/session_subscribe/subscribe.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/session_subscribe/subscribe.py
new file mode 100644
index 0000000..42bcde48
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/session_subscribe/subscribe.py
@@ -0,0 +1,70 @@
+import asyncio
+
+import pytest
+
+from webdriver.bidi.error import InvalidArgumentException
+
+
+@pytest.mark.asyncio
+async def test_params_empty(bidi_session, send_blocking_command):
+    with pytest.raises(InvalidArgumentException):
+        response = await send_blocking_command("session.subscribe", {})
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize("value", [None, True, "foo", 42, {}])
+async def test_params_events_invalid_type(bidi_session, send_blocking_command, value):
+    with pytest.raises(InvalidArgumentException):
+        response = await send_blocking_command("session.subscribe", {"events": value})
+
+
+@pytest.mark.asyncio
+async def test_params_events_empty(bidi_session):
+    response = await bidi_session.session.subscribe(events=[])
+    assert response == {}
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize("value", [None, True, 42, [], {}])
+async def test_params_events_value_invalid_type(send_blocking_command, value):
+    with pytest.raises(InvalidArgumentException):
+        response = await send_blocking_command("session.subscribe", {"events": [value]})
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize("value", ["", "foo", "foo.bar"])
+async def test_params_events_value_invalid_event_name(send_blocking_command, value):
+    with pytest.raises(InvalidArgumentException):
+        response = await send_blocking_command("session.subscribe", {"events": [value]})
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize("value", [None, True, "foo", 42, {}])
+async def test_params_contexts_invalid_type(bidi_session, send_blocking_command, value):
+    with pytest.raises(InvalidArgumentException):
+        response = await send_blocking_command(
+            "session.subscribe",
+            {
+                "events": [],
+                "contexts": value,
+            }
+        )
+
+
+@pytest.mark.asyncio
+async def test_params_contexts_empty(bidi_session):
+    response = await bidi_session.session.subscribe(events=[], contexts=[])
+    assert response == {}
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize("value", [None, True, 42, [], {}])
+async def test_params_contexts_value_invalid_type(send_blocking_command, value):
+    with pytest.raises(InvalidArgumentException):
+        response = await send_blocking_command(
+            "session.subscribe",
+            {
+                "events": [],
+                "contexts": [value],
+            }
+        )
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/conftest.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/conftest.py
index 42b82c9..fe9f5cd 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/conftest.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/conftest.py
@@ -1 +1,5 @@
-pytest_plugins = "tests.support.fixtures"
+pytest_plugins = (
+    "tests.support.fixtures",
+    "tests.support.fixtures_bidi",
+    "tests.support.fixtures_http",
+)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/find_element_from_shadow_root/user_prompts.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/find_element_from_shadow_root/user_prompts.py
index 3813a7df..e1326cf 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/find_element_from_shadow_root/user_prompts.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/find_element_from_shadow_root/user_prompts.py
@@ -14,7 +14,7 @@
     return session.transport.send(
         "POST", "session/{session_id}/shadow/{shadow_id}/element".format(
             session_id=session.session_id,
-            element_id=shadow_id),
+            shadow_id=shadow_id),
         {"using": using, "value": value})
 
 
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/find_elements_from_shadow_root/user_prompts.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/find_elements_from_shadow_root/user_prompts.py
index c4b903c..9950999 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/find_elements_from_shadow_root/user_prompts.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/find_elements_from_shadow_root/user_prompts.py
@@ -14,7 +14,7 @@
     return session.transport.send(
         "POST", "session/{session_id}/shadow/{shadow_id}/elements".format(
             session_id=session.session_id,
-            element_id=shadow_id),
+            shadow_id=shadow_id),
         {"using": using, "value": value})
 
 
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py
index e60d53b..bc59d7b 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py
@@ -7,6 +7,7 @@
 
 # WebDriver specification ID: dfn-error-response-data
 errors = {
+    "detached shadow root": 404,
     "element click intercepted": 400,
     "element not selectable": 400,
     "element not interactable": 400,
@@ -23,6 +24,7 @@
     "no such cookie": 404,
     "no such element": 404,
     "no such frame": 404,
+    "no such shadow root": 404,
     "no such window": 404,
     "script timeout": 500,
     "session not created": 500,
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py
index f7eb8bf8..e42b0ad 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py
@@ -12,7 +12,6 @@
 from tests.support.helpers import cleanup_session, deep_update
 from tests.support.inline import build_inline
 from tests.support.http_request import HTTPRequest
-from tests.support.sync import Poll
 
 
 _current_session = None
@@ -21,8 +20,10 @@
 
 def pytest_configure(config):
     # register the capabilities marker
-    config.addinivalue_line("markers",
-        "capabilities: mark test to use capabilities")
+    config.addinivalue_line(
+        "markers",
+        "capabilities: mark test to use capabilities"
+    )
 
 
 @pytest.fixture
@@ -38,9 +39,9 @@
             metafunc.parametrize("capabilities", marker.args, ids=None)
 
 
-# Ensure that the event loop is restarted once per session rather than the default  of once per test
-# if we don't do this, tests will try to reuse a closed event loop and fail with an error that the "future
-# belongs to a different loop"
+# Ensure that the event loop is restarted once per session rather than the default
+# of once per test. If we don't do this, tests will try to reuse a closed event
+# loop and fail with an error that the "future belongs to a different loop".
 @pytest.fixture(scope="session")
 def event_loop():
     """Change event_loop fixture to session level."""
@@ -50,55 +51,6 @@
 
 
 @pytest.fixture
-def add_event_listeners(session):
-    """Register listeners for tracked events on element."""
-    def add_event_listeners(element, tracked_events):
-        element.session.execute_script("""
-            let element = arguments[0];
-            let trackedEvents = arguments[1];
-
-            if (!("events" in window)) {
-              window.events = [];
-            }
-
-            for (var i = 0; i < trackedEvents.length; i++) {
-              element.addEventListener(trackedEvents[i], function (event) {
-                window.events.push(event.type);
-              });
-            }
-            """, args=(element, tracked_events))
-    return add_event_listeners
-
-
-@pytest.fixture
-def create_cookie(session, url):
-    """Create a cookie"""
-    def create_cookie(name, value, **kwargs):
-        if kwargs.get("path", None) is not None:
-            session.url = url(kwargs["path"])
-
-        session.set_cookie(name, value, **kwargs)
-        return session.cookies(name)
-
-    return create_cookie
-
-
-@pytest.fixture
-def create_frame(session):
-    """Create an `iframe` element in the current browsing context and insert it
-    into the document. Return a reference to the newly-created element."""
-    def create_frame():
-        append = """
-            var frame = document.createElement('iframe');
-            document.body.appendChild(frame);
-            return frame;
-        """
-        return session.execute_script(append)
-
-    return create_frame
-
-
-@pytest.fixture
 def http(configuration):
     return HTTPRequest(configuration["host"], configuration["port"])
 
@@ -122,14 +74,14 @@
     }
 
 
-async def reset_current_session_if_necessary(caps, request_bidi):
+async def reset_current_session_if_necessary(caps):
     global _current_session
 
-    # If there is a session with different capabilities active or the current session
-    # is of different type than the one we would like to create, end it now.
+    # If there is a session with different requested capabilities active than
+    # the one we would like to create, end it now.
     if _current_session is not None:
-        is_bidi = isinstance(_current_session, webdriver.BidiSession)
-        if is_bidi != request_bidi or not _current_session.match(caps):
+        if not _current_session.match(caps):
+            is_bidi = isinstance(_current_session, webdriver.BidiSession)
             if is_bidi:
                 await _current_session.end()
             else:
@@ -144,7 +96,8 @@
     By default the session will stay open after each test, but we always try to start a
     new one and assume that if that fails there is already a valid session. This makes it
     possible to recover from some errors that might leave the session in a bad state, but
-    does not demand that we start a new session per test."""
+    does not demand that we start a new session per test.
+    """
     global _current_session
 
     # Update configuration capabilities with custom ones from the
@@ -153,7 +106,7 @@
     deep_update(caps, capabilities)
     caps = {"alwaysMatch": caps}
 
-    await reset_current_session_if_necessary(caps, False)
+    await reset_current_session_if_necessary(caps)
 
     if _current_session is None:
         _current_session = webdriver.Session(
@@ -179,21 +132,25 @@
 
 @pytest.fixture(scope="function")
 async def bidi_session(capabilities, configuration, request):
-    """Create and start a bidi session for a test that does not itself test
-    bidi session creation.
+    """Create and start a bidi session.
+
+    Can be used for a test that does not itself test bidi session creation.
+
     By default the session will stay open after each test, but we always try to start a
     new one and assume that if that fails there is already a valid session. This makes it
     possible to recover from some errors that might leave the session in a bad state, but
-    does not demand that we start a new session per test."""
+    does not demand that we start a new session per test.
+    """
     global _current_session
 
     # Update configuration capabilities with custom ones from the
     # capabilities fixture, which can be set by tests
     caps = copy.deepcopy(configuration["capabilities"])
+    caps.update({"webSocketUrl": True})
     deep_update(caps, capabilities)
     caps = {"alwaysMatch": caps}
 
-    await reset_current_session_if_necessary(caps, True)
+    await reset_current_session_if_necessary(caps)
 
     if _current_session is None:
         _current_session = webdriver.Session(
@@ -236,93 +193,8 @@
 
 
 @pytest.fixture
-def create_dialog(session):
-    """Create a dialog (one of "alert", "prompt", or "confirm") and provide a
-    function to validate that the dialog has been "handled" (either accepted or
-    dismissed) by returning some value."""
-
-    def create_dialog(dialog_type, text=None):
-        assert dialog_type in ("alert", "confirm", "prompt"), (
-            "Invalid dialog type: '%s'" % dialog_type)
-
-        if text is None:
-            text = ""
-
-        assert isinstance(text, str), "`text` parameter must be a string"
-
-        # Script completes itself when the user prompt has been opened.
-        # For prompt() dialogs, add a value for the 'default' argument,
-        # as some user agents (IE, for example) do not produce consistent
-        # values for the default.
-        session.execute_async_script("""
-            let dialog_type = arguments[0];
-            let text = arguments[1];
-
-            setTimeout(function() {
-              if (dialog_type == 'prompt') {
-                window.dialog_return_value = window[dialog_type](text, '');
-              } else {
-                window.dialog_return_value = window[dialog_type](text);
-              }
-            }, 0);
-            """, args=(dialog_type, text))
-
-        wait = Poll(
-            session,
-            timeout=15,
-            ignored_exceptions=webdriver.NoSuchAlertException,
-            message="No user prompt with text '{}' detected".format(text))
-        wait.until(lambda s: s.alert.text == text)
-
-    return create_dialog
-
-
-@pytest.fixture
-def closed_frame(session, url):
-    original_handle = session.window_handle
-    new_handle = session.new_window()
-
-    session.window_handle = new_handle
-
-    session.url = url("/webdriver/tests/support/html/frames.html")
-
-    subframe = session.find.css("#sub-frame", all=False)
-    session.switch_frame(subframe)
-
-    deleteframe = session.find.css("#delete-frame", all=False)
-    session.switch_frame(deleteframe)
-
-    button = session.find.css("#remove-parent", all=False)
-    button.click()
-
-    yield
-
-    session.window.close()
-    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
-
-    session.window_handle = original_handle
-
-
-@pytest.fixture
-def closed_window(session, inline):
-    original_handle = session.window_handle
-    new_handle = session.new_window()
-
-    session.window_handle = new_handle
-    session.url = inline("<input id='a' value='b'>")
-    element = session.find.css("input", all=False)
-
-    session.window.close()
-    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
-
-    yield (original_handle, element)
-
-    session.window_handle = original_handle
-
-
-@pytest.fixture
 def inline(url):
-    """Takes a source extract and produces well-formed documents.
+    """Take a source extract and produces well-formed documents.
 
     Based on the desired document type, the extract is embedded with
     predefined boilerplate in order to produce well-formed documents.
@@ -350,7 +222,7 @@
 
 @pytest.fixture
 def iframe(inline):
-    """Inlines document extract as the source document of an <iframe>."""
+    """Inline document extract as the source document of an <iframe>."""
     def iframe(src, **kwargs):
         return "<iframe src='{}'></iframe>".format(inline(src, **kwargs))
 
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py
new file mode 100644
index 0000000..cdfa3a0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py
@@ -0,0 +1,14 @@
+import asyncio
+from typing import Any, Mapping
+
+import pytest
+import webdriver
+
+
+@pytest.fixture
+def send_blocking_command(bidi_session):
+    """Send a blocking command that awaits until the BiDi response has been received."""
+    async def send_blocking_command(command: str, params: Mapping[str, Any]) -> Mapping[str, Any]:
+        future_response = await bidi_session.send_command(command, params)
+        return await future_response
+    return send_blocking_command
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_http.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_http.py
new file mode 100644
index 0000000..2d961d7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_http.py
@@ -0,0 +1,152 @@
+import pytest
+from webdriver.error import NoSuchAlertException
+
+from tests.support.sync import Poll
+
+
+@pytest.fixture
+def add_event_listeners(session):
+    """Register listeners for tracked events on element."""
+    def add_event_listeners(element, tracked_events):
+        element.session.execute_script("""
+            let element = arguments[0];
+            let trackedEvents = arguments[1];
+
+            if (!("events" in window)) {
+              window.events = [];
+            }
+
+            for (var i = 0; i < trackedEvents.length; i++) {
+              element.addEventListener(trackedEvents[i], function (event) {
+                window.events.push(event.type);
+              });
+            }
+            """, args=(element, tracked_events))
+    return add_event_listeners
+
+
+@pytest.fixture
+def closed_frame(session, url):
+    """Create a frame and remove it after switching to it.
+
+    The removed frame will be kept selected, which allows to test for invalid
+    browsing context references.
+    """
+    original_handle = session.window_handle
+    new_handle = session.new_window()
+
+    session.window_handle = new_handle
+
+    session.url = url("/webdriver/tests/support/html/frames.html")
+
+    subframe = session.find.css("#sub-frame", all=False)
+    session.switch_frame(subframe)
+
+    deleteframe = session.find.css("#delete-frame", all=False)
+    session.switch_frame(deleteframe)
+
+    button = session.find.css("#remove-parent", all=False)
+    button.click()
+
+    yield
+
+    session.window.close()
+    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
+
+    session.window_handle = original_handle
+
+
+@pytest.fixture
+def closed_window(session, inline):
+    """Create a window and close it immediately.
+
+    The window handle will be kept selected, which allows to test for invalid
+    top-level browsing context references.
+    """
+    original_handle = session.window_handle
+    new_handle = session.new_window()
+
+    session.window_handle = new_handle
+    session.url = inline("<input id='a' value='b'>")
+    element = session.find.css("input", all=False)
+
+    session.window.close()
+    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
+
+    yield (original_handle, element)
+
+    session.window_handle = original_handle
+
+
+@pytest.fixture
+def create_cookie(session, url):
+    """Create a cookie."""
+    def create_cookie(name, value, **kwargs):
+        if kwargs.get("path", None) is not None:
+            session.url = url(kwargs["path"])
+
+        session.set_cookie(name, value, **kwargs)
+        return session.cookies(name)
+
+    return create_cookie
+
+
+@pytest.fixture
+def create_dialog(session):
+    """Create a dialog (one of "alert", "prompt", or "confirm").
+
+    Also it provides a function to validate that the dialog has been "handled"
+    (either accepted or dismissed) by returning some value.
+    """
+    def create_dialog(dialog_type, text=None):
+        assert dialog_type in ("alert", "confirm", "prompt"), (
+            "Invalid dialog type: '%s'" % dialog_type)
+
+        if text is None:
+            text = ""
+
+        assert isinstance(text, str), "`text` parameter must be a string"
+
+        # Script completes itself when the user prompt has been opened.
+        # For prompt() dialogs, add a value for the 'default' argument,
+        # as some user agents (IE, for example) do not produce consistent
+        # values for the default.
+        session.execute_async_script("""
+            let dialog_type = arguments[0];
+            let text = arguments[1];
+
+            setTimeout(function() {
+              if (dialog_type == 'prompt') {
+                window.dialog_return_value = window[dialog_type](text, '');
+              } else {
+                window.dialog_return_value = window[dialog_type](text);
+              }
+            }, 0);
+            """, args=(dialog_type, text))
+
+        wait = Poll(
+            session,
+            timeout=15,
+            ignored_exceptions=NoSuchAlertException,
+            message="No user prompt with text '{}' detected".format(text))
+        wait.until(lambda s: s.alert.text == text)
+
+    return create_dialog
+
+
+@pytest.fixture
+def create_frame(session):
+    """Create an `iframe` element.
+
+    The element will be inserted into the document of the current browsing
+    context. Return a reference to the newly-created element.
+    """
+    def create_frame():
+        append = """
+            var frame = document.createElement('iframe');
+            document.body.appendChild(frame);
+            return frame;
+        """
+        return session.execute_script(append)
+
+    return create_frame
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/payment-request/show-consume-activation.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/payment-request/show-consume-activation.https-expected.txt
new file mode 100644
index 0000000..6ce29124
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/payment-request/show-consume-activation.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Calling share consumes user activation promise_rejects_dom: function "function() { throw e }" threw object "UnknownError: Renderer process could not establish or lost IPC connection to the PaymentRequest service in the browser process." that is not a DOMException NotAllowedError: property "name" is equal to "UnknownError", expected "NotAllowedError"
+Harness: the test ran to completion.
+