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 |