/* * 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 #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, Web::DOM::Document& document); void destroy_js_console(Badge, Web::DOM::Document& document); 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; } auto& backing_stores() { return m_backing_stores; } private: explicit ConnectionFromClient(NonnullOwnPtr); PageClient& page(u64 index = 0); PageClient const& page(u64 index = 0) const; virtual Messages::WebContentServer::GetWindowHandleResponse get_window_handle() override; virtual void set_window_handle(String const& handle) override; virtual void connect_to_webdriver(ByteString const& webdriver_ipc_path) override; virtual void update_system_theme(Core::AnonymousBuffer const&) override; virtual void update_system_fonts(ByteString const&, ByteString const&, ByteString const&) override; virtual void update_screen_rects(Vector const&, u32) override; virtual void load_url(URL const&) override; virtual void load_html(ByteString const&) override; virtual void set_viewport_rect(Web::DevicePixelRect const&) override; virtual void mouse_down(Web::DevicePixelPoint, Web::DevicePixelPoint, u32, u32, u32) override; virtual void mouse_move(Web::DevicePixelPoint, Web::DevicePixelPoint, u32, u32, u32) override; virtual void mouse_up(Web::DevicePixelPoint, Web::DevicePixelPoint, u32, u32, u32) override; virtual void mouse_wheel(Web::DevicePixelPoint, Web::DevicePixelPoint, u32, u32, u32, Web::DevicePixels, Web::DevicePixels) override; virtual void doubleclick(Web::DevicePixelPoint, Web::DevicePixelPoint, u32, u32, u32) override; virtual void key_down(i32, u32, u32) override; virtual void key_up(i32, u32, u32) override; virtual void add_backing_store(i32 front_bitmap_id, Gfx::ShareableBitmap const& front_bitmap, i32 back_bitmap_id, Gfx::ShareableBitmap const& back_bitmap) override; virtual void ready_to_paint() override; virtual void debug_request(ByteString const&, ByteString const&) override; virtual void get_source() override; virtual void inspect_dom_tree() override; virtual void inspect_dom_node(i32 node_id, Optional const& pseudo_element) override; virtual void inspect_accessibility_tree() override; virtual void get_hovered_node_id() override; virtual void set_dom_node_text(i32 node_id, String const& text) override; virtual void set_dom_node_tag(i32 node_id, String const& name) override; virtual void add_dom_node_attributes(i32 node_id, Vector const& attributes) override; virtual void replace_dom_node_attribute(i32 node_id, String const& name, Vector const& replacement_attributes) override; virtual void create_child_element(i32 node_id) override; virtual void create_child_text_node(i32 node_id) override; virtual void clone_dom_node(i32 node_id) override; virtual void remove_dom_node(i32 node_id) override; virtual void get_dom_node_html(i32 node_id) override; virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override; virtual Messages::WebContentServer::DumpPaintTreeResponse dump_paint_tree() override; virtual Messages::WebContentServer::DumpTextResponse dump_text() override; virtual void set_content_filters(Vector const&) override; virtual void set_autoplay_allowed_on_all_websites() override; virtual void set_autoplay_allowlist(Vector const& allowlist) 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(Web::DevicePixelPoint) override; virtual void set_window_size(Web::DevicePixelSize) 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(ByteString const&) override; virtual void run_javascript(ByteString 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 void color_picker_update(Optional const& picked_color, Web::HTML::ColorPickerUpdateState const& state) override; virtual void select_dropdown_closed(Optional const& value) override; virtual void toggle_media_play_state() override; virtual void toggle_media_mute_state() override; virtual void toggle_media_loop_state() override; virtual void toggle_media_controls_state() override; virtual void set_user_style(String const&) override; virtual void enable_inspector_prototype() override; virtual void take_document_screenshot() override; virtual void take_dom_node_screenshot(i32 node_id) override; virtual Messages::WebContentServer::DumpGcGraphResponse dump_gc_graph() 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 report_finished_handling_input_event(bool event_was_handled); NonnullOwnPtr m_page_host; struct BackingStores { i32 front_bitmap_id { -1 }; i32 back_bitmap_id { -1 }; RefPtr front_bitmap; RefPtr back_bitmap; }; BackingStores m_backing_stores; HashMap> m_console_clients; WeakPtr m_top_level_document_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 {}; Web::DevicePixelPoint position {}; Web::DevicePixelPoint screen_position {}; u32 button {}; u32 buttons {}; u32 modifiers {}; Web::DevicePixels wheel_delta_x {}; Web::DevicePixels wheel_delta_y {}; size_t coalesced_event_count { 0 }; }; struct QueuedKeyboardEvent { enum class Type { KeyDown, KeyUp, }; Type type {}; i32 key {}; u32 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; }; }