/* * Copyright (c) 2025, the Ladybird developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace DevTools { class DEVTOOLS_API NetworkEventActor final : public Actor { public: static constexpr auto base_name = "netEvent"sv; static NonnullRefPtr create(DevToolsServer&, String name, u64 request_id); virtual ~NetworkEventActor() override; u64 request_id() const { return m_request_id; } void set_request_info(String url, String method, UnixDateTime start_time, Vector request_headers, ByteBuffer request_body, Optional initiator_type); void set_response_start(u32 status_code, Optional reason_phrase); void set_response_headers(Vector response_headers); void append_response_body(ByteBuffer data); void set_request_complete(u64 body_size, Requests::RequestTimingInfo timing_info, Optional network_error); JsonObject serialize_initial_event() const; private: NetworkEventActor(DevToolsServer&, String name, u64 request_id); virtual void handle_message(Message const&) override; void get_request_headers(Message const&); void get_request_cookies(Message const&); void get_request_post_data(Message const&); void get_response_headers(Message const&); void get_response_cookies(Message const&); void get_response_content(Message const&); void get_event_timings(Message const&); void get_security_info(Message const&); u64 m_request_id { 0 }; String m_url; String m_method; UnixDateTime m_start_time; Vector m_request_headers; ByteBuffer m_request_body; Optional m_initiator_type; Optional m_status_code; Optional m_reason_phrase; Vector m_response_headers; ByteBuffer m_response_body; u64 m_body_size { 0 }; Requests::RequestTimingInfo m_timing_info {}; Optional m_network_error; bool m_complete { false }; static constexpr size_t MAX_RESPONSE_BODY_SIZE = 10 * MiB; }; }