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