From cc41233be494599d516560e738335219873d72cb Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Tue, 7 Mar 2023 06:10:26 +0300 Subject: [PATCH] LibWebView+WebContent: Propagate close from WebContent to LibWebView --- Ladybird/WebContentView.cpp | 4 ++++ Ladybird/WebContentView.h | 1 + Userland/Libraries/LibWebView/OutOfProcessWebView.cpp | 6 ++++++ Userland/Libraries/LibWebView/OutOfProcessWebView.h | 2 ++ Userland/Libraries/LibWebView/ViewImplementation.h | 1 + Userland/Libraries/LibWebView/WebContentClient.cpp | 5 +++++ Userland/Libraries/LibWebView/WebContentClient.h | 1 + Userland/Services/WebContent/PageHost.cpp | 5 +++++ Userland/Services/WebContent/PageHost.h | 1 + Userland/Services/WebContent/WebContentClient.ipc | 1 + 10 files changed, 27 insertions(+) diff --git a/Ladybird/WebContentView.cpp b/Ladybird/WebContentView.cpp index 486ce5e79c..ab922da476 100644 --- a/Ladybird/WebContentView.cpp +++ b/Ladybird/WebContentView.cpp @@ -964,6 +964,10 @@ void WebContentView::notify_server_did_set_cookie(Badge, AK::U on_set_cookie(url, cookie, source); } +void WebContentView::notify_server_did_close_browsing_context(Badge) +{ +} + void WebContentView::notify_server_did_update_cookie(Badge, Web::Cookie::Cookie const& cookie) { if (on_update_cookie) diff --git a/Ladybird/WebContentView.h b/Ladybird/WebContentView.h index 7b81f64c7e..181d42fd55 100644 --- a/Ladybird/WebContentView.h +++ b/Ladybird/WebContentView.h @@ -142,6 +142,7 @@ public: virtual DeprecatedString notify_server_did_request_cookie(Badge, const AK::URL& url, Web::Cookie::Source source) override; virtual void notify_server_did_set_cookie(Badge, const AK::URL& url, Web::Cookie::ParsedCookie const& cookie, Web::Cookie::Source source) override; virtual void notify_server_did_update_cookie(Badge, Web::Cookie::Cookie const& cookie) override; + virtual void notify_server_did_close_browsing_context(Badge) override; virtual void notify_server_did_update_resource_count(i32 count_waiting) override; virtual void notify_server_did_request_restore_window() override; virtual Gfx::IntPoint notify_server_did_request_reposition_window(Gfx::IntPoint) override; diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index 5dbe2c449d..c8ddfaef2e 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -459,6 +459,12 @@ void OutOfProcessWebView::notify_server_did_set_cookie(Badge, on_set_cookie(url, cookie, source); } +void OutOfProcessWebView::notify_server_did_close_browsing_context(Badge) +{ + if (on_close) + on_close(); +} + void OutOfProcessWebView::notify_server_did_update_cookie(Badge, Web::Cookie::Cookie const& cookie) { if (on_update_cookie) diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index f212ba5528..5ebd9a6f72 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -57,6 +57,7 @@ public: // In practice, this means that OOPWV may render scaled stale versions of the content while resizing. void set_content_scales_to_viewport(bool); + Function on_close; Function on_context_menu_request; Function on_link_click; Function on_link_context_menu_request; @@ -160,6 +161,7 @@ private: virtual DeprecatedString notify_server_did_request_cookie(Badge, const AK::URL& url, Web::Cookie::Source source) override; virtual void notify_server_did_set_cookie(Badge, const AK::URL& url, Web::Cookie::ParsedCookie const& cookie, Web::Cookie::Source source) override; virtual void notify_server_did_update_cookie(Badge, Web::Cookie::Cookie const& cookie) override; + virtual void notify_server_did_close_browsing_context(Badge) override; virtual void notify_server_did_update_resource_count(i32 count_waiting) override; virtual void notify_server_did_request_restore_window() override; virtual Gfx::IntPoint notify_server_did_request_reposition_window(Gfx::IntPoint) override; diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index 6ebbe7ce3b..a9dda8531d 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -96,6 +96,7 @@ public: virtual DeprecatedString notify_server_did_request_cookie(Badge, const AK::URL& url, Web::Cookie::Source source) = 0; virtual void notify_server_did_set_cookie(Badge, const AK::URL& url, Web::Cookie::ParsedCookie const& cookie, Web::Cookie::Source source) = 0; virtual void notify_server_did_update_cookie(Badge, Web::Cookie::Cookie const& cookie) = 0; + virtual void notify_server_did_close_browsing_context(Badge) = 0; virtual void notify_server_did_update_resource_count(i32 count_waiting) = 0; virtual void notify_server_did_request_restore_window() = 0; virtual Gfx::IntPoint notify_server_did_request_reposition_window(Gfx::IntPoint) = 0; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index ff8393cfb3..6d906a75ff 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -240,6 +240,11 @@ void WebContentClient::did_update_cookie(Web::Cookie::Cookie const& cookie) m_view.notify_server_did_update_cookie({}, cookie); } +void WebContentClient::did_close_browsing_context() +{ + m_view.notify_server_did_close_browsing_context({}); +} + void WebContentClient::did_update_resource_count(i32 count_waiting) { m_view.notify_server_did_update_resource_count(count_waiting); diff --git a/Userland/Libraries/LibWebView/WebContentClient.h b/Userland/Libraries/LibWebView/WebContentClient.h index 84302b2d7d..c28c3c4878 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.h +++ b/Userland/Libraries/LibWebView/WebContentClient.h @@ -69,6 +69,7 @@ private: virtual Messages::WebContentClient::DidRequestCookieResponse did_request_cookie(AK::URL const&, u8) override; virtual void did_set_cookie(AK::URL const&, Web::Cookie::ParsedCookie const&, u8) override; virtual void did_update_cookie(Web::Cookie::Cookie const&) override; + virtual void did_close_browsing_context() override; virtual void did_update_resource_count(i32 count_waiting) override; virtual void did_request_restore_window() override; virtual Messages::WebContentClient::DidRequestRepositionWindowResponse did_request_reposition_window(Gfx::IntPoint) override; diff --git a/Userland/Services/WebContent/PageHost.cpp b/Userland/Services/WebContent/PageHost.cpp index eba7679c70..f8df42e032 100644 --- a/Userland/Services/WebContent/PageHost.cpp +++ b/Userland/Services/WebContent/PageHost.cpp @@ -373,6 +373,11 @@ void PageHost::page_did_update_resource_count(i32 count_waiting) m_client.async_did_update_resource_count(count_waiting); } +void PageHost::page_did_close_browsing_context(Web::HTML::BrowsingContext const&) +{ + m_client.async_did_close_browsing_context(); +} + void PageHost::request_file(Web::FileRequest file_request) { m_client.request_file(move(file_request)); diff --git a/Userland/Services/WebContent/PageHost.h b/Userland/Services/WebContent/PageHost.h index d11b1ce1d7..bc0496f3a0 100644 --- a/Userland/Services/WebContent/PageHost.h +++ b/Userland/Services/WebContent/PageHost.h @@ -97,6 +97,7 @@ private: virtual void page_did_set_cookie(const URL&, Web::Cookie::ParsedCookie const&, Web::Cookie::Source) override; virtual void page_did_update_cookie(Web::Cookie::Cookie) override; virtual void page_did_update_resource_count(i32) override; + virtual void page_did_close_browsing_context(Web::HTML::BrowsingContext const&) override; virtual void request_file(Web::FileRequest) override; explicit PageHost(ConnectionFromClient&); diff --git a/Userland/Services/WebContent/WebContentClient.ipc b/Userland/Services/WebContent/WebContentClient.ipc index 98811b3645..49922ede3e 100644 --- a/Userland/Services/WebContent/WebContentClient.ipc +++ b/Userland/Services/WebContent/WebContentClient.ipc @@ -46,6 +46,7 @@ endpoint WebContentClient did_set_cookie(URL url, Web::Cookie::ParsedCookie cookie, u8 source) =| did_update_cookie(Web::Cookie::Cookie cookie) =| did_update_resource_count(i32 count_waiting) =| + did_close_browsing_context() =| did_request_restore_window() =| did_request_reposition_window(Gfx::IntPoint position) => (Gfx::IntPoint window_position) did_request_resize_window(Gfx::IntSize size) => (Gfx::IntSize window_size)