02f4c6934867a0af4dac6718340a8315e78579c0
[WebKit-https.git] / WebCore / loader / ResourceLoader.h
1 /*
2  * Copyright (C) 2005, 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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef ResourceLoader_h
30 #define ResourceLoader_h
31
32 #include "ResourceHandleClient.h"
33 #include "ResourceRequest.h"
34 #include "ResourceResponse.h"
35 #include "ResourceLoader.h"
36 #include <wtf/RefCounted.h>
37 #include "AuthenticationChallenge.h"
38 #include "KURL.h"
39
40 #include <wtf/Forward.h>
41
42 namespace WebCore {
43
44     class DocumentLoader;
45     class Frame;
46     class FrameLoader;
47     class ResourceHandle;
48     class SharedBuffer;
49     
50     class ResourceLoader : public RefCounted<ResourceLoader>, protected ResourceHandleClient {
51     public:
52         virtual ~ResourceLoader();
53
54         void cancel();
55
56         virtual bool load(const ResourceRequest&);
57
58         FrameLoader* frameLoader() const;
59         DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
60         
61         virtual void cancel(const ResourceError&);
62         ResourceError cancelledError();
63         ResourceError blockedError();
64         
65         virtual void setDefersLoading(bool);
66
67         void setIdentifier(unsigned long identifier) { m_identifier = identifier; }
68         unsigned long identifier() const { return m_identifier; }
69
70         virtual void releaseResources();
71         const ResourceResponse& response() const;
72
73         virtual void addData(const char*, int, bool allAtOnce);
74         virtual PassRefPtr<SharedBuffer> resourceData();
75         void clearResourceData();
76         
77         virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse);
78         virtual void didReceiveResponse(const ResourceResponse&);
79         virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce);
80         void willStopBufferingData(const char*, int);
81         virtual void didFinishLoading();
82         virtual void didFail(const ResourceError&);
83         virtual void wasBlocked();
84
85         void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
86         void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
87         virtual void receivedCancellation(const AuthenticationChallenge&);
88
89         // ResourceHandleClient
90         virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse& redirectResponse);        
91         virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
92         virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
93         virtual void didFinishLoading(ResourceHandle*);
94         virtual void didFail(ResourceHandle*, const ResourceError&);
95         virtual void wasBlocked(ResourceHandle*);
96         virtual void willStopBufferingData(ResourceHandle*, const char* data, int length) { willStopBufferingData(data, length); } 
97         virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didReceiveAuthenticationChallenge(challenge); } 
98         virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didCancelAuthenticationChallenge(challenge); } 
99         virtual void receivedCancellation(ResourceHandle*, const AuthenticationChallenge& challenge) { receivedCancellation(challenge); }
100         virtual void willCacheResponse(ResourceHandle*, CacheStoragePolicy&);
101 #if PLATFORM(MAC)
102         virtual NSCachedURLResponse* willCacheResponse(ResourceHandle*, NSCachedURLResponse*);
103 #endif
104
105         ResourceHandle* handle() const { return m_handle.get(); }
106         bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; }
107
108         void setShouldBufferData(bool shouldBufferData) { m_shouldBufferData = shouldBufferData; }
109
110     protected:
111         ResourceLoader(Frame*, bool sendResourceLoadCallbacks, bool shouldContentSniff);
112
113         virtual void didCancel(const ResourceError&);
114         void didFinishLoadingOnePart();
115
116         const ResourceRequest& request() const { return m_request; }
117         void setRequest(const ResourceRequest& request) { m_request = request; }
118         bool reachedTerminalState() const { return m_reachedTerminalState; }
119         bool cancelled() const { return m_cancelled; }
120         bool defersLoading() const { return m_defersLoading; }
121
122         RefPtr<ResourceHandle> m_handle;
123
124     private:
125         ResourceRequest m_request;
126
127         bool m_reachedTerminalState;
128         bool m_cancelled;
129         bool m_calledDidFinishLoad;
130
131         bool m_sendResourceLoadCallbacks;
132         bool m_shouldContentSniff;
133         bool m_shouldBufferData;
134 protected:
135         // FIXME: Once everything is made cross platform, these can be private instead of protected
136         RefPtr<Frame> m_frame;
137         RefPtr<DocumentLoader> m_documentLoader;
138         ResourceResponse m_response;
139         unsigned long m_identifier;
140
141         KURL m_originalURL;
142         RefPtr<SharedBuffer> m_resourceData;
143         bool m_defersLoading;
144         ResourceRequest m_deferredRequest;
145     };
146
147 }
148
149 #endif