Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: Source/core/loader/cache/CachedResourceLoader.h

Issue 19574002: Refactoring: Introduce ResouceLoaderHost interface for unloading ResourceLoader. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Another attempt Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « Source/core/loader/cache/CachedResource.cpp ('k') | Source/core/loader/cache/CachedResourceLoader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698