From a8c60d65fc7b185a95ee311174b1027f11d1eb73 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Mon, 13 May 2024 18:52:46 +0100 Subject: [PATCH] LibWeb: Specify the correct argument type in IDL for AbortSignal::any() This allows some boilerplate code to be generated automatically. --- Userland/Libraries/LibWeb/DOM/AbortSignal.cpp | 19 ++----------------- Userland/Libraries/LibWeb/DOM/AbortSignal.h | 2 +- Userland/Libraries/LibWeb/DOM/AbortSignal.idl | 3 +-- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp b/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp index 7f443df6630..d333b9611a0 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp +++ b/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp @@ -147,25 +147,10 @@ WebIDL::ExceptionOr> AbortSignal::timeout(JS::VM& } // https://dom.spec.whatwg.org/#dom-abortsignal-any -WebIDL::ExceptionOr> AbortSignal::any(JS::VM& vm, JS::Value signals) +WebIDL::ExceptionOr> AbortSignal::any(JS::VM& vm, Vector> const& signals) { - Vector> signals_list; - auto iterator_record = TRY(get_iterator(vm, signals, JS::IteratorHint::Sync)); - while (true) { - auto next = TRY(iterator_step_value(vm, iterator_record)); - if (!next.has_value()) - break; - - auto value = next.release_value(); - if (!value.is_object() || !is(value.as_object())) - return vm.throw_completion(JS::ErrorType::NotAnObjectOfType, "AbortSignal"); - - auto& signal = static_cast(value.as_object()); - signals_list.append(JS::make_handle(signal)); - } - // The static any(signals) method steps are to return the result of creating a dependent abort signal from signals using AbortSignal and the current realm. - return create_dependent_abort_signal(*vm.current_realm(), signals_list); + return create_dependent_abort_signal(*vm.current_realm(), signals); } // https://dom.spec.whatwg.org/#create-a-dependent-abort-signal diff --git a/Userland/Libraries/LibWeb/DOM/AbortSignal.h b/Userland/Libraries/LibWeb/DOM/AbortSignal.h index b58bcaa26d9..125f482952b 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortSignal.h +++ b/Userland/Libraries/LibWeb/DOM/AbortSignal.h @@ -45,7 +45,7 @@ public: static WebIDL::ExceptionOr> abort(JS::VM&, JS::Value reason); static WebIDL::ExceptionOr> timeout(JS::VM&, Web::WebIDL::UnsignedLongLong milliseconds); - static WebIDL::ExceptionOr> any(JS::VM&, JS::Value signals); + static WebIDL::ExceptionOr> any(JS::VM&, Vector> const&); static WebIDL::ExceptionOr> create_dependent_abort_signal(JS::Realm&, Vector> const&); diff --git a/Userland/Libraries/LibWeb/DOM/AbortSignal.idl b/Userland/Libraries/LibWeb/DOM/AbortSignal.idl index b168cb5e0bd..92e54d16c09 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortSignal.idl +++ b/Userland/Libraries/LibWeb/DOM/AbortSignal.idl @@ -6,8 +6,7 @@ interface AbortSignal : EventTarget { [NewObject] static AbortSignal abort(optional any reason); [Exposed=(Window,Worker), NewObject] static AbortSignal timeout([EnforceRange] unsigned long long milliseconds); - // FIXME: Argument should be of type: sequence. - [NewObject] static AbortSignal _any(any signals); + [NewObject] static AbortSignal _any(sequence signals); readonly attribute boolean aborted; readonly attribute any reason;