/* * Copyright (c) 2024, Tim Flynn * Copyright (c) 2025, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::Fetch::Fetching { class FetchedDataReceiver final : public JS::Cell { GC_CELL(FetchedDataReceiver, JS::Cell); GC_DECLARE_ALLOCATOR(FetchedDataReceiver); public: virtual ~FetchedDataReceiver() override; void set_pending_promise(GC::Ref); enum class NetworkState { Ongoing, Complete, Error, }; void handle_network_bytes(ReadonlyBytes, NetworkState); private: FetchedDataReceiver(GC::Ref, GC::Ref); virtual void visit_edges(Visitor& visitor) override; void pull_bytes_into_stream(ByteBuffer&&); void close_stream(); GC::Ref m_fetch_params; GC::Ref m_stream; GC::Ptr m_pending_promise; ByteBuffer m_buffer; enum class LifecycleState { Receiving, CompletePending, ReadyToClose, Closed, }; LifecycleState m_lifecycle_state { LifecycleState::Receiving }; bool m_has_unfulfilled_promise { false }; }; }