diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML')
-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 |
3 files changed, 92 insertions, 0 deletions
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; +}; |