Changeset 260622 in webkit
- Timestamp:
- Apr 23, 2020 11:51:19 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r260616 r260622 1 2020-04-23 Rob Buis <rbuis@igalia.com> 2 3 Make CachedResourceLoader more conforming to Fetch specification 4 https://bugs.webkit.org/show_bug.cgi?id=210925 5 6 Reviewed by Alex Christensen. 7 8 Make CachedResourceLoader more conforming to Fetch specification 9 by fixing links, re-ordering steps to match main fetch [1] and do 10 early exit code paths earlier. 11 12 * loader/cache/CachedResourceLoader.cpp: 13 (WebCore::CachedResourceLoader::requestImage): adjust to parameter change. 14 (WebCore::CachedResourceLoader::canRequest): replace CachedResourceRequest param with ResourceLoaderOptions. 15 (WebCore::CachedResourceLoader::prepareFetch): fix comment. 16 (WebCore::CachedResourceLoader::requestResource): re-order. 17 * loader/cache/CachedResourceLoader.h: 18 1 19 2020-04-23 Simon Fraser <simon.fraser@apple.com> 2 20 -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r260596 r260622 206 206 request.upgradeInsecureRequestIfNeeded(*document); 207 207 URL requestURL = request.resourceRequest().url(); 208 if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request , ForPreload::No))208 if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request.options(), ForPreload::No)) 209 209 PingLoader::loadImage(*frame, requestURL); 210 210 return CachedResourceHandle<CachedImage> { }; … … 498 498 } 499 499 500 // Security checks defined in https://fetch.spec.whatwg.org/#main-fetch step 2 and 5. 501 bool CachedResourceLoader::canRequest(CachedResource::Type type, const URL& url, const CachedResourceRequest& request, ForPreload forPreload) 502 { 503 auto& options = request.options(); 504 500 // Security checks defined in https://fetch.spec.whatwg.org/#main-fetch step 2 and 4. 501 bool CachedResourceLoader::canRequest(CachedResource::Type type, const URL& url, const ResourceLoaderOptions& options, ForPreload forPreload) 502 { 505 503 if (document() && !document()->securityOrigin().canDisplay(url)) { 506 504 if (forPreload == ForPreload::No) … … 716 714 void CachedResourceLoader::prepareFetch(CachedResource::Type type, CachedResourceRequest& request) 717 715 { 718 // Implementing step 1 to 7 of https://fetch.spec.whatwg.org/#fetching 719 auto* document = this->document(); 720 721 if (document) { 716 // Implementing step 1.1 to 1.6 of https://fetch.spec.whatwg.org/#concept-fetch. 717 if (auto* document = this->document()) { 722 718 if (!request.origin()) 723 719 request.setOrigin(document->securityOrigin()); … … 806 802 ResourceErrorOr<CachedResourceHandle<CachedResource>> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request, ForPreload forPreload, ImageLoading imageLoading) 807 803 { 804 URL url = request.resourceRequest().url(); 808 805 if (!frame() || !frame()->page()) { 809 806 RELEASE_LOG_IF_ALLOWED("requestResource: failed because no frame or page"); 810 return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, request.resourceRequest().url(), "Invalid loader state"_s }); 811 } 807 return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "Invalid loader state"_s }); 808 } 809 812 810 auto& frame = *this->frame(); 813 auto& page = *frame.page(); 811 if (!url.isValid()) { 812 RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: URL is invalid", frame); 813 return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "URL is invalid"_s }); 814 } 815 816 LOG(ResourceLoading, "CachedResourceLoader::requestResource '%.255s', charset '%s', priority=%d, forPreload=%u", url.stringCenterEllipsizedToLength().latin1().data(), request.charset().latin1().data(), request.priority() ? static_cast<int>(request.priority().value()) : -1, forPreload == ForPreload::Yes); 814 817 815 818 request.setDestinationIfNotSet(destinationForType(type)); … … 823 826 } 824 827 825 if (Document* document = this->document()) 826 request.upgradeInsecureRequestIfNeeded(*document); 827 828 if (InspectorInstrumentation::willInterceptRequest(&frame, request.resourceRequest())) 829 request.setCachingPolicy(CachingPolicy::DisallowCaching); 830 831 URL url = request.resourceRequest().url(); 828 prepareFetch(type, request); 829 832 830 if (request.options().destination == FetchOptions::Destination::Document) { 833 831 // FIXME: Identify HSTS cases and avoid adding the header. <https://bugs.webkit.org/show_bug.cgi?id=157885> … … 836 834 } 837 835 838 request.updateReferrerPolicy(document() ? document()->referrerPolicy() : ReferrerPolicy::NoReferrerWhenDowngrade); 839 840 LOG(ResourceLoading, "CachedResourceLoader::requestResource '%.255s', charset '%s', priority=%d, forPreload=%u", url.stringCenterEllipsizedToLength().latin1().data(), request.charset().latin1().data(), request.priority() ? static_cast<int>(request.priority().value()) : -1, forPreload == ForPreload::Yes); 841 842 if (!url.isValid()) { 843 RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: URL is invalid", frame); 844 return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "URL is invalid"_s }); 845 } 846 847 prepareFetch(type, request); 836 if (Document* document = this->document()) { 837 request.upgradeInsecureRequestIfNeeded(*document); 838 url = request.resourceRequest().url(); 839 } 848 840 849 841 // We are passing url as well as request, as request url may contain a fragment identifier. 850 if (!canRequest(type, url, request , forPreload)) {842 if (!canRequest(type, url, request.options(), forPreload)) { 851 843 RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: Not allowed to request resource", frame); 852 844 return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "Not allowed to request resource"_s, ResourceError::Type::AccessControl }); 853 845 } 846 847 request.updateReferrerPolicy(document() ? document()->referrerPolicy() : ReferrerPolicy::NoReferrerWhenDowngrade); 848 849 if (InspectorInstrumentation::willInterceptRequest(&frame, request.resourceRequest())) 850 request.setCachingPolicy(CachingPolicy::DisallowCaching); 851 852 auto& page = *frame.page(); 854 853 855 854 #if ENABLE(CONTENT_EXTENSIONS) -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.h
r260596 r260622 178 178 void updateHTTPRequestHeaders(FrameLoader&, CachedResource::Type, CachedResourceRequest&); 179 179 180 bool canRequest(CachedResource::Type, const URL&, const CachedResourceRequest&, ForPreload);180 bool canRequest(CachedResource::Type, const URL&, const ResourceLoaderOptions&, ForPreload); 181 181 182 182 enum RevalidationPolicy { Use, Revalidate, Reload, Load };
Note: See TracChangeset
for help on using the changeset viewer.