Forgot to export the plugin exporter. Fixing it.
[WebKit-https.git] / WebKitQt / Api / qwebnetworkinterface_p.h
1 /*
2   Copyright (C) 2007 Trolltech ASA
3   
4   This library is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Library General Public
6   License as published by the Free Software Foundation; either
7   version 2 of the License, or (at your option) any later version.
8   
9   This library is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Library General Public License for more details.
13   
14   You should have received a copy of the GNU Library General Public License
15   along with this library; see the file COPYING.LIB.  If not, write to
16   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17   Boston, MA 02111-1307, USA.
18   
19   This class provides all functionality needed for loading images, style sheets and html
20   pages from the web. It has a memory cache for these objects.
21 */
22 #ifndef QWEBNETWORKINTERFACE_P_H
23 #define QWEBNETWORKINTERFACE_P_H
24
25 #include "qwebnetworkinterface.h"
26 #include <qthread.h>
27
28 namespace WebCore {
29     struct HostInfo;
30 };
31 uint qHash(const WebCore::HostInfo &info);
32 #include <qhash.h>
33
34 namespace WebCore {
35     class ResourceHandle;
36 }
37
38 class QWebNetworkJobPrivate
39 {
40 public:
41     QWebNetworkJobPrivate()
42         : ref(1)
43         , resourceHandle(0)
44         , redirected(false)
45         , interface(0)
46         , connector(0)
47         {}
48     int ref;
49     QUrl url;
50     QHttpRequestHeader request;
51     QByteArray postData;
52
53     QHttpResponseHeader response;
54
55     WebCore::ResourceHandle *resourceHandle;
56     bool redirected;
57
58     QWebNetworkInterface *interface;
59     QWebObjectPluginConnector *connector;
60
61     void setURL(const QUrl &u);
62     void setDefaults(const QString &method, const QUrl &url);
63 };
64
65
66 class QWebNetworkManager : public QObject
67 {
68     Q_OBJECT
69 public:
70     static QWebNetworkManager *self();
71
72     bool add(WebCore::ResourceHandle *resourceHandle, QWebNetworkInterface *interface);
73     void cancel(WebCore::ResourceHandle *resourceHandle);
74
75     void addHttpJob(QWebNetworkJob *job);
76     void cancelHttpJob(QWebNetworkJob *job);
77
78 public slots:
79     void started(QWebNetworkJob *);
80     void data(QWebNetworkJob *, const QByteArray &data);
81     void finished(QWebNetworkJob *, int errorCode);
82
83 signals:
84     void fileRequest(QWebNetworkJob*);
85
86 private slots:
87     void httpConnectionClosed(const WebCore::HostInfo &);
88
89 private:
90     friend class QWebNetworkInterface;
91     QWebNetworkManager();
92     QHash<WebCore::HostInfo, WebCore::WebCoreHttp *> m_hostMapping;
93 };
94
95
96 namespace WebCore {
97
98     class NetworkLoader;
99
100     struct HostInfo {
101         HostInfo() {}
102         HostInfo(const QUrl& url);
103         QString protocol;
104         QString host;
105         int port;
106     };
107
108     class WebCoreHttp : public QObject
109     {
110         Q_OBJECT
111     public:
112         WebCoreHttp(QObject *parent, const HostInfo&);
113         ~WebCoreHttp();
114
115         void request(QWebNetworkJob* resource);
116         void cancel(QWebNetworkJob*);
117
118     signals:
119         void connectionClosed(const WebCore::HostInfo &);
120
121     private slots:
122         void onResponseHeaderReceived(const QHttpResponseHeader& resp);
123         void onReadyRead();
124         void onRequestFinished(int, bool);
125         void onStateChanged(int);
126
127         void scheduleNextRequest();
128
129         int getConnection();
130
131     public:
132         HostInfo info;
133     private:
134         QList<QWebNetworkJob *> m_pendingRequests;
135         struct HttpConnection {
136             QHttp *http;
137             QWebNetworkJob *current;
138         };
139         HttpConnection connection[2];
140         bool m_inCancel;
141     };
142
143 }
144
145 class QWebNetworkInterfacePrivate
146 {
147 public:
148     void sendFileData(QWebNetworkJob* job, int statusCode, const QByteArray &data);
149     void parseDataUrl(QWebNetworkJob* job);
150
151     QWebNetworkInterface *q;
152 };
153
154 #endif