• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <wtf/RefCounted.h>
36 #include "AuthenticationChallenge.h"
37 #include "KURL.h"
38 
39 #include <wtf/Forward.h>
40 
41 namespace WebCore {
42 
43     class ApplicationCacheHost;
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;
documentLoader()59         DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
60 
61         virtual void cancel(const ResourceError&);
62         ResourceError cancelledError();
63         ResourceError blockedError();
64         ResourceError cannotShowURLError();
65 
66         virtual void setDefersLoading(bool);
67 #if PLATFORM(ANDROID)
68 // TODO: This needs upstreaming to WebKit.
69         virtual void pauseLoad(bool);
70 #endif
71 
setIdentifier(unsigned long identifier)72         void setIdentifier(unsigned long identifier) { m_identifier = identifier; }
identifier()73         unsigned long identifier() const { return m_identifier; }
74 
75         virtual void releaseResources();
76         const ResourceResponse& response() const;
77 
78         virtual void addData(const char*, int, bool allAtOnce);
79         virtual PassRefPtr<SharedBuffer> resourceData();
80         void clearResourceData();
81 
82         virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse);
83         virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
84         virtual void didReceiveResponse(const ResourceResponse&);
85         virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce);
86         void willStopBufferingData(const char*, int);
87         virtual void didFinishLoading();
88         virtual void didFail(const ResourceError&);
89 
90         virtual bool shouldUseCredentialStorage();
91         virtual void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
92         void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
93         virtual void receivedCancellation(const AuthenticationChallenge&);
94 
95         // ResourceHandleClient
96         virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse& redirectResponse);
97         virtual void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
98         virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
99         virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
100         virtual void didFinishLoading(ResourceHandle*);
101         virtual void didFail(ResourceHandle*, const ResourceError&);
102         virtual void wasBlocked(ResourceHandle*);
103         virtual void cannotShowURL(ResourceHandle*);
willStopBufferingData(ResourceHandle *,const char * data,int length)104         virtual void willStopBufferingData(ResourceHandle*, const char* data, int length) { willStopBufferingData(data, length); }
shouldUseCredentialStorage(ResourceHandle *)105         virtual bool shouldUseCredentialStorage(ResourceHandle*) { return shouldUseCredentialStorage(); }
didReceiveAuthenticationChallenge(ResourceHandle *,const AuthenticationChallenge & challenge)106         virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didReceiveAuthenticationChallenge(challenge); }
didCancelAuthenticationChallenge(ResourceHandle *,const AuthenticationChallenge & challenge)107         virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didCancelAuthenticationChallenge(challenge); }
receivedCancellation(ResourceHandle *,const AuthenticationChallenge & challenge)108         virtual void receivedCancellation(ResourceHandle*, const AuthenticationChallenge& challenge) { receivedCancellation(challenge); }
109         virtual void willCacheResponse(ResourceHandle*, CacheStoragePolicy&);
110 #if PLATFORM(MAC)
111         virtual NSCachedURLResponse* willCacheResponse(ResourceHandle*, NSCachedURLResponse*);
112 #endif
113 #if USE(CFNETWORK)
114         virtual bool shouldCacheResponse(ResourceHandle*, CFCachedURLResponseRef);
115 #endif
116 
handle()117         ResourceHandle* handle() const { return m_handle.get(); }
sendResourceLoadCallbacks()118         bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; }
119 
120         void setShouldBufferData(bool shouldBufferData);
121 
122     protected:
123         ResourceLoader(Frame*, bool sendResourceLoadCallbacks, bool shouldContentSniff);
124 
125 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
126         friend class ApplicationCacheHost;  // for access to request()
127 #endif
128 
129         virtual void didCancel(const ResourceError&);
130         void didFinishLoadingOnePart();
131 
request()132         const ResourceRequest& request() const { return m_request; }
reachedTerminalState()133         bool reachedTerminalState() const { return m_reachedTerminalState; }
cancelled()134         bool cancelled() const { return m_cancelled; }
defersLoading()135         bool defersLoading() const { return m_defersLoading; }
136 
137         RefPtr<ResourceHandle> m_handle;
138         RefPtr<Frame> m_frame;
139         RefPtr<DocumentLoader> m_documentLoader;
140         ResourceResponse m_response;
141 
142     private:
143         ResourceRequest m_request;
144         RefPtr<SharedBuffer> m_resourceData;
145 
146         unsigned long m_identifier;
147 
148         bool m_reachedTerminalState;
149         bool m_cancelled;
150         bool m_calledDidFinishLoad;
151 
152         bool m_sendResourceLoadCallbacks;
153         bool m_shouldContentSniff;
154         bool m_shouldBufferData;
155         bool m_defersLoading;
156         ResourceRequest m_deferredRequest;
157     };
158 
159 }
160 
161 #endif
162