mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 08:58:11 +00:00

This makes use of the new [UseNewAKString] extended attribute. Using Vector storage will make it easier to make this interface into an IDL iterable. It seems the reason it didn't use Vector originally was due to awkward DeprecatedString -> String conversions.
55 lines
2.2 KiB
C++
55 lines
2.2 KiB
C++
/*
|
|
* Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/Bindings/FormDataPrototype.h>
|
|
#include <LibWeb/Bindings/PlatformObject.h>
|
|
#include <LibWeb/Forward.h>
|
|
#include <LibWeb/HTML/HTMLFormElement.h>
|
|
#include <LibWeb/WebIDL/ExceptionOr.h>
|
|
|
|
namespace Web::XHR {
|
|
|
|
// https://xhr.spec.whatwg.org/#formdataentryvalue
|
|
using FormDataEntryValue = Variant<JS::Handle<FileAPI::File>, String>;
|
|
|
|
struct FormDataEntry {
|
|
String name;
|
|
FormDataEntryValue value;
|
|
};
|
|
|
|
// https://xhr.spec.whatwg.org/#interface-formdata
|
|
class FormData : public Bindings::PlatformObject {
|
|
WEB_PLATFORM_OBJECT(FormData, Bindings::PlatformObject);
|
|
|
|
public:
|
|
virtual ~FormData() override;
|
|
|
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<FormData>> construct_impl(JS::Realm&, Optional<JS::NonnullGCPtr<HTML::HTMLFormElement>> form = {});
|
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<FormData>> construct_impl(JS::Realm&, Vector<FormDataEntry> entry_list);
|
|
|
|
WebIDL::ExceptionOr<void> append(String const& name, String const& value);
|
|
WebIDL::ExceptionOr<void> append(String const& name, JS::NonnullGCPtr<FileAPI::Blob> const& blob_value, Optional<String> const& filename = {});
|
|
void delete_(String const& name);
|
|
Variant<JS::Handle<FileAPI::File>, String, Empty> get(String const& name);
|
|
WebIDL::ExceptionOr<Vector<FormDataEntryValue>> get_all(String const& name);
|
|
bool has(String const& name);
|
|
WebIDL::ExceptionOr<void> set(String const& name, String const& value);
|
|
WebIDL::ExceptionOr<void> set(String const& name, JS::NonnullGCPtr<FileAPI::Blob> const& blob_value, Optional<String> const& filename = {});
|
|
|
|
private:
|
|
explicit FormData(JS::Realm&, Vector<FormDataEntry> entry_list = {});
|
|
|
|
virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
|
|
|
|
WebIDL::ExceptionOr<void> append_impl(String const& name, Variant<JS::NonnullGCPtr<FileAPI::Blob>, String> const& value, Optional<String> const& filename = {});
|
|
WebIDL::ExceptionOr<void> set_impl(String const& name, Variant<JS::NonnullGCPtr<FileAPI::Blob>, String> const& value, Optional<String> const& filename = {});
|
|
|
|
Vector<FormDataEntry> m_entry_list;
|
|
};
|
|
|
|
}
|