Import wpt@8e7c3e5b87b0d39b3ae84818422c4525917b2f34

Using wpt-import in Chromium 2c93e1a024db20471e5a7f1b0c4cc8e9e4f6a3f1.

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
R=rubber-stamper@appspot.gserviceaccount.com

No-Export: true
Cq-Include-Trybots: luci.chromium.try:linux-wpt-identity-fyi-rel,linux-wpt-input-fyi-rel,linux-blink-rel
Change-Id: I7657625cb3b120f211a0b20365578a73f914bbcc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3487587
Auto-Submit: WPT Autoroller <wpt-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/main@{#974583}
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 44d67b4..2b83038 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -7302,7 +7302,7 @@
 crbug.com/1274917 external/wpt/content-security-policy/inheritance/history-iframe.sub.html [ Failure Pass Timeout ]
 
 # Test is very flaky (score of 223).
-crbug.com/1274919 http/tests/inspector-protocol/page/consecutive-navigate.js [ Pass Timeout Failure ]
+crbug.com/1274919 http/tests/inspector-protocol/page/consecutive-navigate.js [ Failure Pass Timeout ]
 
 # Sheriff 2021-11-23
 crbug.com/1046784 http/tests/devtools/tracing/timeline-receive-response-event.js [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version
index cf0534b6..49b6476a 100644
--- a/third_party/blink/web_tests/external/Version
+++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@
-Version: d6d38e3e6e4b1a0eb8e78290af661fa8a92501f7
+Version: 8e7c3e5b87b0d39b3ae84818422c4525917b2f34
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 a2934f76..f6e2c9c 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
@@ -280,6 +280,13 @@
     },
     "css-backgrounds": {
      "animations": {
+      "background-color-animation-backdrop-infinite-duration-crash.html": [
+       "40aa54debccf33fe0391d686386387d695bc80ef",
+       [
+        null,
+        {}
+       ]
+      ],
       "background-color-animation-field-crash.html": [
        "8e702fbac630b69d2b490005749575bac5718e08",
        [
@@ -1628,6 +1635,13 @@
        {}
       ]
      ],
+     "placeholder-as-multicol-crash.html": [
+      "8407f95d7f3489de2f476a8993c10326fe5801ac",
+      [
+       null,
+       {}
+      ]
+     ],
      "placeholder-input-dynamic-crash.html": [
       "28ab898a6d906bec3aab6891f1fe333d3ccf23f5",
       [
@@ -312591,7 +312605,7 @@
      ]
     },
     "idlharness-shadowrealm.js": [
-     "89990400d24f6795aadb77b91d77be6e986f48f4",
+     "f9c1e37c1c427ad5258dc699b1ec2a173f0b94af",
      []
     ],
     "idlharness.js": [
@@ -362018,7 +362032,7 @@
        ]
       ],
       "box-shadow-interpolation.html": [
-       "d6c438737d1192c542aef194b8bf7bfdf9d07102",
+       "4ed55abc9e6c914493d3caca42dd126e4dd7e659",
        [
         null,
         {}
diff --git a/third_party/blink/web_tests/external/wpt/resources/idlharness-shadowrealm.js b/third_party/blink/web_tests/external/wpt/resources/idlharness-shadowrealm.js
index 89990400..f9c1e37c 100644
--- a/third_party/blink/web_tests/external/wpt/resources/idlharness-shadowrealm.js
+++ b/third_party/blink/web_tests/external/wpt/resources/idlharness-shadowrealm.js
@@ -39,31 +39,31 @@
             return fetch_text("/interfaces/" + spec + ".idl");
         }));
         const idls = JSON.stringify(specs);
-        const code = `
-            const idls = ${idls};
-            let results;
-            add_completion_callback(function (tests, harness_status, asserts_run) {
-                results = tests;
-            });
 
-            // Without the wrapping test, testharness.js will think it's done after it has run
-            // the first idlharness test.
-            test(() => {
-                const idl_array = new IdlArray();
-                for (let i = 0; i < ${srcs.length}; i++) {
-                    idl_array.add_idls(idls[i]);
-                }
-                for (let i = ${srcs.length}; i < ${srcs.length + deps.length}; i++) {
-                    idl_array.add_dependency_idls(idls[i]);
-                }
-                idl_array.test();
-            }, "setup");
-            String(JSON.stringify(results))
-        `;
+        const results = JSON.parse(await new Promise(
+          realm.evaluate(`(resolve,reject) => {
+              const idls = ${idls};
+              add_completion_callback(function (tests, harness_status, asserts_run) {
+                resolve(JSON.stringify(tests));
+              });
+
+              // Without the wrapping test, testharness.js will think it's done after it has run
+              // the first idlharness test.
+              test(() => {
+                  const idl_array = new IdlArray();
+                  for (let i = 0; i < ${srcs.length}; i++) {
+                      idl_array.add_idls(idls[i]);
+                  }
+                  for (let i = ${srcs.length}; i < ${srcs.length + deps.length}; i++) {
+                      idl_array.add_dependency_idls(idls[i]);
+                  }
+                  idl_array.test();
+              }, "setup");
+          }`)
+        ));
 
         // We ran the tests in the ShadowRealm and gathered the results. Now treat them as if
         // we'd run them directly here, so we can see them.
-        const results = JSON.parse(realm.evaluate(code));
         for (const {name, status, message} of results) {
             // TODO: make this an API in testharness.js - needs RFC?
             promise_test(t => {t.set_status(status, message); t.phase = t.phases.HAS_RESULT; t.done()}, name);