summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/HTML
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML')
-rw-r--r--Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp40
-rw-r--r--Userland/Libraries/LibWeb/HTML/FormDataEvent.h38
-rw-r--r--Userland/Libraries/LibWeb/HTML/FormDataEvent.idl14
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;
+};