|
@@ -7,12 +7,7 @@
|
|
|
#include <Interface/LadybirdWebViewBridge.h>
|
|
|
#include <LibCore/EventLoop.h>
|
|
|
#include <LibCore/ThreadEventQueue.h>
|
|
|
-#include <LibImageDecoderClient/Client.h>
|
|
|
-#include <LibRequests/RequestClient.h>
|
|
|
#include <LibWebView/Application.h>
|
|
|
-#include <LibWebView/HelperProcess.h>
|
|
|
-#include <LibWebView/Utilities.h>
|
|
|
-#include <LibWebView/WebContentClient.h>
|
|
|
#include <Utilities/Conversions.h>
|
|
|
|
|
|
#import <Application/Application.h>
|
|
@@ -68,75 +63,12 @@ ApplicationBridge::ApplicationBridge(Badge<WebView::Application>, Main::Argument
|
|
|
m_application_bridge = Ladybird::ApplicationBridge::create(arguments, move(new_tab_page_url));
|
|
|
}
|
|
|
|
|
|
-- (ErrorOr<void>)launchRequestServer
|
|
|
+- (ErrorOr<void>)launchServices
|
|
|
{
|
|
|
- auto request_server_paths = TRY(WebView::get_paths_for_helper_process("RequestServer"sv));
|
|
|
- m_request_server_client = TRY(WebView::launch_request_server_process(request_server_paths, WebView::s_ladybird_resource_root));
|
|
|
-
|
|
|
- return {};
|
|
|
-}
|
|
|
-
|
|
|
-static ErrorOr<NonnullRefPtr<ImageDecoderClient::Client>> launch_new_image_decoder()
|
|
|
-{
|
|
|
- auto image_decoder_paths = TRY(WebView::get_paths_for_helper_process("ImageDecoder"sv));
|
|
|
- return WebView::launch_image_decoder_process(image_decoder_paths);
|
|
|
-}
|
|
|
-
|
|
|
-- (ErrorOr<void>)launchImageDecoder
|
|
|
-{
|
|
|
- m_image_decoder_client = TRY(launch_new_image_decoder());
|
|
|
-
|
|
|
- __weak Application* weak_self = self;
|
|
|
-
|
|
|
- m_image_decoder_client->on_death = [weak_self]() {
|
|
|
- Application* self = weak_self;
|
|
|
- if (self == nil) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- m_image_decoder_client = nullptr;
|
|
|
-
|
|
|
- if (auto err = [self launchImageDecoder]; err.is_error()) {
|
|
|
- dbgln("Failed to restart image decoder: {}", err.error());
|
|
|
- VERIFY_NOT_REACHED();
|
|
|
- }
|
|
|
-
|
|
|
- auto num_clients = WebView::WebContentClient::client_count();
|
|
|
- auto new_sockets = m_image_decoder_client->send_sync_but_allow_failure<Messages::ImageDecoderServer::ConnectNewClients>(num_clients);
|
|
|
- if (!new_sockets || new_sockets->sockets().size() == 0) {
|
|
|
- dbgln("Failed to connect {} new clients to ImageDecoder", num_clients);
|
|
|
- VERIFY_NOT_REACHED();
|
|
|
- }
|
|
|
-
|
|
|
- WebView::WebContentClient::for_each_client([sockets = new_sockets->take_sockets()](WebView::WebContentClient& client) mutable {
|
|
|
- client.async_connect_to_image_decoder(sockets.take_last());
|
|
|
- return IterationDecision::Continue;
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
+ TRY(m_application_bridge->launch_services());
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
-- (ErrorOr<NonnullRefPtr<WebView::WebContentClient>>)launchWebContent:(Ladybird::WebViewBridge&)web_view_bridge
|
|
|
-{
|
|
|
- // FIXME: Fail to open the tab, rather than crashing the whole application if this fails
|
|
|
- auto request_server_socket = TRY(WebView::connect_new_request_server_client(*m_request_server_client));
|
|
|
- auto image_decoder_socket = TRY(WebView::connect_new_image_decoder_client(*m_image_decoder_client));
|
|
|
-
|
|
|
- auto web_content_paths = TRY(WebView::get_paths_for_helper_process("WebContent"sv));
|
|
|
- auto web_content = TRY(WebView::launch_web_content_process(web_view_bridge, web_content_paths, move(image_decoder_socket), move(request_server_socket)));
|
|
|
-
|
|
|
- return web_content;
|
|
|
-}
|
|
|
-
|
|
|
-- (ErrorOr<IPC::File>)launchWebWorker
|
|
|
-{
|
|
|
- auto web_worker_paths = TRY(WebView::get_paths_for_helper_process("WebWorker"sv));
|
|
|
- auto worker_client = TRY(WebView::launch_web_worker_process(web_worker_paths, *m_request_server_client));
|
|
|
-
|
|
|
- return worker_client->clone_transport();
|
|
|
-}
|
|
|
-
|
|
|
#pragma mark - NSApplication
|
|
|
|
|
|
- (void)terminate:(id)sender
|