Reviewed by Darin, Geoff.
[WebKit-https.git] / WebCore / platform / network / ResourceHandle.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 ResourceHandle_h
27 #define ResourceHandle_h
28
29 #include "HTTPHeaderMap.h"
30 #include "ResourceHandleClient.h" // for PlatformResponse
31
32 #if PLATFORM(WIN)
33 typedef unsigned long DWORD;
34 typedef unsigned long DWORD_PTR;
35 typedef void* LPVOID;
36 typedef LPVOID HINTERNET;
37 typedef unsigned WPARAM;
38 typedef long LPARAM;
39 typedef struct HWND__* HWND;
40 typedef _W64 long LONG_PTR;
41 typedef LONG_PTR LRESULT;
42 #endif
43
44 #if PLATFORM(MAC)
45 #ifdef __OBJC__
46 @class NSURLRequest;
47 @class NSURLResponse;
48 @class NSError;
49 #else
50 class NSURLRequest;
51 class NSURLResponse;
52 class NSError;
53 #endif
54 #endif
55
56 namespace WebCore {
57
58 class DocLoader;
59 class FormData;
60 class KURL;
61 class ResourceHandleInternal;
62
63 struct ResourceRequest;
64
65 template <typename T> class Timer;
66
67 class ResourceHandle : public Shared<ResourceHandle> {
68 private:
69     ResourceHandle(const ResourceRequest&, ResourceHandleClient*);
70
71 public:
72     // FIXME: should not need the DocLoader
73     static PassRefPtr<ResourceHandle> create(const ResourceRequest&, ResourceHandleClient*, DocLoader*);
74
75     ~ResourceHandle();
76
77 #if PLATFORM(MAC)
78     NSURLRequest *willSendRequest(NSURLRequest *, NSURLResponse *);
79     void didReceiveResponse(NSURLResponse *);  
80     void addData(NSData *);
81     void finishJobAndHandle(NSData *);
82     void reportError(NSError* error);
83 #endif
84
85 #if USE(WININET)
86     void setHasReceivedResponse(bool = true);
87     bool hasReceivedResponse() const;
88     void fileLoadTimer(Timer<ResourceHandle>*);
89     void onHandleCreated(LPARAM);
90     void onRequestRedirected(LPARAM);
91     void onRequestComplete(LPARAM);
92     friend void __stdcall transferJobStatusCallback(HINTERNET, DWORD_PTR, DWORD, LPVOID, DWORD);
93     friend LRESULT __stdcall ResourceHandleWndProc(HWND, unsigned message, WPARAM, LPARAM);
94 #endif
95
96 #if PLATFORM(GDK) || PLATFORM(QT)
97     ResourceHandleInternal* getInternal() { return d; }
98 #endif
99
100 #if PLATFORM(QT)
101     QString extractCharsetFromHeaders(QString headers) const;
102 #endif
103
104     void cancel();
105     
106     ResourceHandleClient* client() const;
107
108     const HTTPHeaderMap& requestHeaders() const;
109     const KURL& url() const;
110     const String& method() const;
111     PassRefPtr<FormData> postData() const;
112
113 private:
114     bool start(DocLoader*);
115
116     ResourceHandleInternal* d;
117 };
118
119 }
120
121 #endif // ResourceHandle_h