ladybird/Libraries/LibDevTools/Actors/FrameActor.h
Andreas Kling 31ffd2e8e5 LibDevTools: Add request and response body viewing to network panel
This adds support for viewing request payloads (POST data) and response
bodies in the Firefox DevTools network panel.

Request bodies are captured when network requests start and passed
through IPC to the NetworkEventActor, which returns them via the
getRequestPostData protocol method.

Response bodies are streamed via a new IPC message as data is received,
accumulated in NetworkEventActor (with a 10MB size limit to prevent
memory issues), and returned via getResponseContent. Text content is
returned as UTF-8, while binary content (images, etc.) is base64.
2026-01-15 20:10:19 +01:00

61 lines
2.1 KiB
C++

/*
* Copyright (c) 2025, Tim Flynn <trflynn89@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/HashMap.h>
#include <AK/NonnullRefPtr.h>
#include <AK/Types.h>
#include <AK/Vector.h>
#include <LibDevTools/Actor.h>
#include <LibDevTools/DevToolsDelegate.h>
#include <LibDevTools/Forward.h>
#include <LibWeb/Forward.h>
#include <LibWebView/Forward.h>
namespace DevTools {
class DEVTOOLS_API FrameActor final : public Actor {
public:
static constexpr auto base_name = "frame"sv;
static NonnullRefPtr<FrameActor> create(DevToolsServer&, String name, WeakPtr<TabActor>, WeakPtr<CSSPropertiesActor>, WeakPtr<ConsoleActor>, WeakPtr<InspectorActor>, WeakPtr<StyleSheetsActor>, WeakPtr<ThreadActor>, WeakPtr<AccessibilityActor>);
virtual ~FrameActor() override;
void send_frame_update_message();
JsonObject serialize_target() const;
private:
FrameActor(DevToolsServer&, String name, WeakPtr<TabActor>, WeakPtr<CSSPropertiesActor>, WeakPtr<ConsoleActor>, WeakPtr<InspectorActor>, WeakPtr<StyleSheetsActor>, WeakPtr<ThreadActor>, WeakPtr<AccessibilityActor>);
void style_sheets_available(JsonObject& response, Vector<Web::CSS::StyleSheetIdentifier> style_sheets);
virtual void handle_message(Message const&) override;
void on_console_message(WebView::ConsoleOutput);
void on_network_request_started(DevToolsDelegate::NetworkRequestData);
void on_network_response_headers_received(DevToolsDelegate::NetworkResponseData);
void on_network_response_body_received(u64 request_id, ByteBuffer data);
void on_network_request_finished(DevToolsDelegate::NetworkRequestCompleteData);
void on_navigation_started(String url);
void on_navigation_finished(String url, String title);
WeakPtr<TabActor> m_tab;
WeakPtr<CSSPropertiesActor> m_css_properties;
WeakPtr<ConsoleActor> m_console;
WeakPtr<InspectorActor> m_inspector;
WeakPtr<StyleSheetsActor> m_style_sheets;
WeakPtr<ThreadActor> m_thread;
WeakPtr<AccessibilityActor> m_accessibility;
HashMap<u64, NonnullRefPtr<NetworkEventActor>> m_network_events;
};
}