summaryrefslogtreecommitdiff
path: root/Ladybird/RequestManagerQt.h
blob: eb8b7365c0e4f8ece2fa6a631ff11eaa6c751a3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#define AK_DONT_REPLACE_STD

#include <LibWeb/Loader/ResourceLoader.h>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>

class RequestManagerQt
    : public QObject
    , public Web::ResourceLoaderConnector {
    Q_OBJECT
public:
    static NonnullRefPtr<RequestManagerQt> create()
    {
        return adopt_ref(*new RequestManagerQt());
    }

    virtual ~RequestManagerQt() override { }

    virtual void prefetch_dns(AK::URL const&) override { }
    virtual void preconnect(AK::URL const&) override { }

    virtual RefPtr<Web::ResourceLoaderConnectorRequest> start_request(DeprecatedString const& method, AK::URL const&, HashMap<DeprecatedString, DeprecatedString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&) override;

private slots:
    void reply_finished(QNetworkReply*);

private:
    RequestManagerQt();

    class Request
        : public Web::ResourceLoaderConnectorRequest {
    public:
        static ErrorOr<NonnullRefPtr<Request>> create(QNetworkAccessManager& qnam, DeprecatedString const& method, AK::URL const& url, HashMap<DeprecatedString, DeprecatedString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&);

        virtual ~Request() override;

        virtual void set_should_buffer_all_input(bool) override { }
        virtual bool stop() override { return false; }
        virtual void stream_into(AK::Stream&) override { }

        void did_finish();

        QNetworkReply& reply() { return m_reply; }

    private:
        Request(QNetworkReply&);

        QNetworkReply& m_reply;
    };

    HashMap<QNetworkReply*, NonnullRefPtr<Request>> m_pending;
    QNetworkAccessManager* m_qnam { nullptr };
};