Repository: denoland/deno
Pull request: fix(ext/web): update ongoing promise in async iterator `return()` method

See https://github.com/whatwg/webidl/pull/1387 for context.

There are new WPT tests for this change in https://github.com/web-platform-tests/wpt/pull/44456. They pass on my local machine, but I'm not sure if I should update the WPT submodule for all of Deno as part of this PR?

Fixes #22389

Changed files:
filename: ext/web/06_streams.js
patch: @@ -4964,11 +4964,11 @@ const readableStreamAsyncIteratorPrototype = ObjectSetPrototypeOf({
       return PromiseResolve({ value: undefined, done: true });
     };
 
-    const returnPromise = reader[_iteratorNext]
+    reader[_iteratorNext] = reader[_iteratorNext]
       ? PromisePrototypeThen(reader[_iteratorNext], returnSteps, returnSteps)
       : returnSteps();
     return PromisePrototypeThen(
-      returnPromise,
+      reader[_iteratorNext],
       () => ({ value: arg, done: true }),
     );
   },

filename: tests/wpt/runner/expectation.json
patch: @@ -2795,7 +2795,26 @@
       "XSLTProcessor interface: operation reset()",
       "Window interface: attribute event",
       "idl_test setup",
-      "ShadowRoot interface: attribute clonable"
+      "ShadowRoot interface: attribute clonable",
+      "Document interface: operation prepend((Node or TrustedScript or DOMString)...)",
+      "Document interface: operation append((Node or TrustedScript or DOMString)...)",
+      "Document interface: operation replaceChildren((Node or TrustedScript or DOMString)...)",
+      "DocumentType interface: operation before((Node or TrustedScript or DOMString)...)",
+      "DocumentType interface: operation after((Node or TrustedScript or DOMString)...)",
+      "DocumentType interface: operation replaceWith((Node or TrustedScript or DOMString)...)",
+      "DocumentFragment interface: operation prepend((Node or TrustedScript or DOMString)...)",
+      "DocumentFragment interface: operation append((Node or TrustedScript or DOMString)...)",
+      "DocumentFragment interface: operation replaceChildren((Node or TrustedScript or DOMString)...)",
+      "ShadowRoot interface: attribute serializable",
+      "Element interface: operation prepend((Node or TrustedScript or DOMString)...)",
+      "Element interface: operation append((Node or TrustedScript or DOMString)...)",
+      "Element interface: operation replaceChildren((Node or TrustedScript or DOMString)...)",
+      "Element interface: operation before((Node or TrustedScript or DOMString)...)",
+      "Element interface: operation after((Node or TrustedScript or DOMString)...)",
+      "Element interface: operation replaceWith((Node or TrustedScript or DOMString)...)",
+      "CharacterData interface: operation before((Node or TrustedScript or DOMString)...)",
+      "CharacterData interface: operation after((Node or TrustedScript or DOMString)...)",
+      "CharacterData interface: operation replaceWith((Node or TrustedScript or DOMString)...)"
     ],
     "idlharness.window.html?include=Node": [
       "Node interface: existence and properties of interface object",
@@ -3296,8 +3315,18 @@
         "valueOf.any.html": true,
         "valueOf.any.worker.html": true
       },
