1/* 2 * Copyright (C) 2005, 2006, 2009 Apple 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 SubresourceLoader_h 30#define SubresourceLoader_h 31 32#include "FrameLoaderTypes.h" 33#include "ResourceLoader.h" 34 35#include <wtf/text/WTFString.h> 36 37namespace WebCore { 38 39class CachedResource; 40class CachedResourceLoader; 41class Document; 42class PageActivityAssertionToken; 43class ResourceRequest; 44 45class SubresourceLoader : public ResourceLoader { 46public: 47 static PassRefPtr<SubresourceLoader> create(Frame*, CachedResource*, const ResourceRequest&, const ResourceLoaderOptions&); 48 49 virtual ~SubresourceLoader(); 50 51 void cancelIfNotFinishing(); 52 virtual bool isSubresourceLoader(); 53 CachedResource* cachedResource(); 54 55private: 56 SubresourceLoader(Frame*, CachedResource*, const ResourceLoaderOptions&); 57 58 virtual bool init(const ResourceRequest&) OVERRIDE; 59 60 virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse) OVERRIDE; 61 virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) OVERRIDE; 62 virtual void didReceiveResponse(const ResourceResponse&) OVERRIDE; 63 virtual void didReceiveData(const char*, int, long long encodedDataLength, DataPayloadType) OVERRIDE; 64 virtual void didReceiveBuffer(PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType) OVERRIDE; 65 virtual void didFinishLoading(double finishTime) OVERRIDE; 66 virtual void didFail(const ResourceError&) OVERRIDE; 67 virtual void willCancel(const ResourceError&) OVERRIDE; 68 virtual void didCancel(const ResourceError&) OVERRIDE; 69 70#if USE(NETWORK_CFDATA_ARRAY_CALLBACK) 71 virtual bool supportsDataArray() OVERRIDE { return true; } 72 virtual void didReceiveDataArray(CFArrayRef) OVERRIDE; 73#endif 74 virtual void releaseResources() OVERRIDE; 75 76 bool checkForHTTPStatusCodeError(); 77 78 void didReceiveDataOrBuffer(const char*, int, PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType); 79 80 void notifyDone(); 81 82 enum SubresourceLoaderState { 83 Uninitialized, 84 Initialized, 85 Finishing 86 }; 87 88 class RequestCountTracker { 89 public: 90 RequestCountTracker(CachedResourceLoader*, CachedResource*); 91 ~RequestCountTracker(); 92 private: 93 CachedResourceLoader* m_cachedResourceLoader; 94 CachedResource* m_resource; 95 }; 96 97 CachedResource* m_resource; 98 bool m_loadingMultipartContent; 99 SubresourceLoaderState m_state; 100 OwnPtr<RequestCountTracker> m_requestCountTracker; 101 OwnPtr<PageActivityAssertionToken> m_activityAssertion; 102}; 103 104} 105 106#endif // SubresourceLoader_h 107