/* * Copyright (c) 2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include namespace DevTools { class DEVTOOLS_API FrameActor final : public Actor { public: static constexpr auto base_name = "frame"sv; static NonnullRefPtr create(DevToolsServer&, String name, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr); virtual ~FrameActor() override; void send_frame_update_message(); void set_pending_navigation_document_events_after_target_switch(String const& url, String const& title); void stop_listening(); JsonObject serialize_target() const; private: FrameActor(DevToolsServer&, String name, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr, WeakPtr); void style_sheets_available(JsonObject& response, Vector 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); void send_document_event(StringView name, String const& url, Optional title = {}); void send_pending_navigation_document_events_after_target_switch(); struct PendingNavigationDocumentEvents { String url; String title; }; WeakPtr m_tab; WeakPtr m_watcher; WeakPtr m_css_properties; WeakPtr m_console; WeakPtr m_inspector; WeakPtr m_style_sheets; WeakPtr m_thread; WeakPtr m_accessibility; Optional m_pending_navigation_document_events_after_target_switch; HashMap> m_network_events; bool m_is_listening { false }; }; }