/* * Copyright (c) 2018-2023, Andreas Kling * Copyright (c) 2021-2023, Linus Groh * Copyright (c) 2022, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace WebContent { class ConnectionFromClient final : public IPC::ConnectionFromClient { C_OBJECT(ConnectionFromClient); public: ~ConnectionFromClient() override = default; virtual void die() override; void initialize_js_console(Badge); void request_file(Web::FileRequest); Optional fd() { return socket().fd(); } PageHost& page_host() { return *m_page_host; } PageHost const& page_host() const { return *m_page_host; } private: explicit ConnectionFromClient(NonnullOwnPtr); Web::Page& page(); Web::Page const& page() const; virtual Messages::WebContentServer::GetWindowHandleResponse get_window_handle() override; virtual void set_window_handle(String const& handle) override; virtual void connect_to_webdriver(DeprecatedString const& webdriver_ipc_path) override; virtual void update_system_theme(Core::AnonymousBuffer const&) override; virtual void update_system_fonts(DeprecatedString const&, DeprecatedString const&, DeprecatedString const&) override; virtual void update_screen_rects(Vector const&, u32) override; virtual void load_url(URL const&) override; virtual void load_html(DeprecatedString const&, URL const&) override; virtual void paint(Gfx::IntRect const&, i32) override; virtual void set_viewport_rect(Gfx::IntRect const&) override; virtual void mouse_down(Gfx::IntPoint, unsigned, unsigned, unsigned) override; virtual void mouse_move(Gfx::IntPoint, unsigned, unsigned, unsigned) override; virtual void mouse_up(Gfx::IntPoint, unsigned, unsigned, unsigned) override; virtual void mouse_wheel(Gfx::IntPoint, unsigned, unsigned, unsigned, i32, i32) override; virtual void doubleclick(Gfx::IntPoint, unsigned, unsigned, unsigned) override; virtual void key_down(i32, unsigned, u32) override; virtual void key_up(i32, unsigned, u32) override; virtual void add_backing_store(i32, Gfx::ShareableBitmap const&) override; virtual void remove_backing_store(i32) override; virtual void debug_request(DeprecatedString const&, DeprecatedString const&) override; virtual void get_source() override; virtual void inspect_dom_tree() override; virtual Messages::WebContentServer::InspectDomNodeResponse inspect_dom_node(i32 node_id, Optional const& pseudo_element) override; virtual void inspect_accessibility_tree() override; virtual Messages::WebContentServer::GetHoveredNodeIdResponse get_hovered_node_id() override; virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override; virtual void set_content_filters(Vector const&) override; virtual void set_proxy_mappings(Vector const&, HashMap const&) override; virtual void set_preferred_color_scheme(Web::CSS::PreferredColorScheme const&) override; virtual void set_has_focus(bool) override; virtual void set_is_scripting_enabled(bool) override; virtual void set_device_pixels_per_css_pixel(float) override; virtual void set_window_position(Gfx::IntPoint) override; virtual void set_window_size(Gfx::IntSize) override; virtual void handle_file_return(i32 error, Optional const& file, i32 request_id) override; virtual void set_system_visibility_state(bool visible) override; virtual void js_console_input(DeprecatedString const&) override; virtual void run_javascript(DeprecatedString const&) override; virtual void js_console_request_messages(i32) override; virtual void alert_closed() override; virtual void confirm_closed(bool accepted) override; virtual void prompt_closed(Optional const& response) override; virtual Messages::WebContentServer::TakeDocumentScreenshotResponse take_document_screenshot() override; virtual Messages::WebContentServer::GetLocalStorageEntriesResponse get_local_storage_entries() override; virtual Messages::WebContentServer::GetSessionStorageEntriesResponse get_session_storage_entries() override; virtual Messages::WebContentServer::GetSelectedTextResponse get_selected_text() override; virtual void select_all() override; void flush_pending_paint_requests(); void report_finished_handling_input_event(bool event_was_handled); NonnullOwnPtr m_page_host; struct PaintRequest { Gfx::IntRect content_rect; NonnullRefPtr bitmap; i32 bitmap_id { -1 }; }; Vector m_pending_paint_requests; RefPtr m_paint_flush_timer; HashMap> m_backing_stores; WeakPtr m_realm; OwnPtr m_console_client; JS::Handle m_console_global_object; HashMap m_requested_files {}; int last_id { 0 }; struct QueuedMouseEvent { enum class Type { MouseMove, MouseDown, MouseUp, MouseWheel, DoubleClick, }; Type type {}; Gfx::IntPoint position {}; unsigned button {}; unsigned buttons {}; unsigned modifiers {}; int wheel_delta_x {}; int wheel_delta_y {}; size_t coalesced_event_count { 0 }; }; struct QueuedKeyboardEvent { enum class Type { KeyDown, KeyUp, }; Type type {}; i32 key {}; unsigned int modifiers {}; u32 code_point {}; }; void enqueue_input_event(Variant); void process_next_input_event(); Queue> m_input_event_queue; RefPtr m_input_event_queue_timer; }; }