/* * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Ladybird { class RequestManagerQt : public QObject , public Web::ResourceLoaderConnector { Q_OBJECT public: static NonnullRefPtr create(Vector const& certificate_paths) { return adopt_ref(*new RequestManagerQt(certificate_paths)); } virtual ~RequestManagerQt() override { } virtual void prefetch_dns(URL::URL const&) override { } virtual void preconnect(URL::URL const&) override { } virtual RefPtr start_request(ByteString const& method, URL::URL const&, HTTP::HeaderMap const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&) override; virtual RefPtr websocket_connect(const URL::URL&, ByteString const& origin, Vector const& protocols) override; private slots: void reply_finished(QNetworkReply*); private: explicit RequestManagerQt(Vector const& certificate_paths); class Request : public Web::ResourceLoaderConnectorRequest { public: static ErrorOr> create(QNetworkAccessManager& qnam, ByteString const& method, URL::URL const& url, HTTP::HeaderMap const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&); virtual ~Request() override; virtual void set_buffered_request_finished_callback(Requests::Request::BufferedRequestFinished) override; virtual void set_unbuffered_request_callbacks(Requests::Request::HeadersReceived, Requests::Request::DataReceived, Requests::Request::RequestFinished) override; virtual bool stop() override { return false; } void did_finish(); QNetworkReply& reply() { return m_reply; } private: Request(QNetworkReply&); QNetworkReply& m_reply; Requests::Request::BufferedRequestFinished on_buffered_request_finish; }; HashMap> m_pending; QNetworkAccessManager* m_qnam { nullptr }; }; }