WebContent: Add shutdown_server IPC call to request process exit

This ensures that removing the last view from a WebContentClient will
close its associated process, assuming the WebContent process is not
hung. A more drastic measure will be needed to trigger forcefully
killing the process when it doesn't respond to this request.
This commit is contained in:
Andrew Kaster 2024-06-30 19:12:22 -06:00 committed by Alexander Kalenik
parent 4cc3d598f9
commit 29b4f21c7b
Notes: sideshowbarker 2024-07-17 09:37:30 +09:00
4 changed files with 9 additions and 0 deletions

View file

@ -50,6 +50,7 @@ void WebContentClient::unregister_view(u64 page_id)
m_views.remove(page_id);
if (m_views.is_empty()) {
on_web_content_process_crash = nullptr;
async_close_server();
}
}

View file

@ -82,6 +82,11 @@ Optional<PageClient const&> ConnectionFromClient::page(u64 index, SourceLocation
return {};
}
void ConnectionFromClient::close_server()
{
shutdown();
}
Messages::WebContentServer::GetWindowHandleResponse ConnectionFromClient::get_window_handle(u64 page_id)
{
if (auto page = this->page(page_id); page.has_value())

View file

@ -53,6 +53,7 @@ private:
Optional<PageClient&> page(u64 index, SourceLocation = SourceLocation::current());
Optional<PageClient const&> page(u64 index, SourceLocation = SourceLocation::current()) const;
virtual void close_server() override;
virtual Messages::WebContentServer::GetWindowHandleResponse get_window_handle(u64 page_id) override;
virtual void set_window_handle(u64 page_id, String const& handle) override;
virtual void connect_to_webdriver(u64 page_id, ByteString const& webdriver_ipc_path) override;

View file

@ -13,6 +13,8 @@
endpoint WebContentServer
{
close_server() =|
get_window_handle(u64 page_id) => (String handle)
set_window_handle(u64 page_id, String handle) =|