Browse Source

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.
Aliaksandr Kalenik 1 năm trước cách đây
mục cha
commit
c46bea479c

+ 3 - 0
Ladybird/HelperProcess.cpp

@@ -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());
 

+ 0 - 7
Userland/Libraries/LibWebView/WebContentClient.cpp

@@ -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())

+ 2 - 1
Userland/Libraries/LibWebView/WebContentClient.h

@@ -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;

+ 0 - 1
Userland/Services/WebContent/ConnectionFromClient.cpp

@@ -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;

+ 0 - 2
Userland/Services/WebContent/WebContentClient.ipc

@@ -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) =|