9cd7196eef43d1fc3f29224adea4875dc8a241a2
[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 "Shared.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 Shared<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
64         virtual void setDefersLoading(bool);
65
66         void setIdentifier(unsigned long identifier) { m_identifier = identifier; }
67         unsigned long identifier() const { return m_identifier; }
68
69         virtual void releaseResources();
70         const ResourceResponse& response() const;
71
72         virtual void addData(const char*, int, bool allAtOnce);
73         virtual PassRefPtr<SharedBuffer> resourceData();
74         void clearResourceData();
75         
76         virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse);
77         virtual void didReceiveResponse(const ResourceResponse&);
78         virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce);
79         void willStopBufferingData(const char*, int);
80         virtual void didFinishLoading();
81         virtual void didFail(const ResourceError&);
82
83         void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
84         void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
85         void receivedCancellation(const AuthenticationChallenge&);
86
87         // ResourceHandleClient
88         virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse& redirectResponse);        
89         virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
90         virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
91         virtual void didFinishLoading(ResourceHandle*);
92         virtual void didFail(ResourceHandle*, const ResourceError&);
93         virtual void willStopBufferingData(ResourceHandle*, const char* data, int length) { willStopBufferingData(data, length); } 
94         virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didReceiveAuthenticationChallenge(challenge); } 
95         virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didCancelAuthenticationChallenge(challenge); } 
96         virtual void receivedCancellation(ResourceHandle*, const AuthenticationChallenge& challenge) { receivedCancellation(challenge); }
97         virtual void willCacheResponse(ResourceHandle*, CacheStoragePolicy&);
98
99         ResourceHandle* handle() const { return m_handle.get(); }
100
101     protected:
102         ResourceLoader(Frame*);
103
104         virtual void didCancel(const ResourceError&);
105         void didFinishLoadingOnePart();
106
107         const ResourceRequest& request() const { return m_request; }
108         void setRequest(const ResourceRequest& request) { m_request = request; }
109         bool reachedTerminalState() const { return m_reachedTerminalState; }
110         bool cancelled() const { return m_cancelled; }
111         bool defersLoading() const { return m_defersLoading; }
112
113         RefPtr<ResourceHandle> m_handle;
114
115     private:
116         ResourceRequest m_request;
117
118         bool m_reachedTerminalState;
119         bool m_cancelled;
120         bool m_calledDidFinishLoad;
121
122 protected:
123         // FIXME: Once everything is made cross platform, these can be private instead of protected
124         RefPtr<Frame> m_frame;
125         RefPtr<DocumentLoader> m_documentLoader;
126         ResourceResponse m_response;
127         unsigned long m_identifier;
128
129         KURL m_originalURL;
130         RefPtr<SharedBuffer> m_resourceData;
131         bool m_defersLoading;
132         ResourceRequest m_deferredRequest;
133     };
134
135 }
136
137 #endif