LibWeb: Implement AbortSignal.throwIfAborted

See: https://github.com/whatwg/dom/commit/cfe2f1e
This commit is contained in:
Luke Wilde 2021-12-10 19:48:51 +00:00 committed by Idan Horowitz
parent 64040c136e
commit 1a5bf15b4d
Notes: sideshowbarker 2024-07-17 23:00:12 +09:00
3 changed files with 19 additions and 0 deletions

View file

@ -73,6 +73,22 @@ HTML::EventHandler AbortSignal::onabort()
return event_handler_attribute(HTML::EventNames::abort);
}
// https://dom.spec.whatwg.org/#dom-abortsignal-throwifaborted
JS::ThrowCompletionOr<void> AbortSignal::throw_if_aborted() const
{
auto& global_object = wrapper()->global_object();
auto& vm = global_object.vm();
// The throwIfAborted() method steps are to throw thiss abort reason, if this is aborted.
if (!aborted())
return {};
// FIXME: Remove this once VM::exception() has been removed.
vm.throw_exception(global_object, m_abort_reason);
return JS::throw_completion(m_abort_reason);
}
void AbortSignal::visit_edges(JS::Cell::Visitor& visitor)
{
visitor.visit(m_abort_reason);

View file

@ -53,6 +53,8 @@ public:
// https://dom.spec.whatwg.org/#dom-abortsignal-reason
JS::Value reason() const { return m_abort_reason; }
JS::ThrowCompletionOr<void> throw_if_aborted() const;
void visit_edges(JS::Cell::Visitor&);
// ^EventTarget

View file

@ -4,6 +4,7 @@ interface AbortSignal : EventTarget {
readonly attribute boolean aborted;
readonly attribute any reason;
undefined throwIfAborted();
attribute EventHandler onabort;
};