diff options
author | Kenneth Myhra <kennethmyhra@gmail.com> | 2023-02-03 21:50:10 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2023-02-12 00:18:09 +0000 |
commit | a6cdf6374f391b96919a98255fad57efd321f43c (patch) | |
tree | 1af558d27cd90d4c5f1ee315a1743b84aa4bf061 /Userland/Libraries/LibWeb | |
parent | d5b5b94a3569036d93726f25b778ea8c8a6d1af2 (diff) | |
download | serenity-a6cdf6374f391b96919a98255fad57efd321f43c.zip |
LibWeb: Introduce the FormDataEvent interface
Diffstat (limited to 'Userland/Libraries/LibWeb')
-rw-r--r-- | Userland/Libraries/LibWeb/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Forward.h | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp | 40 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/FormDataEvent.h | 38 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/FormDataEvent.idl | 14 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/idl_files.cmake | 1 |
6 files changed, 95 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 88f8a7cf01..cefef712fa 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -186,6 +186,7 @@ set(SOURCES HTML/Focus.cpp HTML/FormAssociatedElement.cpp HTML/FormControlInfrastructure.cpp + HTML/FormDataEvent.cpp HTML/GlobalEventHandlers.cpp HTML/History.cpp HTML/HTMLAnchorElement.cpp diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 85f5af61b2..9ea06df22e 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -246,6 +246,7 @@ struct EnvironmentSettingsObject; class ErrorEvent; class EventHandler; class EventLoop; +class FormDataEvent; class HTMLAnchorElement; class HTMLAreaElement; class HTMLAudioElement; diff --git a/Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp b/Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp new file mode 100644 index 0000000000..aa5fa25f11 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <LibWeb/Bindings/FormDataEventPrototype.h> +#include <LibWeb/Bindings/Intrinsics.h> +#include <LibWeb/HTML/FormDataEvent.h> + +namespace Web::HTML { + +WebIDL::ExceptionOr<JS::NonnullGCPtr<FormDataEvent>> FormDataEvent::construct_impl(JS::Realm& realm, DeprecatedString const& event_name, FormDataEventInit const& event_init) +{ + return MUST_OR_THROW_OOM(realm.heap().allocate<FormDataEvent>(realm, realm, event_name, event_init)); +} + +FormDataEvent::FormDataEvent(JS::Realm& realm, DeprecatedString const& event_name, FormDataEventInit const& event_init) + : DOM::Event(realm, event_name, event_init) + , m_form_data(event_init.form_data) +{ +} + +FormDataEvent::~FormDataEvent() = default; + +JS::ThrowCompletionOr<void> FormDataEvent::initialize(JS::Realm& realm) +{ + MUST_OR_THROW_OOM(Base::initialize(realm)); + set_prototype(&Bindings::ensure_web_prototype<Bindings::FormDataEventPrototype>(realm, "FormDataEvent")); + + return {}; +} + +void FormDataEvent::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_form_data); +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/FormDataEvent.h b/Userland/Libraries/LibWeb/HTML/FormDataEvent.h new file mode 100644 index 0000000000..3c2a4254e2 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/FormDataEvent.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <LibWeb/DOM/Event.h> +#include <LibWeb/XHR/FormData.h> + +namespace Web::HTML { + +struct FormDataEventInit : public DOM::EventInit { + JS::GCPtr<XHR::FormData> form_data {}; +}; + +class FormDataEvent final : public DOM::Event { + WEB_PLATFORM_OBJECT(FormDataEvent, DOM::Event); + +public: + static WebIDL::ExceptionOr<JS::NonnullGCPtr<FormDataEvent>> construct_impl(JS::Realm&, DeprecatedString const& event_name, FormDataEventInit const& event_init); + + virtual ~FormDataEvent() override; + + JS::GCPtr<XHR::FormData> form_data() const { return m_form_data; } + +private: + FormDataEvent(JS::Realm&, DeprecatedString const& event_name, FormDataEventInit const& event_init); + + JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; + + virtual void visit_edges(Cell::Visitor&) override; + + JS::GCPtr<XHR::FormData> m_form_data; +}; + +} diff --git a/Userland/Libraries/LibWeb/HTML/FormDataEvent.idl b/Userland/Libraries/LibWeb/HTML/FormDataEvent.idl new file mode 100644 index 0000000000..3b198d7658 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/FormDataEvent.idl @@ -0,0 +1,14 @@ +#import <DOM/Event.idl> +#import <XHR/FormData.idl> + +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-formdataevent-interface +[Exposed=Window] +interface FormDataEvent : Event { + constructor(DOMString type, FormDataEventInit eventInitDict); + + readonly attribute FormData formData; +}; + +dictionary FormDataEventInit : EventInit { + required FormData formData; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index e28ec3f418..bb83d83a7b 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -71,6 +71,7 @@ libweb_js_bindings(HTML/CloseEvent) libweb_js_bindings(HTML/DOMParser) libweb_js_bindings(HTML/DOMStringMap) libweb_js_bindings(HTML/ErrorEvent) +libweb_js_bindings(HTML/FormDataEvent) libweb_js_bindings(HTML/History) libweb_js_bindings(HTML/HTMLAnchorElement) libweb_js_bindings(HTML/HTMLAreaElement) |