top level:
[WebKit-https.git] / WebCore / platform / network / qt / ResourceHandleManager.h
1 /*
2  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #ifndef ResourceHandleManager_H
29 #define ResourceHandleManager_H
30
31 #include <QMap>
32 #include <QObject>
33
34 #include "ResourceHandle.h"
35
36 // forward declarations for Qt-only build
37 namespace KIO {
38 class Job;
39 }
40 class KJob;
41
42 namespace WebCore {
43
44 class FrameQtClient;
45
46     
47 class QtJob : public QObject
48 {
49     Q_OBJECT
50 public:
51     QtJob(const QString& url);
52
53 Q_SIGNALS:
54     void finished(QtJob* job, const QByteArray& data);
55
56 protected:
57     virtual void timerEvent(QTimerEvent*);
58
59 private:
60     QString m_path;
61 };
62
63 class ResourceHandleManager : public QObject
64 {
65     Q_OBJECT
66 public:
67     static ResourceHandleManager* self();
68
69     void add(ResourceHandle*, FrameQtClient*);
70     void cancel(ResourceHandle*);
71
72 public Q_SLOTS:
73     void slotData(KIO::Job*, const QByteArray& data);
74     void slotMimetype(KIO::Job*, const QString& type);
75     void slotResult(KJob*);
76     void deliverJobData(QtJob* , const QByteArray&);
77     
78 private:
79     ResourceHandleManager();
80     ~ResourceHandleManager();
81
82     void remove(ResourceHandle*);
83
84 #if PLATFORM(KDE)
85     // KIO Job <-> WebKit Job mapping
86     QMap<ResourceHandle*, KIO::Job*> m_jobToKioMap;
87     QMap<KIO::Job*, ResourceHandle*> m_kioToJobMap;
88 #else
89     
90     QMap<ResourceHandle*, QtJob*> m_resourceToJob;
91     QMap<QtJob*, ResourceHandle*> m_jobToResource;
92 #endif
93
94     FrameQtClient* m_frameClient;
95 };
96
97 }
98
99 #endif