mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-31 13:19:05 +00:00
LibWeb: Support unbuffered fetch requests
Supporting unbuffered fetches is actually part of the fetch spec in its HTTP-network-fetch algorithm. We had previously implemented this method in a very ad-hoc manner as a simple wrapper around ResourceLoader. This is still the case, but we now implement a good amount of these steps according to spec, using ResourceLoader's unbuffered API. The response data is forwarded through to the fetch response using streams. This will eventually let us remove the use of ResourceLoader's buffered API, as all responses should just be streamed this way. The streams spec then supplies ways to wait for completion, thus allowing fully buffered responses. However, we have more work to do to make the other parts of our fetch implementation (namely, Body::fully_read) use streams before we can do this.
This commit is contained in:
parent
1e97ae66e5
commit
6056428cb5
Notes:
sideshowbarker
2024-07-18 05:01:22 +09:00
Author: https://github.com/trflynn89
Commit: 6056428cb5
Pull-request: https://github.com/SerenityOS/serenity/pull/24452
Issue: https://github.com/SerenityOS/serenity/issues/23847
8 changed files with 266 additions and 8 deletions
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/ByteBuffer.h>
|
||||
#include <LibJS/Heap/Cell.h>
|
||||
#include <LibJS/Heap/CellAllocator.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
||||
namespace Web::Fetch::Fetching {
|
||||
|
||||
class FetchedDataReceiver final : public JS::Cell {
|
||||
JS_CELL(FetchedDataReceiver, JS::Cell);
|
||||
JS_DECLARE_ALLOCATOR(FetchedDataReceiver);
|
||||
|
||||
public:
|
||||
virtual ~FetchedDataReceiver() override;
|
||||
|
||||
void set_pending_promise(JS::NonnullGCPtr<WebIDL::Promise>);
|
||||
void on_data_received(ReadonlyBytes);
|
||||
|
||||
private:
|
||||
FetchedDataReceiver(JS::NonnullGCPtr<Infrastructure::FetchParams const>, JS::NonnullGCPtr<Streams::ReadableStream>);
|
||||
|
||||
virtual void visit_edges(Visitor& visitor) override;
|
||||
|
||||
JS::NonnullGCPtr<Infrastructure::FetchParams const> m_fetch_params;
|
||||
JS::NonnullGCPtr<Streams::ReadableStream> m_stream;
|
||||
JS::GCPtr<WebIDL::Promise> m_pending_promise;
|
||||
ByteBuffer m_buffer;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue