From 130f28cf509018cbc5acaa4e6fb896f9a0101b04 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Sun, 10 Mar 2024 19:33:31 +0000 Subject: [PATCH] LibWeb: Mark abort event as trusted before dispatching it This matches the behavior of Firefox and Chrome. --- Tests/LibWeb/Text/expected/abortsignal-timeout.txt | 1 + Tests/LibWeb/Text/input/abortsignal-timeout.html | 3 ++- Userland/Libraries/LibWeb/DOM/AbortSignal.cpp | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Tests/LibWeb/Text/expected/abortsignal-timeout.txt b/Tests/LibWeb/Text/expected/abortsignal-timeout.txt index a40fa227390..9d699c483ac 100644 --- a/Tests/LibWeb/Text/expected/abortsignal-timeout.txt +++ b/Tests/LibWeb/Text/expected/abortsignal-timeout.txt @@ -1,2 +1,3 @@ Time passed before abort event fired is at least 10 milliseconds: true Reason type: TimeoutError +onabort event isTrusted: true diff --git a/Tests/LibWeb/Text/input/abortsignal-timeout.html b/Tests/LibWeb/Text/input/abortsignal-timeout.html index 3edea60c865..82a825b36d8 100644 --- a/Tests/LibWeb/Text/input/abortsignal-timeout.html +++ b/Tests/LibWeb/Text/input/abortsignal-timeout.html @@ -4,11 +4,12 @@ const timeout_milliseconds = 10; const test_start_time = performance.now(); const signal = AbortSignal.timeout(timeout_milliseconds); - signal.onabort = () => { + signal.onabort = (event) => { const abort_event_time = performance.now(); const time_taken_milliseconds = abort_event_time - test_start_time; println(`Time passed before abort event fired is at least ${timeout_milliseconds} milliseconds: ${time_taken_milliseconds >= timeout_milliseconds}`); println(`Reason type: ${signal.reason.name}`); + println(`onabort event isTrusted: ${event.isTrusted}`); done(); }; }); diff --git a/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp b/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp index ee9834048b8..6852cc783dc 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp +++ b/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp @@ -64,7 +64,9 @@ void AbortSignal::signal_abort(JS::Value reason) m_abort_algorithms.clear(); // 5. Fire an event named abort at signal. - dispatch_event(Event::create(realm(), HTML::EventNames::abort)); + auto abort_event = Event::create(realm(), HTML::EventNames::abort); + abort_event->set_is_trusted(true); + dispatch_event(abort_event); } void AbortSignal::set_onabort(WebIDL::CallbackType* event_handler)