From 24fb7cd0ad23b5501ec6f0f713421101995f78bd Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 11 Nov 2022 13:33:11 -0500 Subject: [PATCH] LibWebView+WebContent: Add IPCs to navigate the browser's history --- .../LibWebView/OutOfProcessWebView.cpp | 18 ++++++++++++++++++ .../Libraries/LibWebView/OutOfProcessWebView.h | 6 ++++++ .../Libraries/LibWebView/ViewImplementation.h | 3 +++ .../Libraries/LibWebView/WebContentClient.cpp | 15 +++++++++++++++ .../Libraries/LibWebView/WebContentClient.h | 3 +++ .../Services/WebContent/WebContentClient.ipc | 3 +++ 6 files changed, 48 insertions(+) diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index 90c3eeff4d..01ce929653 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -309,6 +309,24 @@ void OutOfProcessWebView::notify_server_did_finish_loading(Badge) +{ + if (on_navigate_back) + on_navigate_back(); +} + +void OutOfProcessWebView::notify_server_did_request_navigate_forward(Badge) +{ + if (on_navigate_forward) + on_navigate_forward(); +} + +void OutOfProcessWebView::notify_server_did_request_refresh(Badge) +{ + if (on_refresh) + on_refresh(); +} + void OutOfProcessWebView::notify_server_did_request_context_menu(Badge, Gfx::IntPoint const& content_position) { if (on_context_menu_request) diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index f4b1aecd44..633514d627 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -84,6 +84,9 @@ public: Function on_title_change; Function on_load_start; Function on_load_finish; + Function on_navigate_back; + Function on_navigate_forward; + Function on_refresh; Function on_favicon_change; Function on_url_drop; Function on_set_document; @@ -145,6 +148,9 @@ private: virtual void notify_server_did_middle_click_link(Badge, const AK::URL&, String const& target, unsigned modifiers) override; virtual void notify_server_did_start_loading(Badge, const AK::URL&) override; virtual void notify_server_did_finish_loading(Badge, const AK::URL&) override; + virtual void notify_server_did_request_navigate_back(Badge) override; + virtual void notify_server_did_request_navigate_forward(Badge) override; + virtual void notify_server_did_request_refresh(Badge) override; virtual void notify_server_did_request_context_menu(Badge, Gfx::IntPoint const&) override; virtual void notify_server_did_request_link_context_menu(Badge, Gfx::IntPoint const&, const AK::URL&, String const& target, unsigned modifiers) override; virtual void notify_server_did_request_image_context_menu(Badge, Gfx::IntPoint const&, const AK::URL&, String const& target, unsigned modifiers, Gfx::ShareableBitmap const&) override; diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index b685ffc0b1..b251b49c0d 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -35,6 +35,9 @@ public: virtual void notify_server_did_middle_click_link(Badge, const AK::URL&, String const& target, unsigned modifiers) = 0; virtual void notify_server_did_start_loading(Badge, const AK::URL&) = 0; virtual void notify_server_did_finish_loading(Badge, const AK::URL&) = 0; + virtual void notify_server_did_request_navigate_back(Badge) = 0; + virtual void notify_server_did_request_navigate_forward(Badge) = 0; + virtual void notify_server_did_request_refresh(Badge) = 0; virtual void notify_server_did_request_context_menu(Badge, Gfx::IntPoint const&) = 0; virtual void notify_server_did_request_link_context_menu(Badge, Gfx::IntPoint const&, const AK::URL&, String const& target, unsigned modifiers) = 0; virtual void notify_server_did_request_image_context_menu(Badge, Gfx::IntPoint const&, const AK::URL&, String const& target, unsigned modifiers, Gfx::ShareableBitmap const&) = 0; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index e8ed1b81e8..b01091e363 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -33,6 +33,21 @@ void WebContentClient::did_finish_loading(AK::URL const& url) m_view.notify_server_did_finish_loading({}, url); } +void WebContentClient::did_request_navigate_back() +{ + m_view.notify_server_did_request_navigate_back({}); +} + +void WebContentClient::did_request_navigate_forward() +{ + m_view.notify_server_did_request_navigate_forward({}); +} + +void WebContentClient::did_request_refresh() +{ + m_view.notify_server_did_request_refresh({}); +} + void WebContentClient::did_invalidate_content_rect(Gfx::IntRect const& content_rect) { dbgln_if(SPAM_DEBUG, "handle: WebContentClient::DidInvalidateContentRect! content_rect={}", content_rect); diff --git a/Userland/Libraries/LibWebView/WebContentClient.h b/Userland/Libraries/LibWebView/WebContentClient.h index 56e954132e..8ce4bd2833 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.h +++ b/Userland/Libraries/LibWebView/WebContentClient.h @@ -31,6 +31,9 @@ private: virtual void did_paint(Gfx::IntRect const&, i32) override; virtual void did_finish_loading(AK::URL const&) override; + virtual void did_request_navigate_back() override; + virtual void did_request_navigate_forward() override; + virtual void did_request_refresh() override; virtual void did_invalidate_content_rect(Gfx::IntRect const&) override; virtual void did_change_selection() override; virtual void did_request_cursor_change(i32) override; diff --git a/Userland/Services/WebContent/WebContentClient.ipc b/Userland/Services/WebContent/WebContentClient.ipc index 449d1c1704..b215a2008f 100644 --- a/Userland/Services/WebContent/WebContentClient.ipc +++ b/Userland/Services/WebContent/WebContentClient.ipc @@ -11,6 +11,9 @@ endpoint WebContentClient { did_start_loading(URL url) =| did_finish_loading(URL url) =| + did_request_navigate_back() =| + did_request_navigate_forward() =| + did_request_refresh() =| did_paint(Gfx::IntRect content_rect, i32 bitmap_id) =| did_invalidate_content_rect(Gfx::IntRect content_rect) =| did_change_selection() =|