summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb
diff options
context:
space:
mode:
authorKenneth Myhra <kennethmyhra@gmail.com>2023-02-03 21:50:10 +0100
committerLinus Groh <mail@linusgroh.de>2023-02-12 00:18:09 +0000
commita6cdf6374f391b96919a98255fad57efd321f43c (patch)
tree1af558d27cd90d4c5f1ee315a1743b84aa4bf061 /Userland/Libraries/LibWeb
parentd5b5b94a3569036d93726f25b778ea8c8a6d1af2 (diff)
downloadserenity-a6cdf6374f391b96919a98255fad57efd321f43c.zip
LibWeb: Introduce the FormDataEvent interface
Diffstat (limited to 'Userland/Libraries/LibWeb')
-rw-r--r--Userland/Libraries/LibWeb/CMakeLists.txt1
-rw-r--r--Userland/Libraries/LibWeb/Forward.h1
-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
-rw-r--r--Userland/Libraries/LibWeb/idl_files.cmake1
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)