/* * Copyright (c) 2022-2023, Linus Groh * Copyright (c) 2024, Jamie Mansfield * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace Web::Fetch { // convertBytesToJSValue is an algorithm that takes a byte sequence and returns a JavaScript value or throws an exception using ConvertBytesToJSValueCallback = GC::Ref(ByteBuffer bytes)>>; struct MultiPartFormDataHeader { Optional name; Optional filename; Optional content_type; }; struct ContentDispositionHeader { String type; OrderedHashMap parameters; }; struct MultipartParsingError { String message; }; template using MultipartParsingErrorOr = ErrorOr; // https://fetch.spec.whatwg.org/#body-mixin class BodyMixin { public: virtual ~BodyMixin(); virtual Optional mime_type_impl() const = 0; virtual GC::Ptr body_impl() = 0; virtual GC::Ptr body_impl() const = 0; virtual Bindings::PlatformObject& as_platform_object() = 0; virtual Bindings::PlatformObject const& as_platform_object() const = 0; [[nodiscard]] bool is_unusable() const; [[nodiscard]] GC::Ptr body() const; [[nodiscard]] bool body_used() const; // JS API functions [[nodiscard]] WebIDL::ExceptionOr> array_buffer() const; [[nodiscard]] WebIDL::ExceptionOr> blob() const; [[nodiscard]] WebIDL::ExceptionOr> bytes() const; [[nodiscard]] WebIDL::ExceptionOr> form_data() const; [[nodiscard]] WebIDL::ExceptionOr> json() const; [[nodiscard]] WebIDL::ExceptionOr> text() const; }; [[nodiscard]] WebIDL::ExceptionOr> consume_body(JS::Realm&, BodyMixin const&, ConvertBytesToJSValueCallback); [[nodiscard]] MultipartParsingErrorOr> parse_multipart_form_data(JS::Realm&, StringView input, MimeSniff::MimeType const& mime_type); }