WebKit export of https://bugs.webkit.org/show_bug.cgi?id=220631 (#27221)

diff --git a/fetch/nosniff/parsing-nosniff.window.js b/fetch/nosniff/parsing-nosniff.window.js
index 043e659..2a26486 100644
--- a/fetch/nosniff/parsing-nosniff.window.js
+++ b/fetch/nosniff/parsing-nosniff.window.js
@@ -4,21 +4,24 @@
   for (let i = 0; i < allTestData.length; i++) {
     const testData = allTestData[i],
           input = encodeURIComponent(testData.input);
-    async_test(t => {
+    promise_test(t => {
+      let resolve;
+      const promise = new Promise(r => resolve = r);
       const script = document.createElement("script");
       t.add_cleanup(() => script.remove());
       // A <script> element loading a classic script does not care about the MIME type, unless
       // X-Content-Type-Options: nosniff is specified, in which case a JavaScript MIME type is
       // enforced, which x/x is not.
       if (testData.nosniff) {
-        script.onerror = t.step_func_done();
+        script.onerror = resolve;
         script.onload = t.unreached_func("Script should not have loaded");
       } else {
         script.onerror = t.unreached_func("Script should have loaded");
-        script.onload = t.step_func_done();
+        script.onload = resolve;
       }
       script.src = "resources/nosniff.py?nosniff=" + input;
       document.body.appendChild(script);
+      return promise;
     }, input);
   }
 }