Changeset 206016 in webkit
- Timestamp:
- Sep 16, 2016 1:56:54 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 48 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r206014 r206016 1 2016-09-16 Youenn Fablet <youenn@apple.com> 2 3 CachedResource should efficiently construct its ResourceRequest 4 https://bugs.webkit.org/show_bug.cgi?id=161609 5 6 Reviewed by Sam Weinig. 7 8 Covered by existing tests. 9 10 Making CachedResourceLoader take a CachedResourceRequest&& when being asked to load resources. 11 Making CachedResource et al take a CachedResourceRequest&& as constructor parameter. 12 13 CachedResource now sets its options at construction time instead of load time. 14 This may change some specific behaviors, for instance when loading manually images. 15 16 Made some refactoring when both the resource and request are needed, for ResourceTimingInformation. 17 Made local copies of some CachedResourceRequest fields so that we do not need it after being WTFMoved. 18 Some of these properties may be put outside CachedResourceRequest in a later refactoring step. 19 20 * css/CSSFontFaceSrcValue.cpp: 21 (WebCore::CSSFontFaceSrcValue::cachedFont): 22 * css/CSSImageSetValue.cpp: 23 (WebCore::CSSImageSetValue::loadBestFitImage): 24 * css/CSSImageValue.cpp: 25 (WebCore::CSSImageValue::loadImage): 26 * css/StyleRuleImport.cpp: 27 (WebCore::StyleRuleImport::requestStyleSheet): 28 * dom/ProcessingInstruction.cpp: 29 (WebCore::ProcessingInstruction::checkStyleSheet): 30 * dom/ScriptElement.cpp: 31 (WebCore::ScriptElement::requestScriptWithCache): 32 * html/HTMLLinkElement.cpp: 33 (WebCore::HTMLLinkElement::process): 34 * html/parser/HTMLResourcePreloader.cpp: 35 (WebCore::HTMLResourcePreloader::preload): 36 * loader/CrossOriginPreflightChecker.cpp: 37 (WebCore::CrossOriginPreflightChecker::startPreflight): 38 * loader/DocumentLoader.cpp: 39 (WebCore::DocumentLoader::startLoadingMainResource): 40 * loader/DocumentThreadableLoader.cpp: 41 (WebCore::DocumentThreadableLoader::loadRequest): 42 * loader/ImageLoader.cpp: 43 (WebCore::ImageLoader::updateFromElement): 44 * loader/LinkLoader.cpp: 45 (WebCore::LinkLoader::preloadIfNeeded): 46 (WebCore::LinkLoader::loadLink): 47 * loader/MediaResourceLoader.cpp: 48 (WebCore::MediaResourceLoader::requestResource): 49 * loader/ResourceTimingInformation.cpp: 50 (WebCore::ResourceTimingInformation::storeResourceTimingInitiatorInformation): 51 * loader/ResourceTimingInformation.h: 52 * loader/TextTrackLoader.cpp: 53 (WebCore::TextTrackLoader::load): 54 * loader/cache/CachedCSSStyleSheet.cpp: 55 (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): 56 * loader/cache/CachedCSSStyleSheet.h: 57 * loader/cache/CachedFont.cpp: 58 (WebCore::CachedFont::CachedFont): 59 (WebCore::CachedFont::load): 60 (WebCore::CachedFont::beginLoadIfNeeded): 61 * loader/cache/CachedFont.h: 62 * loader/cache/CachedImage.cpp: 63 (WebCore::CachedImage::CachedImage): 64 (WebCore::CachedImage::load): 65 * loader/cache/CachedImage.h: 66 * loader/cache/CachedRawResource.cpp: 67 (WebCore::CachedRawResource::CachedRawResource): 68 * loader/cache/CachedRawResource.h: 69 * loader/cache/CachedResource.cpp: 70 (WebCore::CachedResource::CachedResource): 71 (WebCore::CachedResource::load): 72 (WebCore::CachedResource::loadFrom): 73 * loader/cache/CachedResource.h: 74 (WebCore::CachedResource::resourceRequest): 75 * loader/cache/CachedResourceLoader.cpp: 76 (WebCore::createResource): 77 (WebCore::CachedResourceLoader::requestImage): 78 (WebCore::CachedResourceLoader::requestFont): 79 (WebCore::CachedResourceLoader::requestTextTrack): 80 (WebCore::CachedResourceLoader::requestCSSStyleSheet): 81 (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): 82 (WebCore::CachedResourceLoader::requestScript): 83 (WebCore::CachedResourceLoader::requestXSLStyleSheet): 84 (WebCore::CachedResourceLoader::requestSVGDocument): 85 (WebCore::CachedResourceLoader::requestLinkResource): 86 (WebCore::CachedResourceLoader::requestMedia): 87 (WebCore::CachedResourceLoader::requestRawResource): 88 (WebCore::CachedResourceLoader::requestMainResource): 89 (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest): 90 (WebCore::CachedResourceLoader::updateCachedResourceWithCurrentRequest): 91 (WebCore::CachedResourceLoader::requestResource): 92 (WebCore::CachedResourceLoader::revalidateResource): 93 (WebCore::CachedResourceLoader::loadResource): 94 (WebCore::CachedResourceLoader::reloadImagesIfNotDeferred): 95 (WebCore::CachedResourceLoader::preload): 96 (WebCore::CachedResourceLoader::checkForPendingPreloads): 97 (WebCore::CachedResourceLoader::requestPreload): 98 * loader/cache/CachedResourceLoader.h: 99 * loader/cache/CachedSVGDocument.cpp: 100 (WebCore::CachedSVGDocument::CachedSVGDocument): 101 * loader/cache/CachedSVGDocument.h: 102 * loader/cache/CachedSVGDocumentReference.cpp: 103 (WebCore::CachedSVGDocumentReference::load): 104 * loader/cache/CachedSVGFont.cpp: 105 (WebCore::CachedSVGFont::CachedSVGFont): 106 * loader/cache/CachedSVGFont.h: 107 * loader/cache/CachedScript.cpp: 108 (WebCore::CachedScript::CachedScript): 109 * loader/cache/CachedScript.h: 110 * loader/cache/CachedTextTrack.cpp: 111 (WebCore::CachedTextTrack::CachedTextTrack): 112 * loader/cache/CachedTextTrack.h: 113 * loader/cache/CachedXSLStyleSheet.cpp: 114 (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet): 115 (WebCore::CachedXSLStyleSheet::didAddClient): 116 * loader/cache/CachedXSLStyleSheet.h: 117 * loader/icon/IconLoader.cpp: 118 (WebCore::IconLoader::startLoading): 119 * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp: 120 (WebCore::WebCoreAVCFResourceLoader::startLoading): 121 * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm: 122 (WebCore::WebCoreAVFResourceLoader::startLoading): 123 * svg/SVGFEImageElement.cpp: 124 (WebCore::SVGFEImageElement::requestImageResource): 125 * svg/SVGFontFaceUriElement.cpp: 126 (WebCore::SVGFontFaceUriElement::loadFont): 127 * svg/SVGUseElement.cpp: 128 (WebCore::SVGUseElement::updateExternalDocument): 129 * xml/XSLImportRule.cpp: 130 (WebCore::XSLImportRule::loadSheet): 131 1 132 2016-09-16 Youenn Fablet <youenn@apple.com> 2 133 -
trunk/Source/WebCore/css/CSSFontFaceSrcValue.cpp
r204014 r206016 109 109 CachedResourceRequest request(ResourceRequest(document->completeURL(m_resource)), options); 110 110 request.setInitiator(cachedResourceRequestInitiators().css); 111 m_cachedFont = document->cachedResourceLoader().requestFont( request, isSVG);111 m_cachedFont = document->cachedResourceLoader().requestFont(WTFMove(request), isSVG); 112 112 return m_cachedFont.get(); 113 113 } -
trunk/Source/WebCore/css/CSSImageSetValue.cpp
r205419 r206016 92 92 Document* document = loader.document(); 93 93 updateDeviceScaleFactor(*document); 94 94 95 95 if (!m_accessedBestFitImage) { 96 96 m_accessedBestFitImage = true; … … 106 106 updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials); 107 107 } 108 m_cachedImage = loader.requestImage( request);108 m_cachedImage = loader.requestImage(WTFMove(request)); 109 109 m_bestFitImageScaleFactor = image.scaleFactor; 110 110 } -
trunk/Source/WebCore/css/CSSImageValue.cpp
r205419 r206016 76 76 updateRequestForAccessControl(request.mutableResourceRequest(), *loader.document()->securityOrigin(), options.allowCredentials); 77 77 } 78 m_cachedImage = loader.requestImage( request);78 m_cachedImage = loader.requestImage(WTFMove(request)); 79 79 } 80 80 return m_cachedImage.get(); -
trunk/Source/WebCore/css/StyleRuleImport.cpp
r205660 r206016 120 120 if (m_cachedSheet) 121 121 m_cachedSheet->removeClient(&m_styleSheetClient); 122 if (m_parentStyleSheet->isUserStyleSheet()) 123 m_cachedSheet = document->cachedResourceLoader().requestUserCSSStyleSheet(request); 124 else 125 m_cachedSheet = document->cachedResourceLoader().requestCSSStyleSheet(request); 122 if (m_parentStyleSheet->isUserStyleSheet()) { 123 request.setOptions(ResourceLoaderOptions(DoNotSendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, SkipSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::SkipPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::AllowCaching)); 124 m_cachedSheet = document->cachedResourceLoader().requestUserCSSStyleSheet(WTFMove(request)); 125 } else 126 m_cachedSheet = document->cachedResourceLoader().requestCSSStyleSheet(WTFMove(request)); 126 127 if (m_cachedSheet) { 127 128 // if the import rule is issued dynamically, the sheet may be -
trunk/Source/WebCore/dom/ProcessingInstruction.cpp
r205455 r206016 130 130 m_cachedSheet = nullptr; 131 131 } 132 132 133 133 String url = document().completeURL(href).string(); 134 134 if (!dispatchBeforeLoadEvent(url)) 135 135 return; 136 136 137 137 m_loading = true; 138 138 document().authorStyleSheets().addPendingSheet(); 139 139 140 140 CachedResourceRequest request(ResourceRequest(document().completeURL(href))); 141 141 #if ENABLE(XSLT) 142 142 if (m_isXSL) 143 m_cachedSheet = document().cachedResourceLoader().requestXSLStyleSheet( request);143 m_cachedSheet = document().cachedResourceLoader().requestXSLStyleSheet(WTFMove(request)); 144 144 else 145 145 #endif … … 150 150 request.setCharset(charset); 151 151 152 m_cachedSheet = document().cachedResourceLoader().requestCSSStyleSheet( request);152 m_cachedSheet = document().cachedResourceLoader().requestCSSStyleSheet(WTFMove(request)); 153 153 } 154 154 if (m_cachedSheet) -
trunk/Source/WebCore/dom/ScriptElement.cpp
r205854 r206016 294 294 request.setInitiator(&element()); 295 295 296 return m_element.document().cachedResourceLoader().requestScript( request);296 return m_element.document().cachedResourceLoader().requestScript(WTFMove(request)); 297 297 } 298 298 -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r205455 r206016 272 272 request.setAsPotentiallyCrossOrigin(crossOrigin(), document()); 273 273 274 m_cachedSheet = document().cachedResourceLoader().requestCSSStyleSheet( request);274 m_cachedSheet = document().cachedResourceLoader().requestCSSStyleSheet(WTFMove(request)); 275 275 276 276 if (m_cachedSheet) -
trunk/Source/WebCore/html/parser/HTMLResourcePreloader.cpp
r205269 r206016 69 69 return; 70 70 71 CachedResourceRequest request = preload->resourceRequest(m_document); 72 m_document.cachedResourceLoader().preload(preload->resourceType(), request, preload->charset(), CachedResourceLoader::ImplicitPreload); 71 m_document.cachedResourceLoader().preload(preload->resourceType(), preload->resourceRequest(m_document), CachedResourceLoader::ImplicitPreload); 73 72 } 74 73 -
trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp
r205473 r206016 113 113 114 114 ASSERT(!m_resource); 115 m_resource = m_loader.document().cachedResourceLoader().requestRawResource( preflightRequest);115 m_resource = m_loader.document().cachedResourceLoader().requestRawResource(WTFMove(preflightRequest)); 116 116 if (m_resource) 117 117 m_resource->addClient(this); -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r205818 r206016 1511 1511 1512 1512 static NeverDestroyed<ResourceLoaderOptions> mainResourceLoadOptions(SendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, SkipSecurityCheck, FetchOptions::Mode::NoCors, IncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::AllowCaching); 1513 CachedResourceRequest cachedResourceRequest(ResourceRequest(request), mainResourceLoadOptions); 1514 m_mainResource = m_cachedResourceLoader->requestMainResource(cachedResourceRequest); 1513 m_mainResource = m_cachedResourceLoader->requestMainResource(CachedResourceRequest(ResourceRequest(request), mainResourceLoadOptions)); 1515 1514 1516 1515 #if ENABLE(CONTENT_EXTENSIONS) -
trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp
r206009 r206016 373 373 374 374 ASSERT(!m_resource); 375 m_resource = m_document.cachedResourceLoader().requestRawResource(newRequest); 375 // We create an URL here as the request will be moved in requestRawResource 376 URL requestUrl = newRequest.resourceRequest().url(); 377 m_resource = m_document.cachedResourceLoader().requestRawResource(WTFMove(newRequest)); 376 378 if (m_resource) 377 379 m_resource->addClient(this); 378 380 else { 379 381 // FIXME: Since we receive a synchronous error, this is probably due to some AccessControl checks. We should try to retrieve the actual error. 380 m_client->didFail(ResourceError(String(), 0, newRequest.resourceRequest().url(), String(), ResourceError::Type::AccessControl));382 m_client->didFail(ResourceError(String(), 0, requestUrl, String(), ResourceError::Type::AccessControl)); 381 383 } 382 384 return; -
trunk/Source/WebCore/loader/ImageLoader.cpp
r205473 r206016 186 186 bool autoLoadOtherImages = document.cachedResourceLoader().autoLoadImages(); 187 187 document.cachedResourceLoader().setAutoLoadImages(false); 188 newImage = new CachedImage( request.resourceRequest(), m_element.document().page()->sessionID());188 newImage = new CachedImage(WTFMove(request), m_element.document().page()->sessionID()); 189 189 newImage->setStatus(CachedResource::Pending); 190 190 newImage->setLoading(true); … … 193 193 document.cachedResourceLoader().setAutoLoadImages(autoLoadOtherImages); 194 194 } else 195 newImage = document.cachedResourceLoader().requestImage( request);195 newImage = document.cachedResourceLoader().requestImage(WTFMove(request)); 196 196 197 197 // If we do not have an image here, it means that a cross-site -
trunk/Source/WebCore/loader/LinkLoader.cpp
r206010 r206016 164 164 linkRequest.setAsPotentiallyCrossOrigin(crossOriginMode, document); 165 165 linkRequest.setForPreload(true); 166 CachedResourceHandle<CachedResource> cachedLinkResource = document.cachedResourceLoader().preload(type.value(), linkRequest, emptyString(), CachedResourceLoader::ExplicitPreload);166 CachedResourceHandle<CachedResource> cachedLinkResource = document.cachedResourceLoader().preload(type.value(), WTFMove(linkRequest), CachedResourceLoader::ExplicitPreload); 167 167 168 168 if (cachedLinkResource) … … 196 196 type = CachedResource::LinkSubresource; 197 197 } 198 CachedResourceRequest linkRequest(ResourceRequest(document.completeURL(href)), priority);199 198 200 199 if (m_cachedLinkResource) { … … 202 201 m_cachedLinkResource = nullptr; 203 202 } 204 m_cachedLinkResource = document.cachedResourceLoader().requestLinkResource(type, linkRequest);203 m_cachedLinkResource = document.cachedResourceLoader().requestLinkResource(type, CachedResourceRequest(ResourceRequest(document.completeURL(href)), priority)); 205 204 if (m_cachedLinkResource) 206 205 m_cachedLinkResource->addClient(this); -
trunk/Source/WebCore/loader/MediaResourceLoader.cpp
r203971 r206016 80 80 #endif 81 81 82 CachedResourceHandle<CachedRawResource> resource = m_document->cachedResourceLoader().requestMedia( cacheRequest);82 CachedResourceHandle<CachedRawResource> resource = m_document->cachedResourceLoader().requestMedia(WTFMove(cacheRequest)); 83 83 if (!resource) 84 84 return nullptr; -
trunk/Source/WebCore/loader/ResourceTimingInformation.cpp
r204976 r206016 60 60 } 61 61 62 void ResourceTimingInformation::storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>& resource, const CachedResourceRequest& request, Frame* frame)62 void ResourceTimingInformation::storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>& resource, const AtomicString& initiatorName, Frame* frame) 63 63 { 64 64 ASSERT(RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()); … … 72 72 } 73 73 } else { 74 InitiatorInfo info = { request.initiatorName(), monotonicallyIncreasingTime(), NotYetAdded };74 InitiatorInfo info = { initiatorName, monotonicallyIncreasingTime(), NotYetAdded }; 75 75 m_initiatorMap.add(resource.get(), info); 76 76 } -
trunk/Source/WebCore/loader/ResourceTimingInformation.h
r204976 r206016 44 44 45 45 void addResourceTiming(CachedResource*, Document&, const LoadTiming&); 46 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>&, const CachedResourceRequest&, Frame*);46 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>&, const AtomicString&, Frame*); 47 47 48 48 private: -
trunk/Source/WebCore/loader/TextTrackLoader.cpp
r205750 r206016 158 158 cueRequest.setAsPotentiallyCrossOrigin(crossOriginMode, *document); 159 159 160 m_resource = document->cachedResourceLoader().requestTextTrack( cueRequest);160 m_resource = document->cachedResourceLoader().requestTextTrack(WTFMove(cueRequest)); 161 161 if (!m_resource) 162 162 return false; -
trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
r206010 r206016 30 30 #include "CSSStyleSheet.h" 31 31 #include "CachedResourceClientWalker.h" 32 #include "CachedResourceRequest.h" 32 33 #include "CachedStyleSheetClient.h" 33 34 #include "HTTPHeaderNames.h" … … 41 42 namespace WebCore { 42 43 43 CachedCSSStyleSheet::CachedCSSStyleSheet( const ResourceRequest& resourceRequest, const String& charset, SessionID sessionID)44 : CachedResource( resourceRequest, CSSStyleSheet, sessionID)45 , m_decoder(TextResourceDecoder::create("text/css", charset))44 CachedCSSStyleSheet::CachedCSSStyleSheet(CachedResourceRequest&& request, SessionID sessionID) 45 : CachedResource(WTFMove(request), CSSStyleSheet, sessionID) 46 , m_decoder(TextResourceDecoder::create("text/css", request.charset())) 46 47 { 47 48 // Prefer text/css but accept any type (dell.com serves a stylesheet -
trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h
r206010 r206016 38 38 class CachedCSSStyleSheet final : public CachedResource { 39 39 public: 40 CachedCSSStyleSheet( const ResourceRequest&, const String& charset, SessionID);40 CachedCSSStyleSheet(CachedResourceRequest&&, SessionID); 41 41 virtual ~CachedCSSStyleSheet(); 42 42 -
trunk/Source/WebCore/loader/cache/CachedFont.cpp
r201767 r206016 43 43 namespace WebCore { 44 44 45 CachedFont::CachedFont( const ResourceRequest& resourceRequest, SessionID sessionID, Type type)46 : CachedResource( resourceRequest, type, sessionID)45 CachedFont::CachedFont(CachedResourceRequest&& request, SessionID sessionID, Type type) 46 : CachedResource(WTFMove(request), type, sessionID) 47 47 , m_loadInitiated(false) 48 48 , m_hasCreatedFontDataWrappingResource(false) … … 54 54 } 55 55 56 void CachedFont::load(CachedResourceLoader& , const ResourceLoaderOptions& options)56 void CachedFont::load(CachedResourceLoader&) 57 57 { 58 58 // Don't load the file yet. Wait for an access before triggering the load. 59 59 setLoading(true); 60 m_options = options;61 60 } 62 61 … … 80 79 if (!m_loadInitiated) { 81 80 m_loadInitiated = true; 82 CachedResource::load(loader , m_options);81 CachedResource::load(loader); 83 82 } 84 83 } -
trunk/Source/WebCore/loader/cache/CachedFont.h
r200921 r206016 44 44 class CachedFont : public CachedResource { 45 45 public: 46 CachedFont( const ResourceRequest&, SessionID, Type = FontResource);46 CachedFont(CachedResourceRequest&&, SessionID, Type = FontResource); 47 47 virtual ~CachedFont(); 48 48 … … 51 51 52 52 virtual bool ensureCustomFontData(const AtomicString& remoteURI); 53 54 53 static std::unique_ptr<FontCustomPlatformData> createCustomFontData(SharedBuffer&, bool& wrapping); 55 54 static FontPlatformData platformDataFromCustomData(FontCustomPlatformData&, const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&); … … 66 65 bool mayTryReplaceEncodedData() const override; 67 66 68 void load(CachedResourceLoader& , const ResourceLoaderOptions&) override;67 void load(CachedResourceLoader&) override; 69 68 70 69 void didAddClient(CachedResourceClient*) override; -
trunk/Source/WebCore/loader/cache/CachedImage.cpp
r205997 r206016 57 57 namespace WebCore { 58 58 59 CachedImage::CachedImage( const ResourceRequest& resourceRequest, SessionID sessionID)60 : CachedResource( resourceRequest, ImageResource, sessionID)59 CachedImage::CachedImage(CachedResourceRequest&& request, SessionID sessionID) 60 : CachedResource(WTFMove(request), ImageResource, sessionID) 61 61 , m_image(nullptr) 62 62 , m_isManuallyCached(false) … … 67 67 68 68 CachedImage::CachedImage(Image* image, SessionID sessionID) 69 : CachedResource( ResourceRequest(), ImageResource, sessionID)69 : CachedResource(CachedResourceRequest(ResourceRequest()), ImageResource, sessionID) 70 70 , m_image(image) 71 71 , m_isManuallyCached(false) … … 77 77 78 78 CachedImage::CachedImage(const URL& url, Image* image, SessionID sessionID) 79 : CachedResource( ResourceRequest(url), ImageResource, sessionID)79 : CachedResource(CachedResourceRequest(ResourceRequest(url)), ImageResource, sessionID) 80 80 , m_image(image) 81 81 , m_isManuallyCached(false) … … 87 87 88 88 CachedImage::CachedImage(const URL& url, Image* image, CachedImage::CacheBehaviorType type, SessionID sessionID) 89 : CachedResource( ResourceRequest(url), ImageResource, sessionID)89 : CachedResource(CachedResourceRequest(ResourceRequest(url)), ImageResource, sessionID) 90 90 , m_image(image) 91 91 , m_isManuallyCached(type == CachedImage::ManuallyCached) … … 107 107 } 108 108 109 void CachedImage::load(CachedResourceLoader& cachedResourceLoader, const ResourceLoaderOptions& options)110 { 111 if ( cachedResourceLoader.shouldPerformImageLoad(url()))112 CachedResource::load( cachedResourceLoader, options);109 void CachedImage::load(CachedResourceLoader& loader) 110 { 111 if (loader.shouldPerformImageLoad(url())) 112 CachedResource::load(loader); 113 113 else 114 114 setLoading(false); -
trunk/Source/WebCore/loader/cache/CachedImage.h
r205997 r206016 51 51 enum CacheBehaviorType { AutomaticallyCached, ManuallyCached }; 52 52 53 CachedImage( const ResourceRequest&, SessionID);53 CachedImage(CachedResourceRequest&&, SessionID); 54 54 CachedImage(Image*, SessionID); 55 55 CachedImage(const URL&, Image*, SessionID); … … 63 63 64 64 std::pair<Image*, float> brokenImage(float deviceScaleFactor) const; // Returns an image and the image's resolution scale factor. 65 bool willPaintBrokenImage() const; 65 bool willPaintBrokenImage() const; 66 66 67 67 bool canRender(const RenderElement* renderer, float multiplier) { return !errorOccurred() && !imageSizeForRenderer(renderer, multiplier).isEmpty(); } … … 85 85 bool isManuallyCached() const { return m_isManuallyCached; } 86 86 RevalidationDecision makeRevalidationDecision(CachePolicy) const override; 87 void load(CachedResourceLoader& , const ResourceLoaderOptions&) override;87 void load(CachedResourceLoader&) override; 88 88 89 89 bool isOriginClean(SecurityOrigin*); -
trunk/Source/WebCore/loader/cache/CachedRawResource.cpp
r204466 r206016 37 37 namespace WebCore { 38 38 39 CachedRawResource::CachedRawResource( ResourceRequest& resourceRequest, Type type, SessionID sessionID)40 : CachedResource( resourceRequest, type, sessionID)39 CachedRawResource::CachedRawResource(CachedResourceRequest&& request, Type type, SessionID sessionID) 40 : CachedResource(WTFMove(request), type, sessionID) 41 41 , m_identifier(0) 42 42 , m_allowEncodedDataReplacement(true) -
trunk/Source/WebCore/loader/cache/CachedRawResource.h
r198292 r206016 33 33 class CachedRawResource final : public CachedResource { 34 34 public: 35 CachedRawResource( ResourceRequest&, Type, SessionID);35 CachedRawResource(CachedResourceRequest&&, Type, SessionID); 36 36 37 37 // FIXME: AssociatedURLLoader shouldn't be a DocumentThreadableLoader and therefore shouldn't … … 41 41 42 42 virtual void setDataBufferingPolicy(DataBufferingPolicy); 43 43 44 44 // FIXME: This is exposed for the InpsectorInstrumentation for preflights in DocumentThreadableLoader. It's also really lame. 45 45 unsigned long identifier() const { return m_identifier; } -
trunk/Source/WebCore/loader/cache/CachedResource.cpp
r205805 r206016 113 113 DEFINE_DEBUG_ONLY_GLOBAL(RefCountedLeakCounter, cachedResourceLeakCounter, ("CachedResource")); 114 114 115 CachedResource::CachedResource(const ResourceRequest& request, Type type, SessionID sessionID) 116 : m_resourceRequest(request) 115 CachedResource::CachedResource(CachedResourceRequest&& request, Type type, SessionID sessionID) 116 : m_resourceRequest(WTFMove(request.mutableResourceRequest())) 117 , m_options(request.options()) 117 118 , m_decodedDataDeletionTimer(*this, &CachedResource::destroyDecodedData, deadDecodedDataDeletionIntervalForResourceType(type)) 118 119 , m_sessionID(sessionID) … … 260 261 } 261 262 262 void CachedResource::load(CachedResourceLoader& cachedResourceLoader , const ResourceLoaderOptions& options)263 void CachedResource::load(CachedResourceLoader& cachedResourceLoader) 263 264 { 264 265 if (!cachedResourceLoader.frame()) { … … 280 281 281 282 FrameLoader& frameLoader = frame.loader(); 282 if ( options.securityCheck == DoSecurityCheck && (frameLoader.state() == FrameStateProvisional || !frameLoader.activeDocumentLoader() || frameLoader.activeDocumentLoader()->isStopping())) {283 if (m_options.securityCheck == DoSecurityCheck && (frameLoader.state() == FrameStateProvisional || !frameLoader.activeDocumentLoader() || frameLoader.activeDocumentLoader()->isStopping())) { 283 284 failBeforeStarting(); 284 285 return; 285 286 } 286 287 287 m_options = options;288 288 m_loading = true; 289 289 … … 336 336 } 337 337 338 m_loader = platformStrategies()->loaderStrategy()->loadResource(frame, *this, request, options);338 m_loader = platformStrategies()->loaderStrategy()->loadResource(frame, *this, request, m_options); 339 339 if (!m_loader) { 340 340 failBeforeStarting(); … … 345 345 } 346 346 347 void CachedResource::loadFrom(const CachedResource& resource, const ResourceLoaderOptions& options,CachedResourceLoader& cachedResourceLoader)347 void CachedResource::loadFrom(const CachedResource& resource, CachedResourceLoader& cachedResourceLoader) 348 348 { 349 349 ASSERT(url() == resource.url()); … … 351 351 ASSERT(resource.status() == Status::Cached); 352 352 353 m_options = options;354 353 computeOrigin(cachedResourceLoader); 355 354 356 if (isCrossOrigin() && options.mode == FetchOptions::Mode::Cors) {355 if (isCrossOrigin() && m_options.mode == FetchOptions::Mode::Cors) { 357 356 ASSERT(m_origin); 358 357 String errorMessage; -
trunk/Source/WebCore/loader/cache/CachedResource.h
r205750 r206016 47 47 class CachedResourceHandleBase; 48 48 class CachedResourceLoader; 49 class CachedResourceRequest; 49 50 class InspectorResource; 50 51 class SecurityOrigin; … … 94 95 }; 95 96 96 CachedResource( const ResourceRequest&, Type, SessionID);97 CachedResource(CachedResourceRequest&&, Type, SessionID); 97 98 virtual ~CachedResource(); 98 99 99 virtual void load(CachedResourceLoader& , const ResourceLoaderOptions&);100 virtual void load(CachedResourceLoader&); 100 101 101 102 virtual void setEncoding(const String&) { } … … 112 113 virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return false; } 113 114 115 const ResourceRequest& resourceRequest() const { return m_resourceRequest; } 114 116 ResourceRequest& resourceRequest() { return m_resourceRequest; } 115 117 const URL& url() const { return m_resourceRequest.url();} … … 210 212 ResourceResponse::Tainting responseTainting() const { return m_responseTainting; } 211 213 212 void loadFrom(const CachedResource&, const ResourceLoaderOptions&,CachedResourceLoader&);214 void loadFrom(const CachedResource&, CachedResourceLoader&); 213 215 214 216 SecurityOrigin* origin() const { return m_origin.get(); } -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r206010 r206016 83 83 namespace WebCore { 84 84 85 static CachedResource* createResource(CachedResource::Type type, ResourceRequest& request, const String& charset, SessionID sessionID)85 static CachedResource* createResource(CachedResource::Type type, CachedResourceRequest&& request, SessionID sessionID) 86 86 { 87 87 switch (type) { 88 88 case CachedResource::ImageResource: 89 return new CachedImage( request, sessionID);89 return new CachedImage(WTFMove(request), sessionID); 90 90 case CachedResource::CSSStyleSheet: 91 return new CachedCSSStyleSheet( request, charset, sessionID);91 return new CachedCSSStyleSheet(WTFMove(request), sessionID); 92 92 case CachedResource::Script: 93 return new CachedScript( request, charset, sessionID);93 return new CachedScript(WTFMove(request), sessionID); 94 94 case CachedResource::SVGDocumentResource: 95 return new CachedSVGDocument( request, sessionID);95 return new CachedSVGDocument(WTFMove(request), sessionID); 96 96 #if ENABLE(SVG_FONTS) 97 97 case CachedResource::SVGFontResource: 98 return new CachedSVGFont( request, sessionID);98 return new CachedSVGFont(WTFMove(request), sessionID); 99 99 #endif 100 100 case CachedResource::FontResource: 101 return new CachedFont( request, sessionID);101 return new CachedFont(WTFMove(request), sessionID); 102 102 case CachedResource::MediaResource: 103 103 case CachedResource::RawResource: 104 104 case CachedResource::MainResource: 105 return new CachedRawResource( request, type, sessionID);105 return new CachedRawResource(WTFMove(request), type, sessionID); 106 106 #if ENABLE(XSLT) 107 107 case CachedResource::XSLStyleSheet: 108 return new CachedXSLStyleSheet( request, sessionID);108 return new CachedXSLStyleSheet(WTFMove(request), sessionID); 109 109 #endif 110 110 #if ENABLE(LINK_PREFETCH) 111 111 case CachedResource::LinkPrefetch: 112 return new CachedResource( request, CachedResource::LinkPrefetch, sessionID);112 return new CachedResource(WTFMove(request), CachedResource::LinkPrefetch, sessionID); 113 113 case CachedResource::LinkSubresource: 114 return new CachedResource( request, CachedResource::LinkSubresource, sessionID);114 return new CachedResource(WTFMove(request), CachedResource::LinkSubresource, sessionID); 115 115 #endif 116 116 #if ENABLE(VIDEO_TRACK) 117 117 case CachedResource::TextTrackResource: 118 return new CachedTextTrack( request, sessionID);118 return new CachedTextTrack(WTFMove(request), sessionID); 119 119 #endif 120 120 } … … 175 175 } 176 176 177 CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResourceRequest& request)177 CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResourceRequest&& request) 178 178 { 179 179 if (Frame* frame = this->frame()) { … … 187 187 } 188 188 } 189 189 190 190 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? CachedResourceRequest::DeferredByClient : CachedResourceRequest::NoDefer); 191 return downcast<CachedImage>(requestResource(CachedResource::ImageResource, request).get());192 } 193 194 CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourceRequest& request, bool isSVG)191 return downcast<CachedImage>(requestResource(CachedResource::ImageResource, WTFMove(request)).get()); 192 } 193 194 CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourceRequest&& request, bool isSVG) 195 195 { 196 196 #if ENABLE(SVG_FONTS) 197 197 if (isSVG) 198 return downcast<CachedSVGFont>(requestResource(CachedResource::SVGFontResource, request).get());198 return downcast<CachedSVGFont>(requestResource(CachedResource::SVGFontResource, WTFMove(request)).get()); 199 199 #else 200 200 UNUSED_PARAM(isSVG); 201 201 #endif 202 return downcast<CachedFont>(requestResource(CachedResource::FontResource, request).get());202 return downcast<CachedFont>(requestResource(CachedResource::FontResource, WTFMove(request)).get()); 203 203 } 204 204 205 205 #if ENABLE(VIDEO_TRACK) 206 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(CachedResourceRequest& request)207 { 208 return downcast<CachedTextTrack>(requestResource(CachedResource::TextTrackResource, request).get());209 } 210 #endif 211 212 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestCSSStyleSheet(CachedResourceRequest& request)213 { 214 return downcast<CachedCSSStyleSheet>(requestResource(CachedResource::CSSStyleSheet, request).get());215 } 216 217 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSStyleSheet(CachedResourceRequest& request)206 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(CachedResourceRequest&& request) 207 { 208 return downcast<CachedTextTrack>(requestResource(CachedResource::TextTrackResource, WTFMove(request)).get()); 209 } 210 #endif 211 212 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestCSSStyleSheet(CachedResourceRequest&& request) 213 { 214 return downcast<CachedCSSStyleSheet>(requestResource(CachedResource::CSSStyleSheet, WTFMove(request)).get()); 215 } 216 217 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSStyleSheet(CachedResourceRequest&& request) 218 218 { 219 219 URL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceRequest().url()); … … 235 235 request.mutableResourceRequest().setURL(url); 236 236 237 CachedResourceHandle<CachedCSSStyleSheet> userSheet = new CachedCSSStyleSheet( request.resourceRequest(), request.charset(), sessionID());238 239 if ( request.allowsCaching())237 CachedResourceHandle<CachedCSSStyleSheet> userSheet = new CachedCSSStyleSheet(WTFMove(request), sessionID()); 238 239 if (userSheet->allowsCaching()) 240 240 memoryCache.add(*userSheet); 241 241 // FIXME: loadResource calls setOwningCachedResourceLoader() if the resource couldn't be added to cache. Does this function need to call it, too? 242 242 243 userSheet->load(*this, ResourceLoaderOptions(DoNotSendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, SkipSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::SkipPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::AllowCaching)); 244 243 userSheet->load(*this); 245 244 return userSheet; 246 245 } 247 246 248 CachedResourceHandle<CachedScript> CachedResourceLoader::requestScript(CachedResourceRequest& request)249 { 250 return downcast<CachedScript>(requestResource(CachedResource::Script, request).get());247 CachedResourceHandle<CachedScript> CachedResourceLoader::requestScript(CachedResourceRequest&& request) 248 { 249 return downcast<CachedScript>(requestResource(CachedResource::Script, WTFMove(request)).get()); 251 250 } 252 251 253 252 #if ENABLE(XSLT) 254 CachedResourceHandle<CachedXSLStyleSheet> CachedResourceLoader::requestXSLStyleSheet(CachedResourceRequest& request)255 { 256 return downcast<CachedXSLStyleSheet>(requestResource(CachedResource::XSLStyleSheet, request).get());257 } 258 #endif 259 260 CachedResourceHandle<CachedSVGDocument> CachedResourceLoader::requestSVGDocument(CachedResourceRequest& request)261 { 262 return downcast<CachedSVGDocument>(requestResource(CachedResource::SVGDocumentResource, request).get());253 CachedResourceHandle<CachedXSLStyleSheet> CachedResourceLoader::requestXSLStyleSheet(CachedResourceRequest&& request) 254 { 255 return downcast<CachedXSLStyleSheet>(requestResource(CachedResource::XSLStyleSheet, WTFMove(request)).get()); 256 } 257 #endif 258 259 CachedResourceHandle<CachedSVGDocument> CachedResourceLoader::requestSVGDocument(CachedResourceRequest&& request) 260 { 261 return downcast<CachedSVGDocument>(requestResource(CachedResource::SVGDocumentResource, WTFMove(request)).get()); 263 262 } 264 263 265 264 #if ENABLE(LINK_PREFETCH) 266 CachedResourceHandle<CachedResource> CachedResourceLoader::requestLinkResource(CachedResource::Type type, CachedResourceRequest& request)265 CachedResourceHandle<CachedResource> CachedResourceLoader::requestLinkResource(CachedResource::Type type, CachedResourceRequest&& request) 267 266 { 268 267 ASSERT(frame()); 269 268 ASSERT(type == CachedResource::LinkPrefetch || type == CachedResource::LinkSubresource); 270 return requestResource(type, request);271 } 272 #endif 273 274 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestMedia(CachedResourceRequest& request)275 { 276 return downcast<CachedRawResource>(requestResource(CachedResource::MediaResource, request).get());277 } 278 279 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestRawResource(CachedResourceRequest& request)280 { 281 return downcast<CachedRawResource>(requestResource(CachedResource::RawResource, request).get());282 } 283 284 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestMainResource(CachedResourceRequest& request)285 { 286 return downcast<CachedRawResource>(requestResource(CachedResource::MainResource, request).get());269 return requestResource(type, WTFMove(request)); 270 } 271 #endif 272 273 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestMedia(CachedResourceRequest&& request) 274 { 275 return downcast<CachedRawResource>(requestResource(CachedResource::MediaResource, WTFMove(request)).get()); 276 } 277 278 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestRawResource(CachedResourceRequest&& request) 279 { 280 return downcast<CachedRawResource>(requestResource(CachedResource::RawResource, WTFMove(request)).get()); 281 } 282 283 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestMainResource(CachedResourceRequest&& request) 284 { 285 return downcast<CachedRawResource>(requestResource(CachedResource::MainResource, WTFMove(request)).get()); 287 286 } 288 287 … … 540 539 } 541 540 542 bool CachedResourceLoader::updateCachedResourceWithCurrentRequest(CachedResourceRequest& request, CachedResourceHandle<CachedResource>& resourceHandle) 543 { 544 ASSERT(resourceHandle); 545 546 CachedResource& resource = *resourceHandle; 547 541 bool CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest(const CachedResource& resource, const CachedResourceRequest& request) 542 { 548 543 // FIXME: We should progressively extend this to other reusable resources 549 544 if (resource.type() != CachedResource::Type::ImageResource && resource.type() != CachedResource::Type::Script && resource.type() != CachedResource::Type::TextTrackResource && resource.type() != CachedResource::Type::CSSStyleSheet) 550 545 return false; 551 546 552 bool shouldUpdate =resource.options().mode != request.options().mode || request.resourceRequest().httpOrigin() != resource.resourceRequest().httpOrigin();553 554 if (!shouldUpdate) 555 return false; 556 547 return resource.options().mode != request.options().mode || request.resourceRequest().httpOrigin() != resource.resourceRequest().httpOrigin(); 548 } 549 550 CachedResourceHandle<CachedResource> CachedResourceLoader::updateCachedResourceWithCurrentRequest(const CachedResource& resource, CachedResourceRequest&& request) 551 { 557 552 // FIXME: For being loaded requests, we currently do not use the same resource, as this may induce errors in the resource response tainting. 558 553 // We should find a way to improve this. 559 554 if (resource.status() != CachedResource::Cached) { 560 555 request.setCachingPolicy(CachingPolicy::DisallowCaching); 561 resourceHandle = loadResource(resource.type(), request); 562 return true; 563 } 564 565 resourceHandle = createResource(resource.type(), request.mutableResourceRequest(), request.charset(), sessionID()); 566 resourceHandle->loadFrom(resource, request.options(), *this); 567 return true; 556 return loadResource(resource.type(), WTFMove(request)); 557 } 558 559 auto resourceHandle = createResource(resource.type(), WTFMove(request), sessionID()); 560 resourceHandle->loadFrom(resource, *this); 561 return resourceHandle; 568 562 } 569 563 … … 578 572 } 579 573 580 CachedResourceHandle<CachedResource> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest& request)574 CachedResourceHandle<CachedResource> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request) 581 575 { 582 576 if (Document* document = this->document()) 583 577 document->contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request.mutableResourceRequest(), ContentSecurityPolicy::InsecureRequestType::Load); 584 578 585 579 URL url = request.resourceRequest().url(); 586 580 587 581 LOG(ResourceLoading, "CachedResourceLoader::requestResource '%s', charset '%s', priority=%d, forPreload=%u", url.stringCenterEllipsizedToLength().latin1().data(), request.charset().latin1().data(), request.priority() ? static_cast<int>(request.priority().value()) : -1, request.forPreload()); 588 582 589 583 // If only the fragment identifiers differ, it is the same resource. 590 584 url = MemoryCache::removeFragmentIdentifierIfNeeded(url); … … 603 597 if (blockedStatus.blockedLoad) { 604 598 if (type == CachedResource::Type::MainResource) { 605 auto resource = createResource(type, request.mutableResourceRequest(), request.charset(), sessionID());599 auto resource = createResource(type, WTFMove(request), sessionID()); 606 600 ASSERT(resource); 607 601 resource->error(CachedResource::Status::LoadError); … … 647 641 648 642 logMemoryCacheResourceRequest(frame(), resource ? DiagnosticLoggingKeys::inMemoryCacheKey() : DiagnosticLoggingKeys::notInMemoryCacheKey()); 643 644 // These 3 fields will be used below after request is moved. 645 // FIXME: We can rearrange the code to not require storing all 3 fields. 646 auto forPreload = request.forPreload(); 647 auto defer = request.defer(); 648 auto priority = request.priority(); 649 649 650 650 RevalidationPolicy policy = determineRevalidationPolicy(type, request, resource.get()); … … 656 656 if (resource) 657 657 logMemoryCacheResourceRequest(frame(), DiagnosticLoggingKeys::inMemoryCacheKey(), DiagnosticLoggingKeys::unusedKey()); 658 resource = loadResource(type, request);658 resource = loadResource(type, WTFMove(request)); 659 659 break; 660 660 case Revalidate: 661 661 if (resource) 662 662 logMemoryCacheResourceRequest(frame(), DiagnosticLoggingKeys::inMemoryCacheKey(), DiagnosticLoggingKeys::revalidatingKey()); 663 resource = revalidateResource( request, resource.get());663 resource = revalidateResource(WTFMove(request), *resource); 664 664 break; 665 665 case Use: 666 if (updateCachedResourceWithCurrentRequest(request, resource)) { 666 ASSERT(resource); 667 if (shouldUpdateCachedResourceWithCurrentRequest(*resource, request)) { 668 resource = updateCachedResourceWithCurrentRequest(*resource, WTFMove(request)); 667 669 if (resource->status() != CachedResource::Status::Cached) 668 670 policy = Load; 669 671 } else { 670 ASSERT(policy == Use);671 672 if (!shouldContinueAfterNotifyingLoadedFromMemoryCache(request, resource.get())) 672 673 return nullptr; … … 678 679 resource->response().networkLoadTiming().reset(); 679 680 loadTiming.setResponseEnd(monotonicallyIncreasingTime()); 680 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request , frame());681 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request.initiatorName(), frame()); 681 682 m_resourceTimingInfo.addResourceTiming(resource.get(), *document(), loadTiming); 682 683 } … … 689 690 return nullptr; 690 691 691 if (! request.forPreload()|| policy != Use)692 resource->setLoadPriority( request.priority());693 694 if (! request.forPreload()&& resource->loader() && resource->resourceRequest().ignoreForRequestCount()) {692 if (!forPreload || policy != Use) 693 resource->setLoadPriority(priority); 694 695 if (!forPreload && resource->loader() && resource->resourceRequest().ignoreForRequestCount()) { 695 696 resource->resourceRequest().setIgnoreForRequestCount(false); 696 697 incrementRequestCount(*resource); 697 698 } 698 699 699 if ((policy != Use || resource->stillNeedsLoad()) && CachedResourceRequest::NoDefer == request.defer()) {700 resource->load(*this , request.options());700 if ((policy != Use || resource->stillNeedsLoad()) && CachedResourceRequest::NoDefer == defer) { 701 resource->load(*this); 701 702 702 703 // We don't support immediate loads, but we do support immediate failure. … … 708 709 } 709 710 710 if (document() && !document()->loadEventFinished() && !re quest.resourceRequest().url().protocolIsData())711 m_validatedURLs.add(re quest.resourceRequest().url());711 if (document() && !document()->loadEventFinished() && !resource->resourceRequest().url().protocolIsData()) 712 m_validatedURLs.add(resource->resourceRequest().url()); 712 713 713 714 ASSERT(resource->url() == url.string()); … … 721 722 } 722 723 723 CachedResourceHandle<CachedResource> CachedResourceLoader::revalidateResource(const CachedResourceRequest& request, CachedResource* resource) 724 { 725 ASSERT(resource); 726 ASSERT(resource->inCache()); 724 CachedResourceHandle<CachedResource> CachedResourceLoader::revalidateResource(CachedResourceRequest&& request, CachedResource& resource) 725 { 726 ASSERT(resource.inCache()); 727 727 auto& memoryCache = MemoryCache::singleton(); 728 728 ASSERT(!memoryCache.disabled()); 729 ASSERT(resource->canUseCacheValidator()); 730 ASSERT(!resource->resourceToRevalidate()); 731 ASSERT(resource->sessionID() == sessionID()); 732 ASSERT(resource->allowsCaching()); 733 734 CachedResourceHandle<CachedResource> newResource = createResource(resource->type(), resource->resourceRequest(), resource->encoding(), resource->sessionID()); 735 736 LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource.get(), resource); 737 newResource->setResourceToRevalidate(resource); 738 739 memoryCache.remove(*resource); 729 ASSERT(resource.canUseCacheValidator()); 730 ASSERT(!resource.resourceToRevalidate()); 731 ASSERT(resource.sessionID() == sessionID()); 732 ASSERT(resource.allowsCaching()); 733 734 #if ENABLE(WEB_TIMING) 735 AtomicString initiatorName = request.initiatorName(); 736 #endif 737 CachedResourceHandle<CachedResource> newResource = createResource(resource.type(), WTFMove(request), resource.sessionID()); 738 739 LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource.get(), &resource); 740 newResource->setResourceToRevalidate(&resource); 741 742 memoryCache.remove(resource); 740 743 memoryCache.add(*newResource); 741 744 #if ENABLE(WEB_TIMING) 742 745 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 743 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(newResource, request, frame()); 744 #else 745 UNUSED_PARAM(request); 746 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(newResource, initiatorName, frame()); 746 747 #endif 747 748 return newResource; 748 749 } 749 750 750 CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedResource::Type type, CachedResourceRequest& request)751 CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedResource::Type type, CachedResourceRequest&& request) 751 752 { 752 753 auto& memoryCache = MemoryCache::singleton(); … … 755 756 LOG(ResourceLoading, "Loading CachedResource for '%s'.", request.resourceRequest().url().stringCenterEllipsizedToLength().latin1().data()); 756 757 757 CachedResourceHandle<CachedResource> resource = createResource(type, request.mutableResourceRequest(), request.charset(), sessionID()); 758 759 if (request.allowsCaching() && !memoryCache.add(*resource)) 758 #if ENABLE(WEB_TIMING) 759 AtomicString initiatorName = request.initiatorName(); 760 #endif 761 CachedResourceHandle<CachedResource> resource = createResource(type, WTFMove(request), sessionID()); 762 763 if (resource->allowsCaching() && !memoryCache.add(*resource)) 760 764 resource->setOwningCachedResourceLoader(this); 761 765 #if ENABLE(WEB_TIMING) 762 766 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 763 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request, frame());767 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, initiatorName, frame()); 764 768 #endif 765 769 return resource; … … 986 990 for (auto& resource : m_documentResources.values()) { 987 991 if (is<CachedImage>(*resource) && resource->stillNeedsLoad() && !clientDefersImage(resource->url())) 988 downcast<CachedImage>(*resource).load(*this , defaultCachedResourceOptions());992 downcast<CachedImage>(*resource).load(*this); 989 993 } 990 994 } … … 1096 1100 } 1097 1101 1098 CachedResourceHandle<CachedResource> CachedResourceLoader::preload(CachedResource::Type type, CachedResourceRequest& request, const String& charset, PreloadType preloadType)1102 CachedResourceHandle<CachedResource> CachedResourceLoader::preload(CachedResource::Type type, CachedResourceRequest&& request, PreloadType preloadType) 1099 1103 { 1100 1104 // We always preload resources on iOS. See <https://bugs.webkit.org/show_bug.cgi?id=91276>. … … 1107 1111 // Don't preload subresources that can't block the parser before we have something to draw. 1108 1112 // This helps prevent preloads from delaying first display when bandwidth is limited. 1109 PendingPreload pendingPreload = { type, request, charset};1113 PendingPreload pendingPreload = { type, WTFMove(request) }; 1110 1114 m_pendingPreloads.append(pendingPreload); 1111 1115 return nullptr; … … 1114 1118 UNUSED_PARAM(preloadType); 1115 1119 #endif 1116 return requestPreload(type, request, charset);1117 } 1118 1119 void CachedResourceLoader::checkForPendingPreloads() 1120 return requestPreload(type, WTFMove(request)); 1121 } 1122 1123 void CachedResourceLoader::checkForPendingPreloads() 1120 1124 { 1121 1125 if (m_pendingPreloads.isEmpty()) … … 1134 1138 // Don't request preload if the resource already loaded normally (this will result in double load if the page is being reloaded with cached results ignored). 1135 1139 if (!cachedResource(preload.m_request.resourceRequest().url())) 1136 requestPreload(preload.m_type, preload.m_request, preload.m_charset);1140 requestPreload(preload.m_type, WTFMove(preload.m_request)); 1137 1141 } 1138 1142 m_pendingPreloads.clear(); 1139 1143 } 1140 1144 1141 CachedResourceHandle<CachedResource> CachedResourceLoader::requestPreload(CachedResource::Type type, CachedResourceRequest& request, const String& charset) 1142 { 1143 String encoding; 1144 if (type == CachedResource::Script || type == CachedResource::CSSStyleSheet) 1145 encoding = charset.isEmpty() ? m_document->charset() : charset; 1146 1147 request.setCharset(encoding); 1145 CachedResourceHandle<CachedResource> CachedResourceLoader::requestPreload(CachedResource::Type type, CachedResourceRequest&& request) 1146 { 1147 if (request.charset().isEmpty() && (type == CachedResource::Script || type == CachedResource::CSSStyleSheet)) 1148 request.setCharset(m_document->charset()); 1148 1149 request.setForPreload(true); 1149 1150 1150 CachedResourceHandle<CachedResource> resource = requestResource(type, request);1151 CachedResourceHandle<CachedResource> resource = requestResource(type, WTFMove(request)); 1151 1152 if (!resource || (m_preloads && m_preloads->contains(resource.get()))) 1152 1153 return nullptr; -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.h
r205473 r206016 73 73 ~CachedResourceLoader(); 74 74 75 CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest& );76 CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourceRequest& );77 CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedResourceRequest& );78 CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest& );79 CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest& , bool isSVG);80 CachedResourceHandle<CachedRawResource> requestMedia(CachedResourceRequest& );81 CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceRequest& );82 CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRequest& );83 CachedResourceHandle<CachedSVGDocument> requestSVGDocument(CachedResourceRequest& );75 CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest&&); 76 CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourceRequest&&); 77 CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedResourceRequest&&); 78 CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest&&); 79 CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&&, bool isSVG); 80 CachedResourceHandle<CachedRawResource> requestMedia(CachedResourceRequest&&); 81 CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceRequest&&); 82 CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRequest&&); 83 CachedResourceHandle<CachedSVGDocument> requestSVGDocument(CachedResourceRequest&&); 84 84 #if ENABLE(XSLT) 85 CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourceRequest& );85 CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourceRequest&&); 86 86 #endif 87 87 #if ENABLE(LINK_PREFETCH) 88 CachedResourceHandle<CachedResource> requestLinkResource(CachedResource::Type, CachedResourceRequest& );88 CachedResourceHandle<CachedResource> requestLinkResource(CachedResource::Type, CachedResourceRequest&&); 89 89 #endif 90 90 #if ENABLE(VIDEO_TRACK) 91 CachedResourceHandle<CachedTextTrack> requestTextTrack(CachedResourceRequest& );91 CachedResourceHandle<CachedTextTrack> requestTextTrack(CachedResourceRequest&&); 92 92 #endif 93 93 … … 97 97 CachedResource* cachedResource(const String& url) const; 98 98 CachedResource* cachedResource(const URL& url) const; 99 99 100 100 typedef HashMap<String, CachedResourceHandle<CachedResource>> DocumentResourceMap; 101 101 const DocumentResourceMap& allCachedResources() const { return m_documentResources; } … … 132 132 void clearPendingPreloads(); 133 133 enum PreloadType { ImplicitPreload, ExplicitPreload }; 134 CachedResourceHandle<CachedResource> preload(CachedResource::Type, CachedResourceRequest& , const String& charset, PreloadType);134 CachedResourceHandle<CachedResource> preload(CachedResource::Type, CachedResourceRequest&&, PreloadType); 135 135 void checkForPendingPreloads(); 136 136 void printPreloadStats(); … … 149 149 explicit CachedResourceLoader(DocumentLoader*); 150 150 151 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, CachedResourceRequest& );152 CachedResourceHandle<CachedResource> revalidateResource( const CachedResourceRequest&, CachedResource*);153 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, CachedResourceRequest& );154 CachedResourceHandle<CachedResource> requestPreload(CachedResource::Type, CachedResourceRequest& , const String& charset);151 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, CachedResourceRequest&&); 152 CachedResourceHandle<CachedResource> revalidateResource(CachedResourceRequest&&, CachedResource&); 153 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, CachedResourceRequest&&); 154 CachedResourceHandle<CachedResource> requestPreload(CachedResource::Type, CachedResourceRequest&&); 155 155 156 156 enum RevalidationPolicy { Use, Revalidate, Reload, Load }; 157 157 RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, CachedResourceRequest&, CachedResource* existingResource) const; 158 158 159 bool updateCachedResourceWithCurrentRequest(CachedResourceRequest&, CachedResourceHandle<CachedResource>&); 159 bool shouldUpdateCachedResourceWithCurrentRequest(const CachedResource&, const CachedResourceRequest&); 160 CachedResourceHandle<CachedResource> updateCachedResourceWithCurrentRequest(const CachedResource&, CachedResourceRequest&&); 161 160 162 bool shouldContinueAfterNotifyingLoadedFromMemoryCache(const CachedResourceRequest&, CachedResource*); 161 163 bool checkInsecureContent(CachedResource::Type, const URL&) const; … … 179 181 CachedResource::Type m_type; 180 182 CachedResourceRequest m_request; 181 String m_charset;182 183 }; 183 184 Deque<PendingPreload> m_pendingPreloads; -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.cpp
r186392 r206016 28 28 namespace WebCore { 29 29 30 CachedSVGDocument::CachedSVGDocument( const ResourceRequest& request, SessionID sessionID)31 : CachedResource( request, SVGDocumentResource, sessionID)30 CachedSVGDocument::CachedSVGDocument(CachedResourceRequest&& request, SessionID sessionID) 31 : CachedResource(WTFMove(request), SVGDocumentResource, sessionID) 32 32 , m_decoder(TextResourceDecoder::create("application/xml")) 33 33 { -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.h
r199881 r206016 33 33 class CachedSVGDocument final : public CachedResource { 34 34 public: 35 explicit CachedSVGDocument( const ResourceRequest&, SessionID);35 explicit CachedSVGDocument(CachedResourceRequest&&, SessionID); 36 36 virtual ~CachedSVGDocument(); 37 37 -
trunk/Source/WebCore/loader/cache/CachedSVGDocumentReference.cpp
r191369 r206016 55 55 CachedResourceRequest request(ResourceRequest(loader.document()->completeURL(m_url)), options); 56 56 request.setInitiator(cachedResourceRequestInitiators().css); 57 m_document = loader.requestSVGDocument( request);57 m_document = loader.requestSVGDocument(WTFMove(request)); 58 58 if (m_document) 59 59 m_document->addClient(this); -
trunk/Source/WebCore/loader/cache/CachedSVGFont.cpp
r199014 r206016 43 43 namespace WebCore { 44 44 45 CachedSVGFont::CachedSVGFont( const ResourceRequest& resourceRequest, SessionID sessionID)46 : CachedFont( resourceRequest, sessionID, SVGFontResource)45 CachedSVGFont::CachedSVGFont(CachedResourceRequest&& request, SessionID sessionID) 46 : CachedFont(WTFMove(request), sessionID, SVGFontResource) 47 47 , m_externalSVGFontElement(nullptr) 48 48 { -
trunk/Source/WebCore/loader/cache/CachedSVGFont.h
r198074 r206016 37 37 class CachedSVGFont final : public CachedFont { 38 38 public: 39 CachedSVGFont( const ResourceRequest&, SessionID);39 CachedSVGFont(CachedResourceRequest&&, SessionID); 40 40 41 41 bool ensureCustomFontData(const AtomicString& remoteURI) override; 42 42 43 43 RefPtr<Font> createFont(const FontDescription&, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&) override; 44 44 -
trunk/Source/WebCore/loader/cache/CachedScript.cpp
r205854 r206016 30 30 #include "CachedResourceClient.h" 31 31 #include "CachedResourceClientWalker.h" 32 #include "CachedResourceRequest.h" 32 33 #include "HTTPHeaderNames.h" 33 34 #include "HTTPParsers.h" … … 40 41 namespace WebCore { 41 42 42 CachedScript::CachedScript( const ResourceRequest& resourceRequest, const String& charset, SessionID sessionID)43 : CachedResource( resourceRequest, Script, sessionID)44 , m_decoder(TextResourceDecoder::create(ASCIILiteral("application/javascript"), charset))43 CachedScript::CachedScript(CachedResourceRequest&& request, SessionID sessionID) 44 : CachedResource(WTFMove(request), Script, sessionID) 45 , m_decoder(TextResourceDecoder::create(ASCIILiteral("application/javascript"), request.charset())) 45 46 { 46 47 // It's javascript we want. -
trunk/Source/WebCore/loader/cache/CachedScript.h
r205854 r206016 35 35 class CachedScript final : public CachedResource { 36 36 public: 37 CachedScript( const ResourceRequest&, const String& charset, SessionID);37 CachedScript(CachedResourceRequest&&, SessionID); 38 38 virtual ~CachedScript(); 39 39 -
trunk/Source/WebCore/loader/cache/CachedTextTrack.cpp
r204466 r206016 38 38 namespace WebCore { 39 39 40 CachedTextTrack::CachedTextTrack( const ResourceRequest& resourceRequest, SessionID sessionID)41 : CachedResource( resourceRequest, TextTrackResource, sessionID)40 CachedTextTrack::CachedTextTrack(CachedResourceRequest&& request, SessionID sessionID) 41 : CachedResource(WTFMove(request), TextTrackResource, sessionID) 42 42 { 43 43 } -
trunk/Source/WebCore/loader/cache/CachedTextTrack.h
r197563 r206016 36 36 class CachedTextTrack final : public CachedResource { 37 37 public: 38 CachedTextTrack( const ResourceRequest&, SessionID);38 CachedTextTrack(CachedResourceRequest&&, SessionID); 39 39 40 40 private: -
trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
r204466 r206016 37 37 #if ENABLE(XSLT) 38 38 39 CachedXSLStyleSheet::CachedXSLStyleSheet( const ResourceRequest& resourceRequest, SessionID sessionID)40 : CachedResource( resourceRequest, XSLStyleSheet, sessionID)39 CachedXSLStyleSheet::CachedXSLStyleSheet(CachedResourceRequest&& request, SessionID sessionID) 40 : CachedResource(WTFMove(request), XSLStyleSheet, sessionID) 41 41 , m_decoder(TextResourceDecoder::create("text/xsl")) 42 42 { … … 51 51 52 52 void CachedXSLStyleSheet::didAddClient(CachedResourceClient* c) 53 { 53 { 54 54 ASSERT(c->resourceClientType() == CachedStyleSheetClient::expectedType()); 55 55 if (!isLoading()) -
trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.h
r199881 r206016 37 37 class CachedXSLStyleSheet final : public CachedResource { 38 38 public: 39 CachedXSLStyleSheet( const ResourceRequest&, SessionID);39 CachedXSLStyleSheet(CachedResourceRequest&&, SessionID); 40 40 virtual ~CachedXSLStyleSheet(); 41 41 -
trunk/Source/WebCore/loader/icon/IconLoader.cpp
r203720 r206016 65 65 request.setInitiator(cachedResourceRequestInitiators().icon); 66 66 67 m_resource = m_frame.document()->cachedResourceLoader().requestRawResource( request);67 m_resource = m_frame.document()->cachedResourceLoader().requestRawResource(WTFMove(request)); 68 68 if (m_resource) 69 69 m_resource->addClient(this); -
trunk/Source/WebCore/platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp
r203720 r206016 76 76 request.mutableResourceRequest().setPriority(ResourceLoadPriority::Low); 77 77 CachedResourceLoader* loader = m_parent->player()->cachedResourceLoader(); 78 m_resource = loader ? loader->requestRawResource( request) : 0;78 m_resource = loader ? loader->requestRawResource(WTFMove(request)) : 0; 79 79 if (m_resource) 80 80 m_resource->addClient(this); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm
r203720 r206016 73 73 request.mutableResourceRequest().setPriority(ResourceLoadPriority::Low); 74 74 if (auto* loader = m_parent->player()->cachedResourceLoader()) 75 m_resource = loader->requestMedia( request);75 m_resource = loader->requestMedia(WTFMove(request)); 76 76 77 77 if (m_resource) -
trunk/Source/WebCore/svg/SVGFEImageElement.cpp
r204014 r206016 91 91 CachedResourceRequest request(ResourceRequest(document().completeURL(href())), options); 92 92 request.setInitiator(this); 93 m_cachedImage = document().cachedResourceLoader().requestImage( request);93 m_cachedImage = document().cachedResourceLoader().requestImage(WTFMove(request)); 94 94 95 95 if (m_cachedImage) -
trunk/Source/WebCore/svg/SVGFontFaceUriElement.cpp
r204014 r206016 107 107 CachedResourceRequest request(ResourceRequest(document().completeURL(href)), options); 108 108 request.setInitiator(this); 109 m_cachedFont = cachedResourceLoader.requestFont( request, isSVGFontTarget(*this));109 m_cachedFont = cachedResourceLoader.requestFont(WTFMove(request), isSVGFontTarget(*this)); 110 110 if (m_cachedFont) { 111 111 m_cachedFont->addClient(this); -
trunk/Source/WebCore/svg/SVGUseElement.cpp
r204014 r206016 574 574 CachedResourceRequest request { ResourceRequest { externalDocumentURL }, options }; 575 575 request.setInitiator(this); 576 m_externalDocument = document().cachedResourceLoader().requestSVGDocument( request);576 m_externalDocument = document().cachedResourceLoader().requestSVGDocument(WTFMove(request)); 577 577 if (m_externalDocument) 578 578 m_externalDocument->addClient(this); -
trunk/Source/WebCore/xml/XSLImportRule.cpp
r184622 r206016 91 91 // use parent styleheet's URL as the base URL 92 92 absHref = URL(parentSheet->baseURL(), m_strHref).string(); 93 93 94 94 // Check for a cycle in our import chain. If we encounter a stylesheet 95 95 // in our parent chain with the same URL, then just bail. … … 98 98 return; 99 99 } 100 101 CachedResourceRequest request(ResourceRequest(cachedResourceLoader->document()->completeURL(absHref))); 100 102 101 if (m_cachedSheet) 103 102 m_cachedSheet->removeClient(this); 104 m_cachedSheet = cachedResourceLoader->requestXSLStyleSheet( request);105 103 m_cachedSheet = cachedResourceLoader->requestXSLStyleSheet(CachedResourceRequest(ResourceRequest(cachedResourceLoader->document()->completeURL(absHref)))); 104 106 105 if (m_cachedSheet) { 107 106 m_cachedSheet->addClient(this); 108 107 109 108 // If the imported sheet is in the cache, then setXSLStyleSheet gets called, 110 109 // and the sheet even gets parsed (via parseString). In this case we have
Note: See TracChangeset
for help on using the changeset viewer.