diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index 392282fc73..e9046d8a95 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -72,6 +74,12 @@ public: bool is_webdriver_active() const { return m_is_webdriver_active; } void set_is_webdriver_active(bool b) { m_is_webdriver_active = b; } + Gfx::IntPoint const& window_position() const { return m_window_position; } + void set_window_position(Gfx::IntPoint const& position) { m_window_position = position; } + + Gfx::IntSize const& window_size() const { return m_window_size; } + void set_window_size(Gfx::IntSize const& size) { m_window_size = size; } + private: PageClient& m_client; @@ -86,6 +94,9 @@ private: // https://w3c.github.io/webdriver/#dfn-webdriver-active-flag // The webdriver-active flag is set to true when the user agent is under remote control. It is initially false. bool m_is_webdriver_active { false }; + + Gfx::IntPoint m_window_position {}; + Gfx::IntSize m_window_size {}; }; class PageClient { diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index 3c8c955d67..90f5ad2fa3 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -575,6 +575,16 @@ void OutOfProcessWebView::set_is_webdriver_active(bool is_webdriver_enabled) client().async_set_is_webdriver_active(is_webdriver_enabled); } +void OutOfProcessWebView::set_window_position(Gfx::IntPoint const& position) +{ + client().async_set_window_position(position); +} + +void OutOfProcessWebView::set_window_size(Gfx::IntSize const& size) +{ + client().async_set_window_size(size); +} + void OutOfProcessWebView::focusin_event(GUI::FocusEvent&) { client().async_set_has_focus(true); diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index 423bd62728..2cd1b3559a 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -72,6 +72,9 @@ public: void set_preferred_color_scheme(Web::CSS::PreferredColorScheme); void set_is_webdriver_active(bool); + void set_window_position(Gfx::IntPoint const&); + void set_window_size(Gfx::IntSize const&); + Function on_context_menu_request; Function on_link_click; Function on_link_context_menu_request; diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index 92512b0b26..71c632c05a 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -655,6 +655,16 @@ void ConnectionFromClient::set_is_webdriver_active(bool is_webdriver_active) m_page_host->set_is_webdriver_active(is_webdriver_active); } +void ConnectionFromClient::set_window_position(Gfx::IntPoint const& position) +{ + m_page_host->set_window_position(position); +} + +void ConnectionFromClient::set_window_size(Gfx::IntSize const& size) +{ + m_page_host->set_window_size(size); +} + Messages::WebContentServer::GetLocalStorageEntriesResponse ConnectionFromClient::get_local_storage_entries() { auto* document = page().top_level_browsing_context().active_document(); diff --git a/Userland/Services/WebContent/ConnectionFromClient.h b/Userland/Services/WebContent/ConnectionFromClient.h index 4916ee8460..bdbcf85b73 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.h +++ b/Userland/Services/WebContent/ConnectionFromClient.h @@ -72,6 +72,8 @@ private: virtual void set_has_focus(bool) override; virtual void set_is_scripting_enabled(bool) override; virtual void set_is_webdriver_active(bool) override; + virtual void set_window_position(Gfx::IntPoint const&) override; + virtual void set_window_size(Gfx::IntSize const&) override; virtual void handle_file_return(i32 error, Optional const& file, i32 request_id) override; virtual void set_system_visibility_state(bool visible) override; diff --git a/Userland/Services/WebContent/PageHost.cpp b/Userland/Services/WebContent/PageHost.cpp index 30c820dab2..c1b819035d 100644 --- a/Userland/Services/WebContent/PageHost.cpp +++ b/Userland/Services/WebContent/PageHost.cpp @@ -76,6 +76,16 @@ void PageHost::set_is_webdriver_active(bool is_webdriver_active) page().set_is_webdriver_active(is_webdriver_active); } +void PageHost::set_window_position(Gfx::IntPoint const& position) +{ + page().set_window_position(position); +} + +void PageHost::set_window_size(Gfx::IntSize const& size) +{ + page().set_window_size(size); +} + Web::Layout::InitialContainingBlock* PageHost::layout_root() { auto* document = page().top_level_browsing_context().active_document(); diff --git a/Userland/Services/WebContent/PageHost.h b/Userland/Services/WebContent/PageHost.h index b145675379..c70efb4942 100644 --- a/Userland/Services/WebContent/PageHost.h +++ b/Userland/Services/WebContent/PageHost.h @@ -35,6 +35,8 @@ public: void set_has_focus(bool); void set_is_scripting_enabled(bool); void set_is_webdriver_active(bool); + void set_window_position(Gfx::IntPoint const&); + void set_window_size(Gfx::IntSize const&); private: // ^PageClient diff --git a/Userland/Services/WebContent/WebContentServer.ipc b/Userland/Services/WebContent/WebContentServer.ipc index 125be1ba68..9302fd27be 100644 --- a/Userland/Services/WebContent/WebContentServer.ipc +++ b/Userland/Services/WebContent/WebContentServer.ipc @@ -60,6 +60,9 @@ endpoint WebContentServer set_is_scripting_enabled(bool is_scripting_enabled) =| set_is_webdriver_active(bool is_webdriver_active) =| + set_window_position(Gfx::IntPoint position) =| + set_window_size(Gfx::IntSize size) =| + get_local_storage_entries() => (OrderedHashMap entries) get_session_storage_entries() => (OrderedHashMap entries)