瀏覽代碼

LibWeb/Streams: Add FIXMEs to incorrect invoke_callback() invocations

Linus Groh 2 年之前
父節點
當前提交
6b35cca65b
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp

+ 7 - 0
Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp

@@ -726,6 +726,7 @@ WebIDL::ExceptionOr<void> set_up_readable_stream_default_controller_from_underly
     // 5. If underlyingSourceDict["start"] exists, then set startAlgorithm to an algorithm which returns the result of invoking underlyingSourceDict["start"] with argument list « controller » and callback this value underlyingSource.
     if (underlying_source.start) {
         start_algorithm = [&, start = underlying_source.start]() -> WebIDL::ExceptionOr<JS::GCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*start, underlying_source_value, controller)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };
@@ -734,6 +735,7 @@ WebIDL::ExceptionOr<void> set_up_readable_stream_default_controller_from_underly
     // 6. If underlyingSourceDict["pull"] exists, then set pullAlgorithm to an algorithm which returns the result of invoking underlyingSourceDict["pull"] with argument list « controller » and callback this value underlyingSource.
     if (underlying_source.pull) {
         pull_algorithm = [&, pull = underlying_source.pull]() -> WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*pull, underlying_source_value, controller)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };
@@ -742,6 +744,7 @@ WebIDL::ExceptionOr<void> set_up_readable_stream_default_controller_from_underly
     // 7. If underlyingSourceDict["cancel"] exists, then set cancelAlgorithm to an algorithm which takes an argument reason and returns the result of invoking underlyingSourceDict["cancel"] with argument list « reason » and callback this value underlyingSource.
     if (underlying_source.cancel) {
         cancel_algorithm = [&, cancel = underlying_source.cancel](auto const& reason) -> WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*cancel, underlying_source_value, reason)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };
@@ -1729,6 +1732,7 @@ WebIDL::ExceptionOr<void> set_up_writable_stream_default_controller_from_underly
     // 6. If underlyingSinkDict["start"] exists, then set startAlgorithm to an algorithm which returns the result of invoking underlyingSinkDict["start"] with argument list « controller » and callback this value underlyingSink.
     if (underlying_sink.start) {
         start_algorithm = [&, callback = underlying_sink.start]() -> WebIDL::ExceptionOr<JS::GCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*callback, underlying_sink_value, controller)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };
@@ -1737,6 +1741,7 @@ WebIDL::ExceptionOr<void> set_up_writable_stream_default_controller_from_underly
     // 7. If underlyingSinkDict["write"] exists, then set writeAlgorithm to an algorithm which takes an argument chunk and returns the result of invoking underlyingSinkDict["write"] with argument list « chunk, controller » and callback this value underlyingSink.
     if (underlying_sink.write) {
         write_algorithm = [&, callback = underlying_sink.write](JS::Value chunk) -> WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*callback, underlying_sink_value, chunk, controller)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };
@@ -1745,6 +1750,7 @@ WebIDL::ExceptionOr<void> set_up_writable_stream_default_controller_from_underly
     // 8. If underlyingSinkDict["close"] exists, then set closeAlgorithm to an algorithm which returns the result of invoking underlyingSinkDict["close"] with argument list «» and callback this value underlyingSink.
     if (underlying_sink.close) {
         close_algorithm = [&, callback = underlying_sink.close]() -> WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*callback, underlying_sink_value)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };
@@ -1753,6 +1759,7 @@ WebIDL::ExceptionOr<void> set_up_writable_stream_default_controller_from_underly
     // 9. If underlyingSinkDict["abort"] exists, then set abortAlgorithm to an algorithm which takes an argument reason and returns the result of invoking underlyingSinkDict["abort"] with argument list « reason » and callback this value underlyingSink.
     if (underlying_sink.abort) {
         abort_algorithm = [&, callback = underlying_sink.abort](JS::Value reason) -> WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> {
+            // FIXME: This needs to create a rejected Promise for throw completions, which invoke_callback() currently doesn't do.
             auto result = TRY(WebIDL::invoke_callback(*callback, underlying_sink_value, reason)).release_value();
             return WebIDL::create_resolved_promise(realm, result);
         };