| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
| 3 Copyright (C) 2001 Dirk Mueller <mueller@kde.org> | 3 Copyright (C) 2001 Dirk Mueller <mueller@kde.org> |
| 4 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 4 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
| 5 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 5 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 6 | 6 |
| 7 This library is free software; you can redistribute it and/or | 7 This library is free software; you can redistribute it and/or |
| 8 modify it under the terms of the GNU Library General Public | 8 modify it under the terms of the GNU Library General Public |
| 9 License as published by the Free Software Foundation; either | 9 License as published by the Free Software Foundation; either |
| 10 version 2 of the License, or (at your option) any later version. | 10 version 2 of the License, or (at your option) any later version. |
| 11 | 11 |
| 12 This library is distributed in the hope that it will be useful, | 12 This library is distributed in the hope that it will be useful, |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 Library General Public License for more details. | 15 Library General Public License for more details. |
| 16 | 16 |
| 17 You should have received a copy of the GNU Library General Public License | 17 You should have received a copy of the GNU Library General Public License |
| 18 along with this library; see the file COPYING.LIB. If not, write to | 18 along with this library; see the file COPYING.LIB. If not, write to |
| 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 20 Boston, MA 02110-1301, USA. | 20 Boston, MA 02110-1301, USA. |
| 21 | 21 |
| 22 This class provides all functionality needed for loading images, style sheet
s and html | 22 This class provides all functionality needed for loading images, style sheet
s and html |
| 23 pages from the web. It has a memory cache for these objects. | 23 pages from the web. It has a memory cache for these objects. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #ifndef CachedResourceLoader_h | 26 #ifndef CachedResourceLoader_h |
| 27 #define CachedResourceLoader_h | 27 #define CachedResourceLoader_h |
| 28 | 28 |
| 29 #include "core/loader/ResourceLoaderHost.h" | |
| 30 #include "core/loader/cache/CachePolicy.h" | 29 #include "core/loader/cache/CachePolicy.h" |
| 31 #include "core/loader/cache/CachedResource.h" | 30 #include "core/loader/cache/CachedResource.h" |
| 32 #include "core/loader/cache/CachedResourceHandle.h" | 31 #include "core/loader/cache/CachedResourceHandle.h" |
| 33 #include "core/loader/cache/CachedResourceInitiatorInfo.h" | 32 #include "core/loader/cache/CachedResourceInitiatorInfo.h" |
| 34 #include "core/loader/cache/CachedResourceRequest.h" | 33 #include "core/loader/cache/CachedResourceRequest.h" |
| 35 #include "core/platform/Timer.h" | 34 #include "core/platform/Timer.h" |
| 36 #include "wtf/Deque.h" | 35 #include "wtf/Deque.h" |
| 37 #include "wtf/HashMap.h" | 36 #include "wtf/HashMap.h" |
| 38 #include "wtf/HashSet.h" | 37 #include "wtf/HashSet.h" |
| 39 #include "wtf/ListHashSet.h" | 38 #include "wtf/ListHashSet.h" |
| 40 #include "wtf/text/StringHash.h" | 39 #include "wtf/text/StringHash.h" |
| 41 | 40 |
| 42 namespace WebCore { | 41 namespace WebCore { |
| 43 | 42 |
| 44 class CachedCSSStyleSheet; | 43 class CachedCSSStyleSheet; |
| 45 class CachedDocument; | 44 class CachedDocument; |
| 46 class CachedFont; | 45 class CachedFont; |
| 47 class CachedImage; | 46 class CachedImage; |
| 48 class CachedRawResource; | 47 class CachedRawResource; |
| 49 class CachedScript; | 48 class CachedScript; |
| 50 class CachedShader; | 49 class CachedShader; |
| 51 class CachedTextTrack; | 50 class CachedTextTrack; |
| 52 class CachedXSLStyleSheet; | 51 class CachedXSLStyleSheet; |
| 53 class Document; | 52 class Document; |
| 54 class DocumentLoader; | 53 class DocumentLoader; |
| 55 class Frame; | 54 class Frame; |
| 56 class FrameLoader; | |
| 57 class ImageLoader; | 55 class ImageLoader; |
| 58 class KURL; | 56 class KURL; |
| 59 | 57 |
| 60 // The CachedResourceLoader provides a per-context interface to the MemoryCache | 58 // The CachedResourceLoader provides a per-context interface to the MemoryCache |
| 61 // and enforces a bunch of security checks and rules for resource revalidation. | 59 // and enforces a bunch of security checks and rules for resource revalidation. |
| 62 // Its lifetime is roughly per-DocumentLoader, in that it is generally created | 60 // Its lifetime is roughly per-DocumentLoader, in that it is generally created |
| 63 // in the DocumentLoader constructor and loses its ability to generate network | 61 // in the DocumentLoader constructor and loses its ability to generate network |
| 64 // requests when the DocumentLoader is destroyed. Documents also hold a | 62 // requests when the DocumentLoader is destroyed. Documents also hold a |
| 65 // RefPtr<CachedResourceLoader> for their lifetime (and will create one if they | 63 // RefPtr<CachedResourceLoader> for their lifetime (and will create one if they |
| 66 // are initialized without a Frame), so a Document can keep a CachedResourceLoad
er | 64 // are initialized without a Frame), so a Document can keep a CachedResourceLoad
er |
| 67 // alive past detach if scripts still reference the Document. | 65 // alive past detach if scripts still reference the Document. |
| 68 class CachedResourceLoader : public RefCounted<CachedResourceLoader>, public Res
ourceLoaderHost { | 66 class CachedResourceLoader : public RefCounted<CachedResourceLoader> { |
| 69 WTF_MAKE_NONCOPYABLE(CachedResourceLoader); WTF_MAKE_FAST_ALLOCATED; | 67 WTF_MAKE_NONCOPYABLE(CachedResourceLoader); WTF_MAKE_FAST_ALLOCATED; |
| 70 friend class ImageLoader; | 68 friend class ImageLoader; |
| 71 friend class ResourceCacheValidationSuppressor; | 69 friend class ResourceCacheValidationSuppressor; |
| 72 | 70 |
| 73 public: | 71 public: |
| 74 static PassRefPtr<CachedResourceLoader> create(DocumentLoader* documentLoade
r) { return adoptRef(new CachedResourceLoader(documentLoader)); } | 72 static PassRefPtr<CachedResourceLoader> create(DocumentLoader* documentLoade
r) { return adoptRef(new CachedResourceLoader(documentLoader)); } |
| 75 ~CachedResourceLoader(); | 73 ~CachedResourceLoader(); |
| 76 | 74 |
| 77 using RefCounted<CachedResourceLoader>::ref; | |
| 78 using RefCounted<CachedResourceLoader>::deref; | |
| 79 | |
| 80 CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest&); | 75 CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest&); |
| 81 CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourc
eRequest&); | 76 CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourc
eRequest&); |
| 82 CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedRes
ourceRequest&); | 77 CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedRes
ourceRequest&); |
| 83 CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest&); | 78 CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest&); |
| 84 CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&); | 79 CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&); |
| 85 CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceReq
uest&); | 80 CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceReq
uest&); |
| 86 CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRe
quest&); | 81 CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRe
quest&); |
| 87 CachedResourceHandle<CachedDocument> requestSVGDocument(CachedResourceReques
t&); | 82 CachedResourceHandle<CachedDocument> requestSVGDocument(CachedResourceReques
t&); |
| 88 CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourc
eRequest&); | 83 CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourc
eRequest&); |
| 89 CachedResourceHandle<CachedResource> requestLinkResource(CachedResource::Typ
e, CachedResourceRequest&); | 84 CachedResourceHandle<CachedResource> requestLinkResource(CachedResource::Typ
e, CachedResourceRequest&); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 108 | 103 |
| 109 CachePolicy cachePolicy(CachedResource::Type) const; | 104 CachePolicy cachePolicy(CachedResource::Type) const; |
| 110 | 105 |
| 111 Frame* frame() const; // Can be null | 106 Frame* frame() const; // Can be null |
| 112 Document* document() const { return m_document; } // Can be null | 107 Document* document() const { return m_document; } // Can be null |
| 113 void setDocument(Document* document) { m_document = document; } | 108 void setDocument(Document* document) { m_document = document; } |
| 114 | 109 |
| 115 DocumentLoader* documentLoader() const { return m_documentLoader; } | 110 DocumentLoader* documentLoader() const { return m_documentLoader; } |
| 116 void clearDocumentLoader() { m_documentLoader = 0; } | 111 void clearDocumentLoader() { m_documentLoader = 0; } |
| 117 | 112 |
| 113 void loadDone(CachedResource*); |
| 118 void garbageCollectDocumentResources(); | 114 void garbageCollectDocumentResources(); |
| 119 | 115 |
| 116 void incrementRequestCount(const CachedResource*); |
| 117 void decrementRequestCount(const CachedResource*); |
| 120 int requestCount() const { return m_requestCount; } | 118 int requestCount() const { return m_requestCount; } |
| 121 | 119 |
| 122 bool isPreloaded(const String& urlString) const; | 120 bool isPreloaded(const String& urlString) const; |
| 123 void clearPreloads(); | 121 void clearPreloads(); |
| 124 void clearPendingPreloads(); | 122 void clearPendingPreloads(); |
| 125 void preload(CachedResource::Type, CachedResourceRequest&, const String& cha
rset); | 123 void preload(CachedResource::Type, CachedResourceRequest&, const String& cha
rset); |
| 126 void checkForPendingPreloads(); | 124 void checkForPendingPreloads(); |
| 127 void printPreloadStats(); | 125 void printPreloadStats(); |
| 128 bool canRequest(CachedResource::Type, const KURL&, const ResourceLoaderOptio
ns&, bool forPreload = false); | 126 bool canRequest(CachedResource::Type, const KURL&, const ResourceLoaderOptio
ns&, bool forPreload = false); |
| 129 bool canAccess(CachedResource*); | 127 bool canAccess(CachedResource*); |
| 130 | 128 |
| 131 // ResourceLoaderHost | 129 static const ResourceLoaderOptions& defaultCachedResourceOptions(); |
| 132 virtual void incrementRequestCount(const CachedResource*) OVERRIDE; | |
| 133 virtual void decrementRequestCount(const CachedResource*) OVERRIDE; | |
| 134 virtual void didLoadResource(CachedResource*) OVERRIDE; | |
| 135 virtual void didFinishLoading(const CachedResource*, double finishTime, cons
t ResourceLoaderOptions&) OVERRIDE; | |
| 136 virtual void didChangeLoadingPriority(const CachedResource*, ResourceLoadPri
ority) OVERRIDE; | |
| 137 virtual void didFailLoading(const CachedResource*, const ResourceError&, con
st ResourceLoaderOptions&) OVERRIDE; | |
| 138 virtual void willSendRequest(const CachedResource*, ResourceRequest&, const
ResourceResponse& redirectResponse, const ResourceLoaderOptions&) OVERRIDE; | |
| 139 virtual void didReceiveResponse(const CachedResource*, const ResourceRespons
e&, const ResourceLoaderOptions&) OVERRIDE; | |
| 140 virtual void didReceiveData(const CachedResource*, const char* data, int dat
aLength, int encodedDataLength, const ResourceLoaderOptions&) OVERRIDE; | |
| 141 virtual void subresourceLoaderFinishedLoadingOnePart(ResourceLoader*) OVERRI
DE; | |
| 142 virtual void didInitializeResourceLoader(ResourceLoader*) OVERRIDE; | |
| 143 virtual void willTerminateResourceLoader(ResourceLoader*) OVERRIDE; | |
| 144 virtual void willStartLoadingResource(ResourceRequest&) OVERRIDE; | |
| 145 virtual bool defersLoading() const OVERRIDE; | |
| 146 virtual bool isLoadedBy(ResourceLoaderHost*) const OVERRIDE; | |
| 147 virtual bool shouldRequest(CachedResource*, const ResourceRequest&, const Re
sourceLoaderOptions&) OVERRIDE; | |
| 148 virtual void refResourceLoaderHost() OVERRIDE; | |
| 149 virtual void derefResourceLoaderHost() OVERRIDE; | |
| 150 virtual Frame* inspectedFrame() const OVERRIDE; | |
| 151 | 130 |
| 152 static const ResourceLoaderOptions& defaultCachedResourceOptions(); | |
| 153 private: | 131 private: |
| 154 | |
| 155 explicit CachedResourceLoader(DocumentLoader*); | 132 explicit CachedResourceLoader(DocumentLoader*); |
| 156 | 133 |
| 157 FrameLoader* frameLoader(); | |
| 158 | |
| 159 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, C
achedResourceRequest&); | 134 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, C
achedResourceRequest&); |
| 160 CachedResourceHandle<CachedResource> revalidateResource(const CachedResource
Request&, CachedResource*); | 135 CachedResourceHandle<CachedResource> revalidateResource(const CachedResource
Request&, CachedResource*); |
| 161 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, Cach
edResourceRequest&, const String& charset); | 136 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, Cach
edResourceRequest&, const String& charset); |
| 162 void preCacheDataURIImage(const CachedResourceRequest&); | 137 void preCacheDataURIImage(const CachedResourceRequest&); |
| 163 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<Cach
edResource>&, const CachedResourceRequest&); | 138 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<Cach
edResource>&, const CachedResourceRequest&); |
| 164 void requestPreload(CachedResource::Type, CachedResourceRequest&, const Stri
ng& charset); | 139 void requestPreload(CachedResource::Type, CachedResourceRequest&, const Stri
ng& charset); |
| 165 | 140 |
| 166 enum RevalidationPolicy { Use, Revalidate, Reload, Load }; | 141 enum RevalidationPolicy { Use, Revalidate, Reload, Load }; |
| 167 RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, Resourc
eRequest&, bool forPreload, CachedResource* existingResource, CachedResourceRequ
est::DeferOption) const; | 142 RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, Resourc
eRequest&, bool forPreload, CachedResource* existingResource, CachedResourceRequ
est::DeferOption) const; |
| 168 | 143 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 m_loader->m_allowStaleResources = m_previousState; | 198 m_loader->m_allowStaleResources = m_previousState; |
| 224 } | 199 } |
| 225 private: | 200 private: |
| 226 CachedResourceLoader* m_loader; | 201 CachedResourceLoader* m_loader; |
| 227 bool m_previousState; | 202 bool m_previousState; |
| 228 }; | 203 }; |
| 229 | 204 |
| 230 } // namespace WebCore | 205 } // namespace WebCore |
| 231 | 206 |
| 232 #endif | 207 #endif |
| OLD | NEW |