Changeset 260622 in webkit


Ignore:
Timestamp:
Apr 23, 2020 11:51:19 PM (4 years ago)
Author:
commit-queue@webkit.org
Message:

Make CachedResourceLoader more conforming to Fetch specification
https://bugs.webkit.org/show_bug.cgi?id=210925

Patch by Rob Buis <rbuis@igalia.com> on 2020-04-23
Reviewed by Alex Christensen.

Make CachedResourceLoader more conforming to Fetch specification
by fixing links, re-ordering steps to match main fetch [1] and do
early exit code paths earlier.

  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::requestImage): adjust to parameter change.
(WebCore::CachedResourceLoader::canRequest): replace CachedResourceRequest param with ResourceLoaderOptions.
(WebCore::CachedResourceLoader::prepareFetch): fix comment.
(WebCore::CachedResourceLoader::requestResource): re-order.

  • loader/cache/CachedResourceLoader.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r260616 r260622  
     12020-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
    1192020-04-23  Simon Fraser  <simon.fraser@apple.com>
    220
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r260596 r260622  
    206206                request.upgradeInsecureRequestIfNeeded(*document);
    207207            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))
    209209                PingLoader::loadImage(*frame, requestURL);
    210210            return CachedResourceHandle<CachedImage> { };
     
    498498}
    499499
    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.
     501bool CachedResourceLoader::canRequest(CachedResource::Type type, const URL& url, const ResourceLoaderOptions& options, ForPreload forPreload)
     502{
    505503    if (document() && !document()->securityOrigin().canDisplay(url)) {
    506504        if (forPreload == ForPreload::No)
     
    716714void CachedResourceLoader::prepareFetch(CachedResource::Type type, CachedResourceRequest& request)
    717715{
    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()) {
    722718        if (!request.origin())
    723719            request.setOrigin(document->securityOrigin());
     
    806802ResourceErrorOr<CachedResourceHandle<CachedResource>> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request, ForPreload forPreload, ImageLoading imageLoading)
    807803{
     804    URL url = request.resourceRequest().url();
    808805    if (!frame() || !frame()->page()) {
    809806        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
    812810    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);
    814817
    815818    request.setDestinationIfNotSet(destinationForType(type));
     
    823826    }
    824827
    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
    832830    if (request.options().destination == FetchOptions::Destination::Document) {
    833831        // FIXME: Identify HSTS cases and avoid adding the header. <https://bugs.webkit.org/show_bug.cgi?id=157885>
     
    836834    }
    837835
    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    }
    848840
    849841    // 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)) {
    851843        RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: Not allowed to request resource", frame);
    852844        return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "Not allowed to request resource"_s, ResourceError::Type::AccessControl });
    853845    }
     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();
    854853
    855854#if ENABLE(CONTENT_EXTENSIONS)
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.h

    r260596 r260622  
    178178    void updateHTTPRequestHeaders(FrameLoader&, CachedResource::Type, CachedResourceRequest&);
    179179
    180     bool canRequest(CachedResource::Type, const URL&, const CachedResourceRequest&, ForPreload);
     180    bool canRequest(CachedResource::Type, const URL&, const ResourceLoaderOptions&, ForPreload);
    181181
    182182    enum RevalidationPolicy { Use, Revalidate, Reload, Load };
Note: See TracChangeset for help on using the changeset viewer.