/* * Copyright (c) 2026, Ladybird contributors * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include namespace Web::HTML { class WEB_API IncrementalDocumentParser final : public JS::Cell { GC_CELL(IncrementalDocumentParser, JS::Cell); GC_DECLARE_ALLOCATOR(IncrementalDocumentParser); public: static GC::Ref create(GC::Ref, GC::Ref, URL::URL, Optional); void start(); private: IncrementalDocumentParser(GC::Ref, GC::Ref, URL::URL, Optional); virtual void visit_edges(Cell::Visitor&) override; void initialize_parser(ReadonlyBytes sniff_bytes); void start_incremental_read(); void process_body_chunk(ByteBuffer); void process_end_of_body(); void process_body_error(JS::Value); void append_decoded(StringView); void pump(); void register_deferred_start(); bool should_continue() const; GC::Ref m_document; GC::Ref m_body; URL::URL m_url; Optional m_mime_type; GC::Ptr m_parser; OwnPtr m_decoder; StringBuilder m_source; }; }