mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 17:40:27 +00:00
LibWeb: Make process_blob_parts() publicly accessible
This pulls process_blob_parts() out of the Blob class and makes it publicly accessible.
This commit is contained in:
parent
622a4f29a7
commit
c038a8c9c9
Notes:
sideshowbarker
2024-07-17 08:33:18 +09:00
Author: https://github.com/kennethmyhra Commit: https://github.com/SerenityOS/serenity/commit/c038a8c9c9 Pull-request: https://github.com/SerenityOS/serenity/pull/14694 Reviewed-by: https://github.com/linusg Reviewed-by: https://github.com/trflynn89
2 changed files with 36 additions and 34 deletions
|
@ -12,6 +12,40 @@
|
|||
|
||||
namespace Web::FileAPI {
|
||||
|
||||
// https://w3c.github.io/FileAPI/#process-blob-parts
|
||||
ErrorOr<ByteBuffer> process_blob_parts(Vector<BlobPart> const& blob_parts)
|
||||
{
|
||||
// 1. Let bytes be an empty sequence of bytes.
|
||||
ByteBuffer bytes {};
|
||||
|
||||
// 2. For each element in parts:
|
||||
for (auto const& blob_part : blob_parts) {
|
||||
TRY(blob_part.visit(
|
||||
// 1. If element is a USVString, run the following sub-steps:
|
||||
[&](String const& string) -> ErrorOr<void> {
|
||||
// NOTE: This step is handled by the lambda expression.
|
||||
// 1. Let s be element.
|
||||
|
||||
// FIXME: 2. If the endings member of options is "native", set s to the result of converting line endings to native of element.
|
||||
|
||||
// NOTE: The AK::String is always UTF-8.
|
||||
// 3. Append the result of UTF-8 encoding s to bytes.
|
||||
return bytes.try_append(string.to_byte_buffer());
|
||||
},
|
||||
// 2. If element is a BufferSource, get a copy of the bytes held by the buffer source, and append those bytes to bytes.
|
||||
[&](JS::Handle<JS::Object> const& buffer_source) -> ErrorOr<void> {
|
||||
auto data_buffer = TRY(Bindings::IDL::get_buffer_source_copy(*buffer_source.cell()));
|
||||
return bytes.try_append(data_buffer.bytes());
|
||||
},
|
||||
// 3. If element is a Blob, append the bytes it represents to bytes.
|
||||
[&](NonnullRefPtr<Blob> const& blob) -> ErrorOr<void> {
|
||||
return bytes.try_append(blob->bytes());
|
||||
}));
|
||||
}
|
||||
// 3. Return bytes.
|
||||
return bytes;
|
||||
}
|
||||
|
||||
Blob::Blob(ByteBuffer byte_buffer, String type)
|
||||
: m_byte_buffer(move(byte_buffer))
|
||||
, m_type(move(type))
|
||||
|
@ -49,39 +83,6 @@ DOM::ExceptionOr<NonnullRefPtr<Blob>> Blob::create_with_global_object(Bindings::
|
|||
return Blob::create(blob_parts, options);
|
||||
}
|
||||
|
||||
// https://w3c.github.io/FileAPI/#process-blob-parts
|
||||
ErrorOr<ByteBuffer> Blob::process_blob_parts(Vector<BlobPart> const& blob_parts)
|
||||
{
|
||||
// 1. Let bytes be an empty sequence of bytes.
|
||||
ByteBuffer bytes {};
|
||||
|
||||
// 2. For each element in parts:
|
||||
for (auto const& blob_part : blob_parts) {
|
||||
TRY(blob_part.visit(
|
||||
// 1. If element is a USVString, run the following sub-steps:
|
||||
[&](String const& string) -> ErrorOr<void> {
|
||||
// NOTE: This step is handled by the lambda expression.
|
||||
// 1. Let s be element.
|
||||
|
||||
// FIXME: 2. If the endings member of options is "native", set s to the result of converting line endings to native of element.
|
||||
|
||||
// NOTE: The AK::String is always UTF-8.
|
||||
// 3. Append the result of UTF-8 encoding s to bytes.
|
||||
return bytes.try_append(string.to_byte_buffer());
|
||||
},
|
||||
// 2. If element is a BufferSource, get a copy of the bytes held by the buffer source, and append those bytes to bytes.
|
||||
[&](JS::Handle<JS::Object> const& buffer_source) -> ErrorOr<void> {
|
||||
auto data_buffer = TRY(Bindings::IDL::get_buffer_source_copy(*buffer_source.cell()));
|
||||
return bytes.try_append(data_buffer.bytes());
|
||||
},
|
||||
// 3. If element is a Blob, append the bytes it represents to bytes.
|
||||
[&](NonnullRefPtr<Blob> const& blob) -> ErrorOr<void> {
|
||||
return bytes.try_append(blob->bytes());
|
||||
}));
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
// https://w3c.github.io/FileAPI/#dfn-slice
|
||||
DOM::ExceptionOr<NonnullRefPtr<Blob>> Blob::slice(Optional<i64> start, Optional<i64> end, Optional<String> const& content_type)
|
||||
{
|
||||
|
|
|
@ -26,6 +26,8 @@ struct BlobPropertyBag {
|
|||
Bindings::EndingType endings;
|
||||
};
|
||||
|
||||
[[nodiscard]] ErrorOr<ByteBuffer> process_blob_parts(Vector<BlobPart> const& blob_parts);
|
||||
|
||||
class Blob
|
||||
: public RefCounted<Blob>
|
||||
, public Weakable<Blob>
|
||||
|
@ -52,7 +54,6 @@ public:
|
|||
|
||||
private:
|
||||
Blob() = default;
|
||||
static ErrorOr<ByteBuffer> process_blob_parts(Vector<BlobPart> const& blob_parts);
|
||||
|
||||
ByteBuffer m_byte_buffer {};
|
||||
String m_type {};
|
||||
|
|
Loading…
Reference in a new issue