From a401cff4e215c438e86906643e22b4334bf5b9b6 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Sun, 19 Feb 2023 10:25:32 +0100 Subject: LibWeb: Make factory methods of UIEvents::KeyboardEvent fallible --- Userland/Libraries/LibWeb/DOM/Document.cpp | 2 +- Userland/Libraries/LibWeb/Page/EventHandler.cpp | 10 +++++----- Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp | 8 ++++---- Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index d5be71a55d..bd19015900 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -1296,7 +1296,7 @@ WebIDL::ExceptionOr> Document::create_event(DeprecatedSt } else if (Infra::is_ascii_case_insensitive_match(interface, "htmlevents"sv)) { event = TRY(Event::create(realm, "")); } else if (Infra::is_ascii_case_insensitive_match(interface, "keyboardevent"sv)) { - event = UIEvents::KeyboardEvent::create(realm, ""); + event = TRY(UIEvents::KeyboardEvent::create(realm, "")); } else if (Infra::is_ascii_case_insensitive_match(interface, "messageevent"sv)) { event = TRY(HTML::MessageEvent::create(realm, "")); } else if (Infra::is_ascii_case_insensitive_match(interface, "mouseevent"sv) diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp index a729cba9d5..01977b833a 100644 --- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp +++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp @@ -684,17 +684,17 @@ bool EventHandler::fire_keyboard_event(DeprecatedFlyString const& event_name, HT return fire_keyboard_event(event_name, *browsing_context_container.nested_browsing_context(), key, modifiers, code_point); } - auto event = UIEvents::KeyboardEvent::create_from_platform_event(document->realm(), event_name, key, modifiers, code_point); - return !focused_element->dispatch_event(*event); + auto event = UIEvents::KeyboardEvent::create_from_platform_event(document->realm(), event_name, key, modifiers, code_point).release_value_but_fixme_should_propagate_errors(); + return !focused_element->dispatch_event(event); } // FIXME: De-duplicate this. This is just to prevent wasting a KeyboardEvent allocation when recursing into an (i)frame. - auto event = UIEvents::KeyboardEvent::create_from_platform_event(document->realm(), event_name, key, modifiers, code_point); + auto event = UIEvents::KeyboardEvent::create_from_platform_event(document->realm(), event_name, key, modifiers, code_point).release_value_but_fixme_should_propagate_errors(); if (JS::GCPtr body = document->body()) - return !body->dispatch_event(*event); + return !body->dispatch_event(event); - return !document->root().dispatch_event(*event); + return !document->root().dispatch_event(event); } bool EventHandler::handle_keydown(KeyCode key, unsigned modifiers, u32 code_point) diff --git a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp index da4065cf3e..2ee03750de 100644 --- a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp +++ b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.cpp @@ -66,7 +66,7 @@ static unsigned long determine_key_code(KeyCode platform_key, u32 code_point) return platform_key; } -KeyboardEvent* KeyboardEvent::create_from_platform_event(JS::Realm& realm, DeprecatedFlyString const& event_name, KeyCode platform_key, unsigned modifiers, u32 code_point) +WebIDL::ExceptionOr> KeyboardEvent::create_from_platform_event(JS::Realm& realm, DeprecatedFlyString const& event_name, KeyCode platform_key, unsigned modifiers, u32 code_point) { // FIXME: Figure out what these should actually contain. DeprecatedString event_key = key_code_to_string(platform_key); @@ -104,12 +104,12 @@ bool KeyboardEvent::get_modifier_state(DeprecatedString const& key_arg) return false; } -KeyboardEvent* KeyboardEvent::create(JS::Realm& realm, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init) +WebIDL::ExceptionOr> KeyboardEvent::create(JS::Realm& realm, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init) { - return realm.heap().allocate(realm, realm, event_name, event_init).release_allocated_value_but_fixme_should_propagate_errors(); + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, realm, event_name, event_init)); } -KeyboardEvent* KeyboardEvent::construct_impl(JS::Realm& realm, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init) +WebIDL::ExceptionOr> KeyboardEvent::construct_impl(JS::Realm& realm, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init) { return create(realm, event_name, event_init); } diff --git a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h index 6b355792a2..425902c609 100644 --- a/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h +++ b/Userland/Libraries/LibWeb/UIEvents/KeyboardEvent.h @@ -28,9 +28,9 @@ class KeyboardEvent final : public UIEvent { WEB_PLATFORM_OBJECT(KeyboardEvent, UIEvent); public: - static KeyboardEvent* create(JS::Realm&, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init = {}); - static KeyboardEvent* construct_impl(JS::Realm&, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init); - static KeyboardEvent* create_from_platform_event(JS::Realm&, DeprecatedFlyString const& event_name, KeyCode, unsigned modifiers, u32 code_point); + static WebIDL::ExceptionOr> create(JS::Realm&, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init = {}); + static WebIDL::ExceptionOr> construct_impl(JS::Realm&, DeprecatedFlyString const& event_name, KeyboardEventInit const& event_init); + static WebIDL::ExceptionOr> create_from_platform_event(JS::Realm&, DeprecatedFlyString const& event_name, KeyCode, unsigned modifiers, u32 code_point); virtual ~KeyboardEvent() override; -- cgit v1.2.3