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" |
29 #include "core/loader/cache/CachePolicy.h" | 30 #include "core/loader/cache/CachePolicy.h" |
30 #include "core/loader/cache/CachedResource.h" | 31 #include "core/loader/cache/CachedResource.h" |
31 #include "core/loader/cache/CachedResourceHandle.h" | 32 #include "core/loader/cache/CachedResourceHandle.h" |
32 #include "core/loader/cache/CachedResourceInitiatorInfo.h" | 33 #include "core/loader/cache/CachedResourceInitiatorInfo.h" |
33 #include "core/loader/cache/CachedResourceRequest.h" | 34 #include "core/loader/cache/CachedResourceRequest.h" |
34 #include "core/platform/Timer.h" | 35 #include "core/platform/Timer.h" |
35 #include "wtf/Deque.h" | 36 #include "wtf/Deque.h" |
36 #include "wtf/HashMap.h" | 37 #include "wtf/HashMap.h" |
37 #include "wtf/HashSet.h" | 38 #include "wtf/HashSet.h" |
38 #include "wtf/ListHashSet.h" | 39 #include "wtf/ListHashSet.h" |
39 #include "wtf/text/StringHash.h" | 40 #include "wtf/text/StringHash.h" |
40 | 41 |
41 namespace WebCore { | 42 namespace WebCore { |
42 | 43 |
43 class CachedCSSStyleSheet; | 44 class CachedCSSStyleSheet; |
44 class CachedDocument; | 45 class CachedDocument; |
45 class CachedFont; | 46 class CachedFont; |
46 class CachedImage; | 47 class CachedImage; |
47 class CachedRawResource; | 48 class CachedRawResource; |
48 class CachedScript; | 49 class CachedScript; |
49 class CachedShader; | 50 class CachedShader; |
50 class CachedTextTrack; | 51 class CachedTextTrack; |
51 class CachedXSLStyleSheet; | 52 class CachedXSLStyleSheet; |
52 class Document; | 53 class Document; |
53 class DocumentLoader; | 54 class DocumentLoader; |
54 class Frame; | 55 class Frame; |
| 56 class FrameLoader; |
55 class ImageLoader; | 57 class ImageLoader; |
56 class KURL; | 58 class KURL; |
57 | 59 |
58 // The CachedResourceLoader provides a per-context interface to the MemoryCache | 60 // The CachedResourceLoader provides a per-context interface to the MemoryCache |
59 // and enforces a bunch of security checks and rules for resource revalidation. | 61 // and enforces a bunch of security checks and rules for resource revalidation. |
60 // Its lifetime is roughly per-DocumentLoader, in that it is generally created | 62 // Its lifetime is roughly per-DocumentLoader, in that it is generally created |
61 // in the DocumentLoader constructor and loses its ability to generate network | 63 // in the DocumentLoader constructor and loses its ability to generate network |
62 // requests when the DocumentLoader is destroyed. Documents also hold a | 64 // requests when the DocumentLoader is destroyed. Documents also hold a |
63 // RefPtr<CachedResourceLoader> for their lifetime (and will create one if they | 65 // RefPtr<CachedResourceLoader> for their lifetime (and will create one if they |
64 // are initialized without a Frame), so a Document can keep a CachedResourceLoad
er | 66 // are initialized without a Frame), so a Document can keep a CachedResourceLoad
er |
65 // alive past detach if scripts still reference the Document. | 67 // alive past detach if scripts still reference the Document. |
66 class CachedResourceLoader : public RefCounted<CachedResourceLoader> { | 68 class CachedResourceLoader : public RefCounted<CachedResourceLoader>, public Res
ourceLoaderHost { |
67 WTF_MAKE_NONCOPYABLE(CachedResourceLoader); WTF_MAKE_FAST_ALLOCATED; | 69 WTF_MAKE_NONCOPYABLE(CachedResourceLoader); WTF_MAKE_FAST_ALLOCATED; |
68 friend class ImageLoader; | 70 friend class ImageLoader; |
69 friend class ResourceCacheValidationSuppressor; | 71 friend class ResourceCacheValidationSuppressor; |
70 | 72 |
71 public: | 73 public: |
72 static PassRefPtr<CachedResourceLoader> create(DocumentLoader* documentLoade
r) { return adoptRef(new CachedResourceLoader(documentLoader)); } | 74 static PassRefPtr<CachedResourceLoader> create(DocumentLoader* documentLoade
r) { return adoptRef(new CachedResourceLoader(documentLoader)); } |
73 ~CachedResourceLoader(); | 75 virtual ~CachedResourceLoader(); |
| 76 |
| 77 using RefCounted<CachedResourceLoader>::ref; |
| 78 using RefCounted<CachedResourceLoader>::deref; |
74 | 79 |
75 CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest&); | 80 CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest&); |
76 CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourc
eRequest&); | 81 CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourc
eRequest&); |
77 CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedRes
ourceRequest&); | 82 CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedRes
ourceRequest&); |
78 CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest&); | 83 CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest&); |
79 CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&); | 84 CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&); |
80 CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceReq
uest&); | 85 CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceReq
uest&); |
81 CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRe
quest&); | 86 CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRe
quest&); |
82 CachedResourceHandle<CachedDocument> requestSVGDocument(CachedResourceReques
t&); | 87 CachedResourceHandle<CachedDocument> requestSVGDocument(CachedResourceReques
t&); |
83 CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourc
eRequest&); | 88 CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourc
eRequest&); |
(...skipping 19 matching lines...) Expand all Loading... |
103 | 108 |
104 CachePolicy cachePolicy(CachedResource::Type) const; | 109 CachePolicy cachePolicy(CachedResource::Type) const; |
105 | 110 |
106 Frame* frame() const; // Can be null | 111 Frame* frame() const; // Can be null |
107 Document* document() const { return m_document; } // Can be null | 112 Document* document() const { return m_document; } // Can be null |
108 void setDocument(Document* document) { m_document = document; } | 113 void setDocument(Document* document) { m_document = document; } |
109 | 114 |
110 DocumentLoader* documentLoader() const { return m_documentLoader; } | 115 DocumentLoader* documentLoader() const { return m_documentLoader; } |
111 void clearDocumentLoader() { m_documentLoader = 0; } | 116 void clearDocumentLoader() { m_documentLoader = 0; } |
112 | 117 |
113 void loadDone(CachedResource*); | |
114 void garbageCollectDocumentResources(); | 118 void garbageCollectDocumentResources(); |
115 | 119 |
116 void incrementRequestCount(const CachedResource*); | |
117 void decrementRequestCount(const CachedResource*); | |
118 int requestCount() const { return m_requestCount; } | 120 int requestCount() const { return m_requestCount; } |
119 | 121 |
120 bool isPreloaded(const String& urlString) const; | 122 bool isPreloaded(const String& urlString) const; |
121 void clearPreloads(); | 123 void clearPreloads(); |
122 void clearPendingPreloads(); | 124 void clearPendingPreloads(); |
123 void preload(CachedResource::Type, CachedResourceRequest&, const String& cha
rset); | 125 void preload(CachedResource::Type, CachedResourceRequest&, const String& cha
rset); |
124 void checkForPendingPreloads(); | 126 void checkForPendingPreloads(); |
125 void printPreloadStats(); | 127 void printPreloadStats(); |
126 bool canRequest(CachedResource::Type, const KURL&, const ResourceLoaderOptio
ns&, bool forPreload = false); | 128 bool canRequest(CachedResource::Type, const KURL&, const ResourceLoaderOptio
ns&, bool forPreload = false); |
127 bool canAccess(CachedResource*); | 129 bool canAccess(CachedResource*); |
128 | 130 |
| 131 // ResourceLoaderHost |
| 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 |
129 static const ResourceLoaderOptions& defaultCachedResourceOptions(); | 152 static const ResourceLoaderOptions& defaultCachedResourceOptions(); |
| 153 private: |
130 | 154 |
131 private: | |
132 explicit CachedResourceLoader(DocumentLoader*); | 155 explicit CachedResourceLoader(DocumentLoader*); |
133 | 156 |
| 157 FrameLoader* frameLoader(); |
| 158 |
134 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, C
achedResourceRequest&); | 159 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, C
achedResourceRequest&); |
135 CachedResourceHandle<CachedResource> revalidateResource(const CachedResource
Request&, CachedResource*); | 160 CachedResourceHandle<CachedResource> revalidateResource(const CachedResource
Request&, CachedResource*); |
136 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, Cach
edResourceRequest&, const String& charset); | 161 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, Cach
edResourceRequest&, const String& charset); |
137 void preCacheDataURIImage(const CachedResourceRequest&); | 162 void preCacheDataURIImage(const CachedResourceRequest&); |
138 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<Cach
edResource>&, const CachedResourceRequest&); | 163 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<Cach
edResource>&, const CachedResourceRequest&); |
139 void requestPreload(CachedResource::Type, CachedResourceRequest&, const Stri
ng& charset); | 164 void requestPreload(CachedResource::Type, CachedResourceRequest&, const Stri
ng& charset); |
140 | 165 |
141 enum RevalidationPolicy { Use, Revalidate, Reload, Load }; | 166 enum RevalidationPolicy { Use, Revalidate, Reload, Load }; |
142 RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, Resourc
eRequest&, bool forPreload, CachedResource* existingResource, CachedResourceRequ
est::DeferOption) const; | 167 RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, Resourc
eRequest&, bool forPreload, CachedResource* existingResource, CachedResourceRequ
est::DeferOption) const; |
143 | 168 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 m_loader->m_allowStaleResources = m_previousState; | 223 m_loader->m_allowStaleResources = m_previousState; |
199 } | 224 } |
200 private: | 225 private: |
201 CachedResourceLoader* m_loader; | 226 CachedResourceLoader* m_loader; |
202 bool m_previousState; | 227 bool m_previousState; |
203 }; | 228 }; |
204 | 229 |
205 } // namespace WebCore | 230 } // namespace WebCore |
206 | 231 |
207 #endif | 232 #endif |
OLD | NEW |