-      "idlharness.any.html": true,
-      "idlharness.any.worker.html": true,
+      "idlharness.any.html": [
+        "Memory interface: operation toFixedLengthBuffer()",
+        "Memory interface: operation toResizableBuffer()",
+        "Memory interface: [object WebAssembly.Memory] must inherit property \"toFixedLengthBuffer()\" with the proper type",
+        "Memory interface: [object WebAssembly.Memory] must inherit property \"toResizableBuffer()\" with the proper type"
+      ],
+      "idlharness.any.worker.html": [
+        "Memory interface: operation toFixedLengthBuffer()",
+        "Memory interface: operation toResizableBuffer()",
+        "Memory interface: [object WebAssembly.Memory] must inherit property \"toFixedLengthBuffer()\" with the proper type",
+        "Memory interface: [object WebAssembly.Memory] must inherit property \"toResizableBuffer()\" with the proper type"
+      ],
       "instance": {
         "constructor-bad-imports.any.html": true,
         "constructor-bad-imports.any.worker.html": true,
@@ -4512,7 +4541,15 @@
       "<a>: Setting <http://example.net>.hash = ' ' Trailing space should be encoded",
       "<area>: Setting <http://example.net>.hash = ' ' Trailing space should be encoded",
       "<a>: Setting <http://example.net>.hash = '\u0000' Trailing C0 control should be encoded",
-      "<area>: Setting <http://example.net>.hash = '\u0000' Trailing C0 control should be encoded"
+      "<area>: Setting <http://example.net>.hash = '\u0000' Trailing C0 control should be encoded",
+      "<a>: Setting <http://example.net/path>.host = 'example.com?stuff:8080' Stuff after a ? delimiter is ignored, trailing 'port'",
+      "<area>: Setting <http://example.net/path>.host = 'example.com?stuff:8080' Stuff after a ? delimiter is ignored, trailing 'port'",
+      "<a>: Setting <http://example.net:8080>.host = 'example.com:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error",
+      "<area>: Setting <http://example.net:8080>.host = 'example.com:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error",
+      "<a>: Setting <http://example.net:8080/test>.host = '[::1]:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error",
+      "<area>: Setting <http://example.net:8080/test>.host = '[::1]:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error",
+      "<a>: Setting <http://example.net:8080/test>.host = '[::1]' IPv6 without port",
+      "<area>: Setting <http://example.net:8080/test>.host = '[::1]' IPv6 without port"
     ],
     "url-setters-a-area.window.html?include=file": [
       "<a>: Setting <file://localhost/>.protocol = 'http' Can’t switch from file URL with no host",
@@ -4599,7 +4636,9 @@
       "URL: Setting <non-spec:/>.pathname = '//p'",
       "URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path",
       "URL: Setting <data:space  ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths",
-      "URL: Setting <sc:space  ?query#fragment>.search = ''"
+      "URL: Setting <sc:space  ?query#fragment>.search = ''",
+      "URL: Setting <http://example.net:8080>.host = 'example.com:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error",
+      "URL: Setting <http://example.net:8080/test>.host = '[::1]:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error"
     ],
     "url-setters.any.html?include=file": [
       "URL: Setting <file://monkey/>.pathname = '\\\\' File URLs and (back)slashes",
@@ -4621,7 +4660,9 @@
       "URL: Setting <non-spec:/>.pathname = '//p'",
       "URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path",
       "URL: Setting <data:space  ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths",
-      "URL: Setting <sc:space  ?query#fragment>.search = ''"
+      "URL: Setting <sc:space  ?query#fragment>.search = ''",
+      "URL: Setting <http://example.net:8080>.host = 'example.com:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error",
+      "URL: Setting <http://example.net:8080/test>.host = '[::1]:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error"
     ],
     "url-setters.any.worker.html?include=file": [
       "URL: Setting <file://monkey/>.pathname = '\\\\' File URLs and (back)slashes",
@@ -6603,8 +6644,8 @@
         ],
         "forbidden-method.any.html": true,
         "forbidden-method.any.worker.html": true,
-        "request-bad-port.any.html": false,
-        "request-bad-port.any.worker.html": false,
+        "request-bad-port.any.html": true,
+        "request-bad-port.any.worker.html": true,
         "request-cache-default-conditional.any.html": true,
         "request-cache-default-conditional.any.worker.html": true,
         "request-cache-default.any.html": [

filename: tests/wpt/suite
patch: @@ -1 +1 @@
-Subproject commit daa07cf3c47652ed67e637f2a39bbc34f91cfe10
+Subproject commit 5e8f71d73049d4fca2a8cbc62d40e821400f1624