4509c124f4864c6e76a98c5aee8ee8a6dd87cfd5
[WebKit-https.git] / WebCore / platform / ResourceLoader.h
1 /*
2  * Copyright (C) 2004, 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef ResourceLoader_h
27 #define ResourceLoader_h
28
29 #include "ResourceLoaderClient.h" // for PlatformResponse
30 #include "StringHash.h"
31 #include "Timer.h"
32 #include <wtf/HashMap.h>
33 #include <wtf/Platform.h>
34
35 #if PLATFORM(WIN)
36 typedef unsigned long DWORD;
37 typedef unsigned long DWORD_PTR;
38 typedef void* LPVOID;
39 typedef LPVOID HINTERNET;
40 typedef unsigned WPARAM;
41 typedef long LPARAM;
42 typedef struct HWND__* HWND;
43 typedef _W64 long LONG_PTR;
44 typedef LONG_PTR LRESULT;
45 #endif
46
47 #if PLATFORM(MAC)
48 #ifdef __OBJC__
49 @class WebCoreResourceLoaderImp;
50 #else
51 class WebCoreResourceLoaderImp;
52 #endif
53 #endif
54
55 namespace WebCore {
56
57 class DocLoader;
58 class FormData;
59 class KURL;
60 class ResourceLoaderInternal;
61
62 class ResourceLoader : public Shared<ResourceLoader> {
63 private:
64     ResourceLoader(ResourceLoaderClient*, const String& method, const KURL&);
65     ResourceLoader(ResourceLoaderClient*, const String& method, const KURL&, const FormData& postData);
66
67 public:
68     static PassRefPtr<ResourceLoader> create(ResourceLoaderClient*, const String& method, const KURL&);
69     static PassRefPtr<ResourceLoader> create(ResourceLoaderClient*, const String& method, const KURL&, const FormData& postData);    
70
71     ~ResourceLoader();
72
73     bool start(DocLoader*);
74     bool startHTTPRequest(const String& referrer);
75
76     int error() const;
77     void setError(int);
78     String errorText() const;
79     bool isErrorPage() const;
80     String queryMetaData(const String&) const;
81     void addMetaData(const String& key, const String& value);
82     void addMetaData(const HashMap<String, String>&);
83     void kill();
84
85     KURL url() const;
86     String method() const;
87     FormData postData() const;
88
89 #if PLATFORM(MAC)
90     void setLoader(WebCoreResourceLoaderImp*);
91 #endif
92
93 #if USE(WININET)
94     void setHasReceivedResponse(bool b = true);
95     bool hasReceivedResponse() const;
96     void fileLoadTimer(Timer<ResourceLoader>* timer);
97     void onHandleCreated(LPARAM);
98     void onRequestRedirected(LPARAM);
99     void onRequestComplete(LPARAM);
100     friend void __stdcall transferJobStatusCallback(HINTERNET, DWORD_PTR, DWORD, LPVOID, DWORD);
101     friend LRESULT __stdcall ResourceLoaderWndProc(HWND, unsigned message, WPARAM, LPARAM);
102 #endif
103
104 #if PLATFORM(GDK) || PLATFORM(QT)
105     ResourceLoaderInternal* getInternal() { return d; }
106 #endif
107
108 #if PLATFORM(QT)
109     // Helper function
110     QString extractCharsetFromHeaders(QString headers) const;
111 #endif
112
113     void cancel();
114     
115     ResourceLoaderClient* client() const;
116
117     void receivedResponse(PlatformResponse);
118
119 private:
120     void assembleResponseHeaders() const;
121     void retrieveCharset() const;
122
123     ResourceLoaderInternal* d;
124 };
125
126 }
127
128 #endif // ResourceLoader_h