/* * Copyright (c) 2024-2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace WebView { class HeadlessWebView : public WebView::ViewImplementation { public: static NonnullOwnPtr create(Core::AnonymousBuffer theme, Web::DevicePixelSize window_size); static NonnullOwnPtr create_child(HeadlessWebView&, u64 page_index); protected: HeadlessWebView(Core::AnonymousBuffer theme, Web::DevicePixelSize viewport_size); void initialize_client(CreateNewClient) override; void update_zoom() override; virtual Web::DevicePixelSize viewport_size() const override { return m_viewport_size; } virtual Gfx::IntPoint to_content_position(Gfx::IntPoint widget_position) const override { return widget_position; } virtual Gfx::IntPoint to_widget_position(Gfx::IntPoint content_position) const override { return content_position; } Core::AnonymousBuffer m_theme; Web::DevicePixelSize m_viewport_size; Web::Page::PendingDialog m_pending_dialog { Web::Page::PendingDialog::None }; Optional m_pending_prompt_text; // FIXME: We should implement UI-agnostic platform APIs to interact with the system clipboard. Optional m_clipboard; Vector> m_child_web_views; }; }