1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 21:17:44 +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

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