From 3033929bb63cb1ffb402295df2bc29260b00be3f Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 9 Apr 2025 08:32:19 -0400 Subject: [PATCH] LibWeb: Pass abort signal as its concrete type to ReadableStreamPipeTo There's no real need to wrap it in a JS::Value just to unrwap it again. --- Libraries/LibWeb/Streams/AbstractOperations.cpp | 6 ++---- Libraries/LibWeb/Streams/AbstractOperations.h | 2 +- Libraries/LibWeb/Streams/ReadableStream.cpp | 6 +++--- Libraries/LibWeb/Streams/ReadableStream.h | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Libraries/LibWeb/Streams/AbstractOperations.cpp index 9e14361459a..448c0cf7811 100644 --- a/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -290,7 +290,7 @@ bool readable_stream_has_default_reader(ReadableStream const& stream) } // https://streams.spec.whatwg.org/#readable-stream-pipe-to -GC::Ref readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool, bool, bool, JS::Value signal) +GC::Ref readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool, bool, bool, GC::Ptr signal) { auto& realm = source.realm(); @@ -299,10 +299,8 @@ GC::Ref readable_stream_pipe_to(ReadableStream& source, Writabl // 3. Assert: preventClose, preventAbort, and preventCancel are all booleans. // 4. If signal was not given, let signal be undefined. - // NOTE: Done by default argument - // 5. Assert: either signal is undefined, or signal implements AbortSignal. - VERIFY(signal.is_undefined() || (signal.is_object() && is(signal.as_object()))); + (void)signal; // 6. Assert: ! IsReadableStreamLocked(source) is false. VERIFY(!is_readable_stream_locked(source)); diff --git a/Libraries/LibWeb/Streams/AbstractOperations.h b/Libraries/LibWeb/Streams/AbstractOperations.h index 94817cb223d..7683c8d5e56 100644 --- a/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Libraries/LibWeb/Streams/AbstractOperations.h @@ -40,7 +40,7 @@ size_t readable_stream_get_num_read_requests(ReadableStream const&); bool readable_stream_has_byob_reader(ReadableStream const&); bool readable_stream_has_default_reader(ReadableStream const&); -GC::Ref readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool prevent_close, bool prevent_abort, bool prevent_cancel, JS::Value signal = JS::js_undefined()); +GC::Ref readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool prevent_close, bool prevent_abort, bool prevent_cancel, GC::Ptr signal = {}); WebIDL::ExceptionOr readable_stream_tee(JS::Realm&, ReadableStream&, bool clone_for_branch2); WebIDL::ExceptionOr readable_stream_default_tee(JS::Realm& realm, ReadableStream& stream, bool clone_for_branch2); diff --git a/Libraries/LibWeb/Streams/ReadableStream.cpp b/Libraries/LibWeb/Streams/ReadableStream.cpp index 91e1373e084..c67fc50e1e0 100644 --- a/Libraries/LibWeb/Streams/ReadableStream.cpp +++ b/Libraries/LibWeb/Streams/ReadableStream.cpp @@ -135,7 +135,7 @@ WebIDL::ExceptionOr> ReadableStream::pipe_through(Readab return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, "Failed to execute 'pipeThrough' on 'ReadableStream': parameter 1's 'writable' is locked"sv }; // 3. Let signal be options["signal"] if it exists, or undefined otherwise. - auto signal = options.signal ? JS::Value(options.signal) : JS::js_undefined(); + auto signal = options.signal; // 4. Let promise be ! ReadableStreamPipeTo(this, transform["writable"], options["preventClose"], options["preventAbort"], options["preventCancel"], signal). auto promise = readable_stream_pipe_to(*this, *transform.writable, options.prevent_close, options.prevent_abort, options.prevent_cancel, signal); @@ -164,7 +164,7 @@ GC::Ref ReadableStream::pipe_to(WritableStream& destination, St } // 3. Let signal be options["signal"] if it exists, or undefined otherwise. - auto signal = options.signal ? JS::Value(options.signal) : JS::js_undefined(); + auto signal = options.signal; // 4. Return ! ReadableStreamPipeTo(this, destination, options["preventClose"], options["preventAbort"], options["preventCancel"], signal). return readable_stream_pipe_to(*this, destination, options.prevent_close, options.prevent_abort, options.prevent_cancel, signal); @@ -427,7 +427,7 @@ void ReadableStream::set_up_with_byte_reading_support(GC::Ptr pul } // https://streams.spec.whatwg.org/#readablestream-pipe-through -GC::Ref ReadableStream::piped_through(GC::Ref transform, bool prevent_close, bool prevent_abort, bool prevent_cancel, JS::Value signal) +GC::Ref ReadableStream::piped_through(GC::Ref transform, bool prevent_close, bool prevent_abort, bool prevent_cancel, GC::Ptr signal) { // 1. Assert: ! IsReadableStreamLocked(readable) is false. VERIFY(!is_readable_stream_locked(*this)); diff --git a/Libraries/LibWeb/Streams/ReadableStream.h b/Libraries/LibWeb/Streams/ReadableStream.h index af7e9f4fd8c..a82c7b161e6 100644 --- a/Libraries/LibWeb/Streams/ReadableStream.h +++ b/Libraries/LibWeb/Streams/ReadableStream.h @@ -109,7 +109,7 @@ public: WebIDL::ExceptionOr pull_from_bytes(ByteBuffer); WebIDL::ExceptionOr enqueue(JS::Value chunk); void set_up_with_byte_reading_support(GC::Ptr = {}, GC::Ptr = {}, double high_water_mark = 0); - GC::Ref piped_through(GC::Ref, bool prevent_close = false, bool prevent_abort = false, bool prevent_cancel = false, JS::Value signal = JS::js_undefined()); + GC::Ref piped_through(GC::Ref, bool prevent_close = false, bool prevent_abort = false, bool prevent_cancel = false, GC::Ptr signal = {}); GC::Ptr current_byob_request_view();