mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
LibWebView+UI: Acquire the paths to helper processes inside LibWebView
We no longer need to acquire these paths from the UI and pass them into LibWebView - we can figure out these paths internally.
This commit is contained in:
parent
bb7dff7dfe
commit
652dde5022
Notes:
github-actions[bot]
2024-11-14 10:48:35 +00:00
Author: https://github.com/trflynn89 Commit: https://github.com/LadybirdBrowser/ladybird/commit/652dde50226 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2327
7 changed files with 20 additions and 40 deletions
|
@ -18,7 +18,6 @@
|
||||||
#include <LibWebView/HelperProcess.h>
|
#include <LibWebView/HelperProcess.h>
|
||||||
#include <LibWebView/URL.h>
|
#include <LibWebView/URL.h>
|
||||||
#include <LibWebView/UserAgent.h>
|
#include <LibWebView/UserAgent.h>
|
||||||
#include <LibWebView/Utilities.h>
|
|
||||||
#include <LibWebView/WebContentClient.h>
|
#include <LibWebView/WebContentClient.h>
|
||||||
|
|
||||||
namespace WebView {
|
namespace WebView {
|
||||||
|
@ -180,16 +179,13 @@ ErrorOr<void> Application::launch_services()
|
||||||
ErrorOr<void> Application::launch_request_server()
|
ErrorOr<void> Application::launch_request_server()
|
||||||
{
|
{
|
||||||
// FIXME: Create an abstraction to re-spawn the RequestServer and re-hook up its client hooks to each tab on crash
|
// FIXME: Create an abstraction to re-spawn the RequestServer and re-hook up its client hooks to each tab on crash
|
||||||
auto paths = TRY(get_paths_for_helper_process("RequestServer"sv));
|
m_request_server_client = TRY(launch_request_server_process());
|
||||||
m_request_server_client = TRY(launch_request_server_process(paths));
|
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> Application::launch_image_decoder_server()
|
ErrorOr<void> Application::launch_image_decoder_server()
|
||||||
{
|
{
|
||||||
auto paths = TRY(get_paths_for_helper_process("ImageDecoder"sv));
|
m_image_decoder_client = TRY(launch_image_decoder_process());
|
||||||
m_image_decoder_client = TRY(launch_image_decoder_process(paths));
|
|
||||||
|
|
||||||
m_image_decoder_client->on_death = [this]() {
|
m_image_decoder_client->on_death = [this]() {
|
||||||
m_image_decoder_client = nullptr;
|
m_image_decoder_client = nullptr;
|
||||||
|
|
|
@ -15,13 +15,14 @@ namespace WebView {
|
||||||
template<typename ClientType, typename... ClientArguments>
|
template<typename ClientType, typename... ClientArguments>
|
||||||
static ErrorOr<NonnullRefPtr<ClientType>> launch_server_process(
|
static ErrorOr<NonnullRefPtr<ClientType>> launch_server_process(
|
||||||
StringView server_name,
|
StringView server_name,
|
||||||
ReadonlySpan<ByteString> candidate_server_paths,
|
|
||||||
Vector<ByteString> arguments,
|
Vector<ByteString> arguments,
|
||||||
ClientArguments&&... client_arguments)
|
ClientArguments&&... client_arguments)
|
||||||
{
|
{
|
||||||
auto process_type = WebView::process_type_from_name(server_name);
|
auto process_type = WebView::process_type_from_name(server_name);
|
||||||
auto const& chrome_options = WebView::Application::chrome_options();
|
auto const& chrome_options = WebView::Application::chrome_options();
|
||||||
|
|
||||||
|
auto candidate_server_paths = TRY(get_paths_for_helper_process(server_name));
|
||||||
|
|
||||||
if (chrome_options.profile_helper_process == process_type) {
|
if (chrome_options.profile_helper_process == process_type) {
|
||||||
arguments.prepend({
|
arguments.prepend({
|
||||||
"--tool=callgrind"sv,
|
"--tool=callgrind"sv,
|
||||||
|
@ -75,7 +76,6 @@ static ErrorOr<NonnullRefPtr<ClientType>> launch_server_process(
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<WebView::WebContentClient>> launch_web_content_process(
|
ErrorOr<NonnullRefPtr<WebView::WebContentClient>> launch_web_content_process(
|
||||||
WebView::ViewImplementation& view,
|
WebView::ViewImplementation& view,
|
||||||
ReadonlySpan<ByteString> candidate_web_content_paths,
|
|
||||||
IPC::File image_decoder_socket,
|
IPC::File image_decoder_socket,
|
||||||
Optional<IPC::File> request_server_socket)
|
Optional<IPC::File> request_server_socket)
|
||||||
{
|
{
|
||||||
|
@ -121,10 +121,10 @@ ErrorOr<NonnullRefPtr<WebView::WebContentClient>> launch_web_content_process(
|
||||||
arguments.append("--image-decoder-socket"sv);
|
arguments.append("--image-decoder-socket"sv);
|
||||||
arguments.append(ByteString::number(image_decoder_socket.fd()));
|
arguments.append(ByteString::number(image_decoder_socket.fd()));
|
||||||
|
|
||||||
return launch_server_process<WebView::WebContentClient>("WebContent"sv, candidate_web_content_paths, move(arguments), view);
|
return launch_server_process<WebView::WebContentClient>("WebContent"sv, move(arguments), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<ImageDecoderClient::Client>> launch_image_decoder_process(ReadonlySpan<ByteString> candidate_image_decoder_paths)
|
ErrorOr<NonnullRefPtr<ImageDecoderClient::Client>> launch_image_decoder_process()
|
||||||
{
|
{
|
||||||
Vector<ByteString> arguments;
|
Vector<ByteString> arguments;
|
||||||
if (auto server = mach_server_name(); server.has_value()) {
|
if (auto server = mach_server_name(); server.has_value()) {
|
||||||
|
@ -132,10 +132,10 @@ ErrorOr<NonnullRefPtr<ImageDecoderClient::Client>> launch_image_decoder_process(
|
||||||
arguments.append(server.value());
|
arguments.append(server.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
return launch_server_process<ImageDecoderClient::Client>("ImageDecoder"sv, candidate_image_decoder_paths, arguments);
|
return launch_server_process<ImageDecoderClient::Client>("ImageDecoder"sv, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Web::HTML::WebWorkerClient>> launch_web_worker_process(ReadonlySpan<ByteString> candidate_web_worker_paths)
|
ErrorOr<NonnullRefPtr<Web::HTML::WebWorkerClient>> launch_web_worker_process()
|
||||||
{
|
{
|
||||||
Vector<ByteString> arguments;
|
Vector<ByteString> arguments;
|
||||||
|
|
||||||
|
@ -143,10 +143,10 @@ ErrorOr<NonnullRefPtr<Web::HTML::WebWorkerClient>> launch_web_worker_process(Rea
|
||||||
arguments.append("--request-server-socket"sv);
|
arguments.append("--request-server-socket"sv);
|
||||||
arguments.append(ByteString::number(socket.fd()));
|
arguments.append(ByteString::number(socket.fd()));
|
||||||
|
|
||||||
return launch_server_process<Web::HTML::WebWorkerClient>("WebWorker"sv, candidate_web_worker_paths, move(arguments));
|
return launch_server_process<Web::HTML::WebWorkerClient>("WebWorker"sv, move(arguments));
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Requests::RequestClient>> launch_request_server_process(ReadonlySpan<ByteString> candidate_request_server_paths)
|
ErrorOr<NonnullRefPtr<Requests::RequestClient>> launch_request_server_process()
|
||||||
{
|
{
|
||||||
Vector<ByteString> arguments;
|
Vector<ByteString> arguments;
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ ErrorOr<NonnullRefPtr<Requests::RequestClient>> launch_request_server_process(Re
|
||||||
arguments.append(server.value());
|
arguments.append(server.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
return launch_server_process<Requests::RequestClient>("RequestServer"sv, candidate_request_server_paths, move(arguments));
|
return launch_server_process<Requests::RequestClient>("RequestServer"sv, move(arguments));
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<IPC::File> connect_new_request_server_client()
|
ErrorOr<IPC::File> connect_new_request_server_client()
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
|
|
||||||
#include <AK/Error.h>
|
#include <AK/Error.h>
|
||||||
#include <AK/Optional.h>
|
#include <AK/Optional.h>
|
||||||
#include <AK/Span.h>
|
|
||||||
#include <AK/StringView.h>
|
|
||||||
#include <LibImageDecoderClient/Client.h>
|
#include <LibImageDecoderClient/Client.h>
|
||||||
#include <LibRequests/RequestClient.h>
|
#include <LibRequests/RequestClient.h>
|
||||||
#include <LibWeb/Worker/WebWorkerClient.h>
|
#include <LibWeb/Worker/WebWorkerClient.h>
|
||||||
|
@ -20,13 +18,12 @@ namespace WebView {
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<WebView::WebContentClient>> launch_web_content_process(
|
ErrorOr<NonnullRefPtr<WebView::WebContentClient>> launch_web_content_process(
|
||||||
WebView::ViewImplementation& view,
|
WebView::ViewImplementation& view,
|
||||||
ReadonlySpan<ByteString> candidate_web_content_paths,
|
|
||||||
IPC::File image_decoder_socket,
|
IPC::File image_decoder_socket,
|
||||||
Optional<IPC::File> request_server_socket = {});
|
Optional<IPC::File> request_server_socket = {});
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<ImageDecoderClient::Client>> launch_image_decoder_process(ReadonlySpan<ByteString> candidate_image_decoder_paths);
|
ErrorOr<NonnullRefPtr<ImageDecoderClient::Client>> launch_image_decoder_process();
|
||||||
ErrorOr<NonnullRefPtr<Web::HTML::WebWorkerClient>> launch_web_worker_process(ReadonlySpan<ByteString> candidate_web_worker_paths);
|
ErrorOr<NonnullRefPtr<Web::HTML::WebWorkerClient>> launch_web_worker_process();
|
||||||
ErrorOr<NonnullRefPtr<Requests::RequestClient>> launch_request_server_process(ReadonlySpan<ByteString> candidate_request_server_paths);
|
ErrorOr<NonnullRefPtr<Requests::RequestClient>> launch_request_server_process();
|
||||||
|
|
||||||
ErrorOr<IPC::File> connect_new_request_server_client();
|
ErrorOr<IPC::File> connect_new_request_server_client();
|
||||||
ErrorOr<IPC::File> connect_new_image_decoder_client();
|
ErrorOr<IPC::File> connect_new_image_decoder_client();
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include <LibWebView/SearchEngine.h>
|
#include <LibWebView/SearchEngine.h>
|
||||||
#include <LibWebView/SourceHighlighter.h>
|
#include <LibWebView/SourceHighlighter.h>
|
||||||
#include <LibWebView/URL.h>
|
#include <LibWebView/URL.h>
|
||||||
#include <LibWebView/Utilities.h>
|
|
||||||
|
|
||||||
#import <Application/Application.h>
|
#import <Application/Application.h>
|
||||||
#import <Application/ApplicationDelegate.h>
|
#import <Application/ApplicationDelegate.h>
|
||||||
|
@ -347,7 +346,7 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
||||||
};
|
};
|
||||||
|
|
||||||
m_web_view_bridge->on_request_worker_agent = []() {
|
m_web_view_bridge->on_request_worker_agent = []() {
|
||||||
auto worker_client = MUST(WebView::launch_web_worker_process(MUST(WebView::get_paths_for_helper_process("WebWorker"sv))));
|
auto worker_client = MUST(WebView::launch_web_worker_process());
|
||||||
return worker_client->clone_transport();
|
return worker_client->clone_transport();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <LibWebView/Application.h>
|
#include <LibWebView/Application.h>
|
||||||
#include <LibWebView/HelperProcess.h>
|
#include <LibWebView/HelperProcess.h>
|
||||||
#include <LibWebView/UserAgent.h>
|
#include <LibWebView/UserAgent.h>
|
||||||
#include <LibWebView/Utilities.h>
|
|
||||||
|
|
||||||
#import <Interface/Palette.h>
|
#import <Interface/Palette.h>
|
||||||
|
|
||||||
|
@ -151,10 +150,7 @@ void WebViewBridge::initialize_client(CreateNewClient create_new_client)
|
||||||
auto request_server_socket = WebView::connect_new_request_server_client().release_value_but_fixme_should_propagate_errors();
|
auto request_server_socket = WebView::connect_new_request_server_client().release_value_but_fixme_should_propagate_errors();
|
||||||
auto image_decoder_socket = WebView::connect_new_image_decoder_client().release_value_but_fixme_should_propagate_errors();
|
auto image_decoder_socket = WebView::connect_new_image_decoder_client().release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
auto candidate_web_content_paths = WebView::get_paths_for_helper_process("WebContent"sv).release_value_but_fixme_should_propagate_errors();
|
m_client_state.client = launch_web_content_process(*this, AK::move(image_decoder_socket), AK::move(request_server_socket)).release_value_but_fixme_should_propagate_errors();
|
||||||
auto new_client = launch_web_content_process(*this, candidate_web_content_paths, AK::move(image_decoder_socket), AK::move(request_server_socket)).release_value_but_fixme_should_propagate_errors();
|
|
||||||
|
|
||||||
m_client_state.client = new_client;
|
|
||||||
} else {
|
} else {
|
||||||
m_client_state.client->register_view(m_client_state.page_index, *this);
|
m_client_state.client->register_view(m_client_state.page_index, *this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include <LibGfx/ShareableBitmap.h>
|
#include <LibGfx/ShareableBitmap.h>
|
||||||
#include <LibWeb/Crypto/Crypto.h>
|
#include <LibWeb/Crypto/Crypto.h>
|
||||||
#include <LibWebView/HelperProcess.h>
|
#include <LibWebView/HelperProcess.h>
|
||||||
#include <LibWebView/Utilities.h>
|
|
||||||
#include <UI/Headless/Application.h>
|
#include <UI/Headless/Application.h>
|
||||||
#include <UI/Headless/HeadlessWebView.h>
|
#include <UI/Headless/HeadlessWebView.h>
|
||||||
|
|
||||||
|
@ -32,9 +31,7 @@ HeadlessWebView::HeadlessWebView(Core::AnonymousBuffer theme, Web::DevicePixelSi
|
||||||
};
|
};
|
||||||
|
|
||||||
on_request_worker_agent = []() {
|
on_request_worker_agent = []() {
|
||||||
auto web_worker_paths = MUST(WebView::get_paths_for_helper_process("WebWorker"sv));
|
auto worker_client = MUST(WebView::launch_web_worker_process());
|
||||||
auto worker_client = MUST(WebView::launch_web_worker_process(web_worker_paths));
|
|
||||||
|
|
||||||
return worker_client->clone_transport();
|
return worker_client->clone_transport();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -165,8 +162,7 @@ void HeadlessWebView::initialize_client(CreateNewClient create_new_client)
|
||||||
auto request_server_socket = WebView::connect_new_request_server_client().release_value_but_fixme_should_propagate_errors();
|
auto request_server_socket = WebView::connect_new_request_server_client().release_value_but_fixme_should_propagate_errors();
|
||||||
auto image_decoder_socket = WebView::connect_new_image_decoder_client().release_value_but_fixme_should_propagate_errors();
|
auto image_decoder_socket = WebView::connect_new_image_decoder_client().release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
auto web_content_paths = WebView::get_paths_for_helper_process("WebContent"sv).release_value_but_fixme_should_propagate_errors();
|
m_client_state.client = WebView::launch_web_content_process(*this, move(image_decoder_socket), move(request_server_socket)).release_value_but_fixme_should_propagate_errors();
|
||||||
m_client_state.client = WebView::launch_web_content_process(*this, web_content_paths, move(image_decoder_socket), move(request_server_socket)).release_value_but_fixme_should_propagate_errors();
|
|
||||||
} else {
|
} else {
|
||||||
m_client_state.client->register_view(m_client_state.page_index, *this);
|
m_client_state.client->register_view(m_client_state.page_index, *this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include <LibWeb/UIEvents/MouseButton.h>
|
#include <LibWeb/UIEvents/MouseButton.h>
|
||||||
#include <LibWebView/Application.h>
|
#include <LibWebView/Application.h>
|
||||||
#include <LibWebView/HelperProcess.h>
|
#include <LibWebView/HelperProcess.h>
|
||||||
#include <LibWebView/Utilities.h>
|
|
||||||
#include <LibWebView/WebContentClient.h>
|
#include <LibWebView/WebContentClient.h>
|
||||||
#include <UI/Qt/Application.h>
|
#include <UI/Qt/Application.h>
|
||||||
#include <UI/Qt/StringUtils.h>
|
#include <UI/Qt/StringUtils.h>
|
||||||
|
@ -128,7 +127,7 @@ WebContentView::WebContentView(QWidget* window, RefPtr<WebView::WebContentClient
|
||||||
};
|
};
|
||||||
|
|
||||||
on_request_worker_agent = [&]() {
|
on_request_worker_agent = [&]() {
|
||||||
auto worker_client = MUST(WebView::launch_web_worker_process(MUST(WebView::get_paths_for_helper_process("WebWorker"sv))));
|
auto worker_client = MUST(WebView::launch_web_worker_process());
|
||||||
return worker_client->clone_transport();
|
return worker_client->clone_transport();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -632,10 +631,7 @@ void WebContentView::initialize_client(WebView::ViewImplementation::CreateNewCli
|
||||||
auto request_server_socket = WebView::connect_new_request_server_client().release_value_but_fixme_should_propagate_errors();
|
auto request_server_socket = WebView::connect_new_request_server_client().release_value_but_fixme_should_propagate_errors();
|
||||||
auto image_decoder_socket = WebView::connect_new_image_decoder_client().release_value_but_fixme_should_propagate_errors();
|
auto image_decoder_socket = WebView::connect_new_image_decoder_client().release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
auto candidate_web_content_paths = WebView::get_paths_for_helper_process("WebContent"sv).release_value_but_fixme_should_propagate_errors();
|
m_client_state.client = launch_web_content_process(*this, AK::move(image_decoder_socket), AK::move(request_server_socket)).release_value_but_fixme_should_propagate_errors();
|
||||||
auto new_client = launch_web_content_process(*this, candidate_web_content_paths, AK::move(image_decoder_socket), AK::move(request_server_socket)).release_value_but_fixme_should_propagate_errors();
|
|
||||||
|
|
||||||
m_client_state.client = new_client;
|
|
||||||
} else {
|
} else {
|
||||||
m_client_state.client->register_view(m_client_state.page_index, *this);
|
m_client_state.client->register_view(m_client_state.page_index, *this);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue