2023-11-08 15:47:41 -03:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <AK/HashMap.h>
|
2024-11-14 12:01:23 -03:00
|
|
|
#include <LibGC/Root.h>
|
2023-11-08 15:47:41 -03:00
|
|
|
#include <LibIPC/ConnectionFromClient.h>
|
|
|
|
|
#include <LibJS/Forward.h>
|
|
|
|
|
#include <LibWeb/Forward.h>
|
2026-04-10 16:18:00 -03:00
|
|
|
#include <LibWeb/HTML/BroadcastChannelMessage.h>
|
2026-05-21 10:33:23 -03:00
|
|
|
#include <LibWeb/HTML/WorkerAgentTypes.h>
|
2023-11-08 15:47:41 -03:00
|
|
|
#include <LibWeb/Loader/FileRequest.h>
|
|
|
|
|
#include <LibWeb/Worker/WebWorkerClientEndpoint.h>
|
|
|
|
|
#include <LibWeb/Worker/WebWorkerServerEndpoint.h>
|
|
|
|
|
#include <WebWorker/Forward.h>
|
2023-12-05 14:15:46 -03:00
|
|
|
#include <WebWorker/PageHost.h>
|
2023-11-08 15:47:41 -03:00
|
|
|
|
|
|
|
|
namespace WebWorker {
|
|
|
|
|
|
|
|
|
|
class ConnectionFromClient final
|
|
|
|
|
: public IPC::ConnectionFromClient<WebWorkerClientEndpoint, WebWorkerServerEndpoint> {
|
|
|
|
|
C_OBJECT(ConnectionFromClient);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual ~ConnectionFromClient() override;
|
|
|
|
|
|
|
|
|
|
virtual void die() override;
|
|
|
|
|
|
2026-06-17 22:23:15 -03:00
|
|
|
virtual Messages::WebWorkerServer::InitTransportResponse init_transport(int peer_pid) override;
|
2024-07-09 06:00:06 -03:00
|
|
|
virtual void close_worker() override;
|
|
|
|
|
|
2023-11-08 15:47:41 -03:00
|
|
|
void request_file(Web::FileRequest);
|
|
|
|
|
|
|
|
|
|
PageHost& page_host() { return *m_page_host; }
|
|
|
|
|
PageHost const& page_host() const { return *m_page_host; }
|
|
|
|
|
|
2026-03-12 10:17:41 -03:00
|
|
|
Function<void(IPC::TransportHandle const&)> on_request_server_connection;
|
|
|
|
|
Function<void(IPC::TransportHandle const&)> on_image_decoder_connection;
|
|
|
|
|
|
2023-11-08 15:47:41 -03:00
|
|
|
private:
|
2025-04-08 17:01:46 -03:00
|
|
|
explicit ConnectionFromClient(NonnullOwnPtr<IPC::Transport>);
|
2023-11-08 15:47:41 -03:00
|
|
|
|
|
|
|
|
Web::Page& page();
|
|
|
|
|
Web::Page const& page() const;
|
|
|
|
|
|
2026-03-12 10:17:41 -03:00
|
|
|
virtual void connect_to_request_server(IPC::TransportHandle handle) override;
|
|
|
|
|
virtual void connect_to_image_decoder(IPC::TransportHandle handle) override;
|
2026-02-21 15:11:48 -03:00
|
|
|
virtual void start_worker(URL::URL url, Web::Bindings::WorkerType type, Web::Bindings::RequestCredentials credentials, String name, Web::HTML::TransferDataEncoder, Web::HTML::SerializedEnvironmentSettingsObject, Web::Bindings::AgentType) override;
|
2026-05-21 10:33:23 -03:00
|
|
|
virtual void connect_shared_worker(Web::HTML::TransferDataEncoder, Web::HTML::SerializedEnvironmentSettingsObject) override;
|
2025-03-08 14:22:39 -03:00
|
|
|
virtual void handle_file_return(i32 error, Optional<IPC::File> file, i32 request_id) override;
|
2026-05-21 10:33:23 -03:00
|
|
|
virtual void did_worker_agent_finish_loading_script(Web::HTML::WorkerAgentOwnerToken owner_token) override;
|
|
|
|
|
virtual void did_worker_agent_fail_loading_script(Web::HTML::WorkerAgentOwnerToken owner_token) override;
|
|
|
|
|
virtual void did_worker_agent_report_exception(Web::HTML::WorkerAgentOwnerToken owner_token, String message, String filename, u32 lineno, u32 colno) override;
|
|
|
|
|
virtual void did_worker_agent_close(Web::HTML::WorkerAgentOwnerToken owner_token) override;
|
2026-04-10 16:18:00 -03:00
|
|
|
virtual void broadcast_channel_message(Web::HTML::BroadcastChannelMessage message) override;
|
2023-11-08 15:47:41 -03:00
|
|
|
|
2024-11-14 12:01:23 -03:00
|
|
|
GC::Root<PageHost> m_page_host;
|
2023-11-08 15:47:41 -03:00
|
|
|
|
|
|
|
|
// FIXME: Route console messages to the Browser UI using a ConsoleClient
|
|
|
|
|
|
|
|
|
|
HashMap<int, Web::FileRequest> m_requested_files {};
|
|
|
|
|
int last_id { 0 };
|
|
|
|
|
|
2025-05-18 17:10:01 -03:00
|
|
|
RefPtr<WorkerHost> m_worker_host;
|
2023-11-08 15:47:41 -03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|