Everywhere: Hand pid of new process to client in launch_server_process()

Allows WebContentClient to get pid of WebContent process right after
creation, so there is no window between forking and
notify_process_information() IPC response, when client doesn't know the
pid.
This commit is contained in:
Aliaksandr Kalenik 2024-06-18 19:11:51 +03:00 committed by Andreas Kling
parent 3110411c60
commit c46bea479c
Notes: sideshowbarker 2024-07-17 10:08:28 +09:00
5 changed files with 5 additions and 11 deletions

View file

@ -48,6 +48,9 @@ static ErrorOr<NonnullRefPtr<ClientType>> launch_server_process(
if (!result.is_error()) {
auto process = result.release_value();
if constexpr (requires { process.client->set_pid(pid_t {}); })
process.client->set_pid(process.process.pid());
if (register_with_process_manager == RegisterWithProcessManager::Yes)
WebView::ProcessManager::the().add_process(WebView::process_type_from_name(server_name), process.process.pid());

View file

@ -34,13 +34,6 @@ void WebContentClient::unregister_view(u64 page_id)
m_views.remove(page_id);
}
void WebContentClient::notify_process_information(WebView::ProcessHandle const& handle)
{
dbgln_if(SPAM_DEBUG, "handle: WebContentClient::NotifyProcessInformation! pid={}", handle.pid);
ProcessManager::the().add_process(ProcessType::WebContent, handle.pid);
m_process_handle = handle;
}
void WebContentClient::did_paint(u64 page_id, Gfx::IntRect const& rect, i32 bitmap_id)
{
if (auto view = view_for_page_id(page_id); view.has_value())

View file

@ -33,10 +33,11 @@ public:
Function<void()> on_web_content_process_crash;
void set_pid(pid_t pid) { m_process_handle.pid = pid; }
private:
virtual void die() override;
virtual void notify_process_information(WebView::ProcessHandle const&) override;
virtual void did_paint(u64 page_id, Gfx::IntRect const&, i32) override;
virtual void did_finish_loading(u64 page_id, URL::URL const&) override;
virtual void did_request_navigate_back(u64 page_id) override;

View file

@ -55,7 +55,6 @@ ConnectionFromClient::ConnectionFromClient(NonnullOwnPtr<Core::LocalSocket> sock
, m_page_host(PageHost::create(*this))
{
m_input_event_queue_timer = Web::Platform::Timer::create_single_shot(0, [this] { process_next_input_event(); });
async_notify_process_information({ ::getpid() });
}
ConnectionFromClient::~ConnectionFromClient() = default;

View file

@ -17,8 +17,6 @@
endpoint WebContentClient
{
notify_process_information(WebView::ProcessHandle handle) =|
did_start_loading(u64 page_id, URL::URL url, bool is_redirect) =|
did_finish_loading(u64 page_id, URL::URL url) =|
did_request_navigate_back(u64 page_id) =|