1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-18 21:15:09 +00:00

LibWeb: Introduce the FormDataEvent interface

This commit is contained in:
Kenneth Myhra 2023-02-03 21:50:10 +01:00 committed by Linus Groh
parent d5b5b94a35
commit a6cdf6374f
6 changed files with 95 additions and 0 deletions

View file

@ -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

View file

@ -246,6 +246,7 @@ struct EnvironmentSettingsObject;
class ErrorEvent;
class EventHandler;
class EventLoop;
class FormDataEvent;
class HTMLAnchorElement;
class HTMLAreaElement;
class HTMLAudioElement;

View file

@ -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);
}
}

View file

@ -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;
};
}

View file

@ -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;
};

View file

@ -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)