15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 2001 Dirk Mueller <mueller@kde.org> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) This library is free software; you can redistribute it and/or 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) modify it under the terms of the GNU Library General Public 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) License as published by the Free Software Foundation; either 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) version 2 of the License, or (at your option) any later version. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) This library is distributed in the hope that it will be useful, 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) but WITHOUT ANY WARRANTY; without even the implied warranty of 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Library General Public License for more details. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) You should have received a copy of the GNU Library General Public License 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) along with this library; see the file COPYING.LIB. If not, write to 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Boston, MA 02110-1301, USA. 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) This class provides all functionality needed for loading images, style sheets and html 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pages from the web. It has a memory cache for these objects. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 263464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch#ifndef ResourceFetcher_h 273464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch#define ResourceFetcher_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "core/loader/ResourceLoaderHost.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/cache/CachePolicy.h" 31fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#include "core/loader/cache/FetchInitiatorInfo.h" 323464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch#include "core/loader/cache/FetchRequest.h" 33fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#include "core/loader/cache/Resource.h" 34fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#include "core/loader/cache/ResourcePtr.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Timer.h" 36591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Deque.h" 37591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/HashMap.h" 38591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/HashSet.h" 39591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/ListHashSet.h" 40591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringHash.h" 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass CSSStyleSheetResource; 45e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass DocumentResource; 46e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass FontResource; 47e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass ImageResource; 48e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass RawResource; 49e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass ScriptResource; 50e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass ShaderResource; 51e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass TextTrackResource; 52e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass XSLStyleSheetResource; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentLoader; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Frame; 567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdochclass FrameLoader; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageLoader; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class KURL; 5983750176c3ee2cea66c8a9751271026a5901be3aBen Murdochclass ResourceTimingInfo; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 613464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch// The ResourceFetcher provides a per-context interface to the MemoryCache 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// and enforces a bunch of security checks and rules for resource revalidation. 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Its lifetime is roughly per-DocumentLoader, in that it is generally created 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// in the DocumentLoader constructor and loses its ability to generate network 653464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch// requests when the DocumentLoader is destroyed. Documents also hold a 663464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch// RefPtr<ResourceFetcher> for their lifetime (and will create one if they 673464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch// are initialized without a Frame), so a Document can keep a ResourceFetcher 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// alive past detach if scripts still reference the Document. 693464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdochclass ResourceFetcher : public RefCounted<ResourceFetcher>, public ResourceLoaderHost { 703464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch WTF_MAKE_NONCOPYABLE(ResourceFetcher); WTF_MAKE_FAST_ALLOCATED; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)friend class ImageLoader; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)friend class ResourceCacheValidationSuppressor; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 753464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch static PassRefPtr<ResourceFetcher> create(DocumentLoader* documentLoader) { return adoptRef(new ResourceFetcher(documentLoader)); } 763464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch virtual ~ResourceFetcher(); 773464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 783464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch using RefCounted<ResourceFetcher>::ref; 793464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch using RefCounted<ResourceFetcher>::deref; 803464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 81e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<ImageResource> requestImage(FetchRequest&); 82e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<CSSStyleSheetResource> requestCSSStyleSheet(FetchRequest&); 83e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<CSSStyleSheetResource> requestUserCSSStyleSheet(FetchRequest&); 84e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<ScriptResource> requestScript(FetchRequest&); 85e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<FontResource> requestFont(FetchRequest&); 86e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<RawResource> requestRawResource(FetchRequest&); 87e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<RawResource> requestMainResource(FetchRequest&); 88e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<DocumentResource> requestSVGDocument(FetchRequest&); 89e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<XSLStyleSheetResource> requestXSLStyleSheet(FetchRequest&); 90fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch ResourcePtr<Resource> requestLinkResource(Resource::Type, FetchRequest&); 91e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<TextTrackResource> requestTextTrack(FetchRequest&); 92e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<ShaderResource> requestShader(FetchRequest&); 93e6d4491e48613634a83c1957c72759da80987961Ben Murdoch ResourcePtr<RawResource> requestImport(FetchRequest&); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Logs an access denied message to the console for the specified URL. 963464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch void printAccessDeniedMessage(const KURL&) const; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch Resource* cachedResource(const String& url) const; 99fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch Resource* cachedResource(const KURL&) const; 1003464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 101fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch typedef HashMap<String, ResourcePtr<Resource> > DocumentResourceMap; 102fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch const DocumentResourceMap& allResources() const { return m_documentResources; } 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool autoLoadImages() const { return m_autoLoadImages; } 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setAutoLoadImages(bool); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setImagesEnabled(bool); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldDeferImageLoad(const KURL&) const; 1103464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 111fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch CachePolicy cachePolicy(Resource::Type) const; 1123464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* frame() const; // Can be null 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* document() const { return m_document; } // Can be null 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setDocument(Document* document) { m_document = document; } 11693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) DocumentLoader* documentLoader() const { return m_documentLoader; } 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearDocumentLoader() { m_documentLoader = 0; } 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void garbageCollectDocumentResources(); 1213464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int requestCount() const { return m_requestCount; } 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isPreloaded(const String& urlString) const; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearPreloads(); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearPendingPreloads(); 127fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void preload(Resource::Type, FetchRequest&, const String& charset); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkForPendingPreloads(); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void printPreloadStats(); 130fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch bool canRequest(Resource::Type, const KURL&, const ResourceLoaderOptions&, bool forPreload = false); 131fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch bool canAccess(Resource*); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1337757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // ResourceLoaderHost 134fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void incrementRequestCount(const Resource*) OVERRIDE; 135fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void decrementRequestCount(const Resource*) OVERRIDE; 136fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void didLoadResource(Resource*) OVERRIDE; 137fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void redirectReceived(Resource*, const ResourceResponse&) OVERRIDE; 138fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void didFinishLoading(const Resource*, double finishTime, const ResourceLoaderOptions&) OVERRIDE; 139fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void didChangeLoadingPriority(const Resource*, ResourceLoadPriority) OVERRIDE; 140fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void didFailLoading(const Resource*, const ResourceError&, const ResourceLoaderOptions&) OVERRIDE; 141fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void willSendRequest(const Resource*, ResourceRequest&, const ResourceResponse& redirectResponse, const ResourceLoaderOptions&) OVERRIDE; 142fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void didReceiveResponse(const Resource*, const ResourceResponse&, const ResourceLoaderOptions&) OVERRIDE; 143fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void didReceiveData(const Resource*, const char* data, int dataLength, int encodedDataLength, const ResourceLoaderOptions&) OVERRIDE; 1447757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void subresourceLoaderFinishedLoadingOnePart(ResourceLoader*) OVERRIDE; 1457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void didInitializeResourceLoader(ResourceLoader*) OVERRIDE; 1467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void willTerminateResourceLoader(ResourceLoader*) OVERRIDE; 1477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void willStartLoadingResource(ResourceRequest&) OVERRIDE; 1487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual bool defersLoading() const OVERRIDE; 1497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual bool isLoadedBy(ResourceLoaderHost*) const OVERRIDE; 150fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual bool shouldRequest(Resource*, const ResourceRequest&, const ResourceLoaderOptions&) OVERRIDE; 1517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void refResourceLoaderHost() OVERRIDE; 1527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void derefResourceLoaderHost() OVERRIDE; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 154fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch static const ResourceLoaderOptions& defaultResourceOptions(); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1573464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch explicit ResourceFetcher(DocumentLoader*); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1597757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch FrameLoader* frameLoader(); 16002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch bool shouldLoadNewResource() const; 1617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 162fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch ResourcePtr<Resource> requestResource(Resource::Type, FetchRequest&); 163fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch ResourcePtr<Resource> revalidateResource(const FetchRequest&, Resource*); 164fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch ResourcePtr<Resource> loadResource(Resource::Type, FetchRequest&, const String& charset); 1653464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch void preCacheDataURIImage(const FetchRequest&); 166fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void storeResourceTimingInitiatorInformation(const ResourcePtr<Resource>&, const FetchRequest&); 167fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void requestPreload(Resource::Type, FetchRequest&, const String& charset); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum RevalidationPolicy { Use, Revalidate, Reload, Load }; 170fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch RevalidationPolicy determineRevalidationPolicy(Resource::Type, ResourceRequest&, bool forPreload, Resource* existingResource, FetchRequest::DeferOption) const; 17153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 172fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void determineTargetType(ResourceRequest&, Resource::Type); 173fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch ResourceRequestCachePolicy resourceRequestCachePolicy(const ResourceRequest&, Resource::Type); 174fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void addAdditionalRequestHeaders(ResourceRequest&, Resource::Type); 17553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 176fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void notifyLoadedFromMemoryCache(Resource*); 177fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch bool checkInsecureContent(Resource::Type, const KURL&) const; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1793464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch void garbageCollectDocumentResourcesTimerFired(Timer<ResourceFetcher>*); 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void performPostLoadActions(); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool clientDefersImage(const KURL&) const; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void reloadImagesIfNotDeferred(); 1843464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HashSet<String> m_validatedURLs; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable DocumentResourceMap m_documentResources; 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* m_document; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* m_documentLoader; 1893464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int m_requestCount; 1913464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch 192fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch OwnPtr<ListHashSet<Resource*> > m_preloads; 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) struct PendingPreload { 194fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch Resource::Type m_type; 1953464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch FetchRequest m_request; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_charset; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Deque<PendingPreload> m_pendingPreloads; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2003464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch Timer<ResourceFetcher> m_garbageCollectDocumentResourcesTimer; 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 202fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch typedef HashMap<Resource*, RefPtr<ResourceTimingInfo> > ResourceTimingInfoMap; 20383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch ResourceTimingInfoMap m_resourceTimingInfoMap; 204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 29 bits left 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_autoLoadImages : 1; 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_imagesEnabled : 1; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_allowStaleResources : 1; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ResourceCacheValidationSuppressor { 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(ResourceCacheValidationSuppressor); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 2153464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch ResourceCacheValidationSuppressor(ResourceFetcher* loader) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_loader(loader) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_previousState(false) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_loader) { 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_previousState = m_loader->m_allowStaleResources; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_loader->m_allowStaleResources = true; 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~ResourceCacheValidationSuppressor() 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_loader) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_loader->m_allowStaleResources = m_previousState; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2303464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch ResourceFetcher* m_loader; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_previousState; 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 237