From c96fc902ff893471bef4b09db7a92ff2ff825fe0 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sun, 14 Apr 2024 10:27:20 +0200 Subject: [PATCH] LibWeb+LibWebView+WebContent: Add did_change_url() IPC call --- Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp | 2 ++ Userland/Libraries/LibWeb/Page/Page.h | 1 + Userland/Libraries/LibWebView/ViewImplementation.h | 1 + Userland/Libraries/LibWebView/WebContentClient.cpp | 8 ++++++++ Userland/Libraries/LibWebView/WebContentClient.h | 1 + Userland/Services/WebContent/PageClient.cpp | 5 +++++ Userland/Services/WebContent/PageClient.h | 1 + Userland/Services/WebContent/WebContentClient.ipc | 1 + 8 files changed, 20 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp index c53edb776b1..43a74a7bc04 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp @@ -788,6 +788,8 @@ TraversableNavigable::HistoryStepResult TraversableNavigable::apply_the_history_ auto forward_enabled = m_current_session_history_step < static_cast(m_session_history_entries.size()) - 1; page().client().page_did_update_navigation_buttons_state(back_enabled, forward_enabled); + page().client().page_did_change_url(current_session_history_entry()->url()); + // 21. Return "applied". return HistoryStepResult::Applied; } diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index 99d6497f3b6..c8aef0399cf 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -251,6 +251,7 @@ public: virtual CSS::PreferredColorScheme preferred_color_scheme() const = 0; virtual void paint(DevicePixelRect const&, Gfx::Bitmap&, PaintOptions = {}) = 0; virtual void page_did_change_title(ByteString const&) { } + virtual void page_did_change_url(URL::URL const&) { } virtual void page_did_request_navigate_back() { } virtual void page_did_request_navigate_forward() { } virtual void page_did_request_refresh() { } diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index fe9bcedab33..dc5cc250773 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -143,6 +143,7 @@ public: Function on_link_click; Function on_link_middle_click; Function on_title_change; + Function on_url_change; Function on_load_start; Function on_load_finish; Function on_history_api_push_or_replace; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index 3c7c9ec8e50..5b113bde953 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -142,6 +142,14 @@ void WebContentClient::did_change_title(u64 page_id, ByteString const& title) } } +void WebContentClient::did_change_url(u64 page_id, URL::URL const& url) +{ + if (auto view = view_for_page_id(page_id); view.has_value()) { + if (view->on_url_change) + view->on_url_change(url); + } +} + void WebContentClient::did_request_scroll(u64 page_id, i32 x_delta, i32 y_delta) { if (auto view = view_for_page_id(page_id); view.has_value()) { diff --git a/Userland/Libraries/LibWebView/WebContentClient.h b/Userland/Libraries/LibWebView/WebContentClient.h index 803cd201d1c..e5211abb06e 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.h +++ b/Userland/Libraries/LibWebView/WebContentClient.h @@ -47,6 +47,7 @@ private: virtual void did_request_cursor_change(u64 page_id, i32) override; virtual void did_layout(u64 page_id, Gfx::IntSize) override; virtual void did_change_title(u64 page_id, ByteString const&) override; + virtual void did_change_url(u64 page_id, URL::URL const&) override; virtual void did_request_scroll(u64 page_id, i32, i32) override; virtual void did_request_scroll_to(u64 page_id, Gfx::IntPoint) override; virtual void did_enter_tooltip_area(u64 page_id, Gfx::IntPoint, ByteString const&) override; diff --git a/Userland/Services/WebContent/PageClient.cpp b/Userland/Services/WebContent/PageClient.cpp index 18e081de713..113f9e22815 100644 --- a/Userland/Services/WebContent/PageClient.cpp +++ b/Userland/Services/WebContent/PageClient.cpp @@ -257,6 +257,11 @@ void PageClient::page_did_change_title(ByteString const& title) client().async_did_change_title(m_id, title); } +void PageClient::page_did_change_url(URL::URL const& url) +{ + client().async_did_change_url(m_id, url); +} + void PageClient::page_did_request_navigate_back() { client().async_did_request_navigate_back(m_id); diff --git a/Userland/Services/WebContent/PageClient.h b/Userland/Services/WebContent/PageClient.h index dae507375fb..9814baed2d1 100644 --- a/Userland/Services/WebContent/PageClient.h +++ b/Userland/Services/WebContent/PageClient.h @@ -95,6 +95,7 @@ private: virtual void page_did_request_cursor_change(Gfx::StandardCursor) override; virtual void page_did_layout() override; virtual void page_did_change_title(ByteString const&) override; + virtual void page_did_change_url(URL::URL const&) override; virtual void page_did_request_navigate_back() override; virtual void page_did_request_navigate_forward() override; virtual void page_did_request_refresh() override; diff --git a/Userland/Services/WebContent/WebContentClient.ipc b/Userland/Services/WebContent/WebContentClient.ipc index 47947b7d420..dca734f1d22 100644 --- a/Userland/Services/WebContent/WebContentClient.ipc +++ b/Userland/Services/WebContent/WebContentClient.ipc @@ -31,6 +31,7 @@ endpoint WebContentClient did_request_cursor_change(u64 page_id, i32 cursor_type) =| did_layout(u64 page_id, Gfx::IntSize content_size) =| did_change_title(u64 page_id, ByteString title) =| + did_change_url(u64 page_id, URL::URL url) =| did_request_scroll(u64 page_id, i32 x_delta, i32 y_delta) =| did_request_scroll_to(u64 page_id, Gfx::IntPoint scroll_position) =| did_enter_tooltip_area(u64 page_id, Gfx::IntPoint content_position, ByteString title) =|