44 * SPDX-License-Identifier: BSD-2-Clause
55 */
66
7+ #include " WebContentService.h"
78#include " LadybirdServiceBase.h"
89#include < AK/LexicalPath.h>
910#include < Ladybird/FontPlugin.h>
2829#include < WebContent/ConnectionFromClient.h>
2930#include < WebContent/PageHost.h>
3031
31- class NullResourceConnector : public Web ::ResourceLoaderConnector {
32- virtual void prefetch_dns (AK::URL const &) override { }
33- virtual void preconnect (AK::URL const &) override { }
34-
35- virtual RefPtr<Web::ResourceLoaderConnectorRequest> start_request (DeprecatedString const &, AK::URL const &, HashMap<DeprecatedString, DeprecatedString> const &, ReadonlyBytes, Core::ProxyData const &) override
36- {
37- return nullptr ;
38- }
39- };
32+ static ErrorOr<NonnullRefPtr<Protocol::RequestClient>> bind_request_server_service ();
4033
4134ErrorOr<int > service_main (int ipc_socket, int fd_passing_socket)
4235{
@@ -52,7 +45,8 @@ ErrorOr<int> service_main(int ipc_socket, int fd_passing_socket)
5245
5346 Web::FrameLoader::set_default_favicon_path (DeprecatedString::formatted (" {}/res/icons/16x16/app-browser.png" , s_serenity_resource_root));
5447
55- Web::ResourceLoader::initialize (make_ref_counted<NullResourceConnector>());
48+ auto request_server_client = TRY (bind_request_server_service ());
49+ Web::ResourceLoader::initialize (TRY (WebView::RequestServerAdapter::try_create (move (request_server_client))));
5650
5751 bool is_layout_test_mode = false ;
5852
@@ -71,3 +65,29 @@ ErrorOr<int> service_main(int ipc_socket, int fd_passing_socket)
7165
7266 return event_loop.exec ();
7367}
68+
69+ ErrorOr<NonnullRefPtr<Protocol::RequestClient>> bind_request_server_service ()
70+ {
71+ int socket_fds[2 ] {};
72+ TRY (Core::System::socketpair (AF_LOCAL, SOCK_STREAM, 0 , socket_fds));
73+
74+ int ui_fd = socket_fds[0 ];
75+ int server_fd = socket_fds[1 ];
76+
77+ int fd_passing_socket_fds[2 ] {};
78+ TRY (Core::System::socketpair (AF_LOCAL, SOCK_STREAM, 0 , fd_passing_socket_fds));
79+
80+ int ui_fd_passing_fd = fd_passing_socket_fds[0 ];
81+ int server_fd_passing_fd = fd_passing_socket_fds[1 ];
82+
83+ // NOTE: The java object takes ownership of the socket fds
84+ bind_request_server_java (server_fd, server_fd_passing_fd);
85+
86+ auto socket = TRY (Core::LocalSocket::adopt_fd (ui_fd));
87+ TRY (socket->set_blocking (true ));
88+
89+ auto new_client = TRY (try_make_ref_counted<Protocol::RequestClient>(move (socket)));
90+ new_client->set_fd_passing_socket (TRY (Core::LocalSocket::adopt_fd (ui_fd_passing_fd)));
91+
92+ return new_client;
93+ }
0 commit comments