summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h')
-rw-r--r--chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h103
1 files changed, 60 insertions, 43 deletions
diff --git a/chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h b/chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
index bb1995ed325..95a15426939 100644
--- a/chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
+++ b/chromium/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
@@ -49,41 +49,40 @@ class FontResource;
class ImageResource;
class RawResource;
class ScriptResource;
-class ShaderResource;
+class SubstituteData;
class XSLStyleSheetResource;
class Document;
class DocumentLoader;
-class Frame;
+class LocalFrame;
class FrameLoader;
class ImageLoader;
class KURL;
class ResourceTimingInfo;
class ResourceLoaderSet;
-enum CORSEnabled {
- NotCORSEnabled,
- PotentiallyCORSEnabled // Indicates "potentially CORS-enabled fetch" in HTML standard.
-};
-
// The ResourceFetcher provides a per-context interface to the MemoryCache
// and enforces a bunch of security checks and rules for resource revalidation.
// Its lifetime is roughly per-DocumentLoader, in that it is generally created
// in the DocumentLoader constructor and loses its ability to generate network
// requests when the DocumentLoader is destroyed. Documents also hold a
// RefPtr<ResourceFetcher> for their lifetime (and will create one if they
-// are initialized without a Frame), so a Document can keep a ResourceFetcher
+// are initialized without a LocalFrame), so a Document can keep a ResourceFetcher
// alive past detach if scripts still reference the Document.
-class ResourceFetcher : public RefCounted<ResourceFetcher>, public ResourceLoaderHost {
- WTF_MAKE_NONCOPYABLE(ResourceFetcher); WTF_MAKE_FAST_ALLOCATED;
+class ResourceFetcher FINAL : public RefCountedWillBeGarbageCollectedFinalized<ResourceFetcher>, public ResourceLoaderHost {
+ WTF_MAKE_NONCOPYABLE(ResourceFetcher); WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ResourceFetcher);
friend class ImageLoader;
friend class ResourceCacheValidationSuppressor;
public:
- static PassRefPtr<ResourceFetcher> create(DocumentLoader* documentLoader) { return adoptRef(new ResourceFetcher(documentLoader)); }
+ static PassRefPtrWillBeRawPtr<ResourceFetcher> create(DocumentLoader* documentLoader) { return adoptRefWillBeNoop(new ResourceFetcher(documentLoader)); }
virtual ~ResourceFetcher();
+ virtual void trace(Visitor*);
+#if !ENABLE(OILPAN)
using RefCounted<ResourceFetcher>::ref;
using RefCounted<ResourceFetcher>::deref;
+#endif
ResourcePtr<Resource> fetchSynchronously(FetchRequest&);
ResourcePtr<ImageResource> fetchImage(FetchRequest&);
@@ -92,17 +91,17 @@ public:
ResourcePtr<ScriptResource> fetchScript(FetchRequest&);
ResourcePtr<FontResource> fetchFont(FetchRequest&);
ResourcePtr<RawResource> fetchRawResource(FetchRequest&);
- ResourcePtr<RawResource> fetchMainResource(FetchRequest&);
+ ResourcePtr<RawResource> fetchMainResource(FetchRequest&, const SubstituteData&);
ResourcePtr<DocumentResource> fetchSVGDocument(FetchRequest&);
ResourcePtr<XSLStyleSheetResource> fetchXSLStyleSheet(FetchRequest&);
ResourcePtr<Resource> fetchLinkResource(Resource::Type, FetchRequest&);
- ResourcePtr<ShaderResource> fetchShader(FetchRequest&);
ResourcePtr<RawResource> fetchImport(FetchRequest&);
+ ResourcePtr<RawResource> fetchMedia(FetchRequest&);
+ ResourcePtr<RawResource> fetchTextTrack(FetchRequest&);
// Logs an access denied message to the console for the specified URL.
void printAccessDeniedMessage(const KURL&) const;
- Resource* cachedResource(const String& url) const;
Resource* cachedResource(const KURL&) const;
typedef HashMap<String, ResourcePtr<Resource> > DocumentResourceMap;
@@ -115,10 +114,10 @@ public:
bool shouldDeferImageLoad(const KURL&) const;
- Frame* frame() const; // Can be null
+ LocalFrame* frame() const; // Can be null
FetchContext& context() const;
Document* document() const { return m_document; } // Can be null
- void setDocument(Document* document) { m_document = document; }
+ void setDocument(RawPtr<Document> document) { m_document = document; }
DocumentLoader* documentLoader() const { return m_documentLoader; }
void clearDocumentLoader() { m_documentLoader = 0; }
@@ -129,11 +128,8 @@ public:
bool isPreloaded(const String& urlString) const;
void clearPreloads();
- void clearPendingPreloads();
void preload(Resource::Type, FetchRequest&, const String& charset);
- void checkForPendingPreloads();
void printPreloadStats();
- bool canAccess(Resource*, CORSEnabled, FetchRequest::OriginRestriction = FetchRequest::UseDefaultOriginRestrictionForType);
void setDefersLoading(bool);
void stopFetching();
@@ -144,45 +140,55 @@ public:
virtual void decrementRequestCount(const Resource*) OVERRIDE;
virtual void didLoadResource(Resource*) OVERRIDE;
virtual void redirectReceived(Resource*, const ResourceResponse&) OVERRIDE;
- virtual void didFinishLoading(const Resource*, double finishTime, const ResourceLoaderOptions&) OVERRIDE;
- virtual void didChangeLoadingPriority(const Resource*, ResourceLoadPriority) OVERRIDE;
- virtual void didFailLoading(const Resource*, const ResourceError&, const ResourceLoaderOptions&) OVERRIDE;
- virtual void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse, const ResourceLoaderOptions&) OVERRIDE;
- virtual void didReceiveResponse(const Resource*, const ResourceResponse&, const ResourceLoaderOptions&) OVERRIDE;
- virtual void didReceiveData(const Resource*, const char* data, int dataLength, int encodedDataLength, const ResourceLoaderOptions&) OVERRIDE;
- virtual void didDownloadData(const Resource*, int dataLength, int encodedDataLength, const ResourceLoaderOptions&) OVERRIDE;
+ virtual void didFinishLoading(const Resource*, double finishTime, int64_t encodedDataLength) OVERRIDE;
+ virtual void didChangeLoadingPriority(const Resource*, ResourceLoadPriority, int intraPriorityValue) OVERRIDE;
+ virtual void didFailLoading(const Resource*, const ResourceError&) OVERRIDE;
+ virtual void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse, const FetchInitiatorInfo&) OVERRIDE;
+ virtual void didReceiveResponse(const Resource*, const ResourceResponse&) OVERRIDE;
+ virtual void didReceiveData(const Resource*, const char* data, int dataLength, int encodedDataLength) OVERRIDE;
+ virtual void didDownloadData(const Resource*, int dataLength, int encodedDataLength) OVERRIDE;
virtual void subresourceLoaderFinishedLoadingOnePart(ResourceLoader*) OVERRIDE;
virtual void didInitializeResourceLoader(ResourceLoader*) OVERRIDE;
virtual void willTerminateResourceLoader(ResourceLoader*) OVERRIDE;
- virtual void willStartLoadingResource(ResourceRequest&) OVERRIDE;
+ virtual void willStartLoadingResource(Resource*, ResourceRequest&) OVERRIDE;
virtual bool defersLoading() const OVERRIDE;
virtual bool isLoadedBy(ResourceLoaderHost*) const OVERRIDE;
- virtual bool shouldRequest(Resource*, const ResourceRequest&, const ResourceLoaderOptions&) OVERRIDE;
+ virtual bool canAccessRedirect(Resource*, ResourceRequest&, const ResourceResponse&, ResourceLoaderOptions&) OVERRIDE;
+ virtual bool canAccessResource(Resource*, SecurityOrigin*, const KURL&) const OVERRIDE;
+
+#if !ENABLE(OILPAN)
virtual void refResourceLoaderHost() OVERRIDE;
virtual void derefResourceLoaderHost() OVERRIDE;
+#endif
+ enum ResourceLoadStartType {
+ ResourceLoadingFromNetwork,
+ ResourceLoadingFromCache
+ };
+ void requestLoadStarted(Resource*, const FetchRequest&, ResourceLoadStartType);
static const ResourceLoaderOptions& defaultResourceOptions();
private:
explicit ResourceFetcher(DocumentLoader*);
- bool shouldLoadNewResource() const;
+ bool shouldLoadNewResource(Resource::Type) const;
ResourcePtr<Resource> requestResource(Resource::Type, FetchRequest&);
- ResourcePtr<Resource> revalidateResource(const FetchRequest&, Resource*);
- ResourcePtr<Resource> loadResource(Resource::Type, FetchRequest&, const String& charset);
+ ResourcePtr<Resource> createResourceForRevalidation(const FetchRequest&, Resource*);
+ ResourcePtr<Resource> createResourceForLoading(Resource::Type, FetchRequest&, const String& charset);
void preCacheDataURIImage(const FetchRequest&);
- void storeResourceTimingInitiatorInformation(const ResourcePtr<Resource>&, const FetchRequest&);
+ void preCacheSubstituteDataForMainResource(const FetchRequest&, const SubstituteData&);
+ void storeResourceTimingInitiatorInformation(Resource*);
void requestPreload(Resource::Type, FetchRequest&, const String& charset);
enum RevalidationPolicy { Use, Revalidate, Reload, Load };
- RevalidationPolicy determineRevalidationPolicy(Resource::Type, ResourceRequest&, bool forPreload, Resource* existingResource, FetchRequest::DeferOption) const;
+ RevalidationPolicy determineRevalidationPolicy(Resource::Type, ResourceRequest&, bool forPreload, Resource* existingResource, FetchRequest::DeferOption, const ResourceLoaderOptions&) const;
void determineTargetType(ResourceRequest&, Resource::Type);
ResourceRequestCachePolicy resourceRequestCachePolicy(const ResourceRequest&, Resource::Type);
void addAdditionalRequestHeaders(ResourceRequest&, Resource::Type);
- bool canRequest(Resource::Type, const KURL&, const ResourceLoaderOptions&, bool forPreload, FetchRequest::OriginRestriction);
+ bool canRequest(Resource::Type, const KURL&, const ResourceLoaderOptions&, bool forPreload, FetchRequest::OriginRestriction) const;
bool checkInsecureContent(Resource::Type, const KURL&, MixedContentBlockingTreatment) const;
static bool resourceNeedsLoad(Resource*, const FetchRequest&, RevalidationPolicy);
@@ -190,28 +196,24 @@ private:
void notifyLoadedFromMemoryCache(Resource*);
void garbageCollectDocumentResourcesTimerFired(Timer<ResourceFetcher>*);
+ void scheduleDocumentResourcesGC();
void resourceTimingReportTimerFired(Timer<ResourceFetcher>*);
- void performPostLoadActions();
-
bool clientDefersImage(const KURL&) const;
void reloadImagesIfNotDeferred();
HashSet<String> m_validatedURLs;
mutable DocumentResourceMap m_documentResources;
- Document* m_document;
+ // FIXME: Oilpan: Ideally this should just be a traced Member but that will
+ // currently leak because RenderStyle and its data are not on the heap.
+ // See crbug.com/383860 for details.
+ RawPtrWillBeWeakMember<Document> m_document;
DocumentLoader* m_documentLoader;
int m_requestCount;
OwnPtr<ListHashSet<Resource*> > m_preloads;
- struct PendingPreload {
- Resource::Type m_type;
- FetchRequest m_request;
- String m_charset;
- };
- Deque<PendingPreload> m_pendingPreloads;
Timer<ResourceFetcher> m_garbageCollectDocumentResourcesTimer;
Timer<ResourceFetcher> m_resourceTimingReportTimer;
@@ -224,6 +226,21 @@ private:
OwnPtr<ResourceLoaderSet> m_loaders;
OwnPtr<ResourceLoaderSet> m_multipartLoaders;
+ // Used in hit rate histograms.
+ class DeadResourceStatsRecorder {
+ public:
+ DeadResourceStatsRecorder();
+ ~DeadResourceStatsRecorder();
+
+ void update(RevalidationPolicy);
+
+ private:
+ int m_useCount;
+ int m_revalidateCount;
+ int m_loadCount;
+ };
+ DeadResourceStatsRecorder m_deadStatsRecorder;
+
// 29 bits left
bool m_autoLoadImages : 1;
bool m_imagesEnabled : 1;