Title: [260622] trunk/Source/WebCore
Revision
260622
Author
[email protected]
Date
2020-04-23 23:51:19 -0700 (Thu, 23 Apr 2020)

Log Message

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

Patch by Rob Buis <[email protected]> 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:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (260621 => 260622)


--- trunk/Source/WebCore/ChangeLog	2020-04-24 05:43:33 UTC (rev 260621)
+++ trunk/Source/WebCore/ChangeLog	2020-04-24 06:51:19 UTC (rev 260622)
@@ -1,3 +1,21 @@
+2020-04-23  Rob Buis  <[email protected]>
+
+        Make CachedResourceLoader more conforming to Fetch specification
+        https://bugs.webkit.org/show_bug.cgi?id=210925
+
+        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:
+
 2020-04-23  Simon Fraser  <[email protected]>
 
         Move the storage of DisplayID from Chrome to Page

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (260621 => 260622)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2020-04-24 05:43:33 UTC (rev 260621)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2020-04-24 06:51:19 UTC (rev 260622)
@@ -205,7 +205,7 @@
             if (Document* document = frame->document())
                 request.upgradeInsecureRequestIfNeeded(*document);
             URL requestURL = request.resourceRequest().url();
-            if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request, ForPreload::No))
+            if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request.options(), ForPreload::No))
                 PingLoader::loadImage(*frame, requestURL);
             return CachedResourceHandle<CachedImage> { };
         }
@@ -497,11 +497,9 @@
     return url.protocolIsData() && options.sameOriginDataURLFlag == SameOriginDataURLFlag::Set;
 }
 
-// Security checks defined in https://fetch.spec.whatwg.org/#main-fetch step 2 and 5.
-bool CachedResourceLoader::canRequest(CachedResource::Type type, const URL& url, const CachedResourceRequest& request, ForPreload forPreload)
+// Security checks defined in https://fetch.spec.whatwg.org/#main-fetch step 2 and 4.
+bool CachedResourceLoader::canRequest(CachedResource::Type type, const URL& url, const ResourceLoaderOptions& options, ForPreload forPreload)
 {
-    auto& options = request.options();
-
     if (document() && !document()->securityOrigin().canDisplay(url)) {
         if (forPreload == ForPreload::No)
             FrameLoader::reportLocalLoadFailed(frame(), url.stringCenterEllipsizedToLength());
@@ -715,10 +713,8 @@
 
 void CachedResourceLoader::prepareFetch(CachedResource::Type type, CachedResourceRequest& request)
 {
-    // Implementing step 1 to 7 of https://fetch.spec.whatwg.org/#fetching
-    auto* document = this->document();
-
-    if (document) {
+    // Implementing step 1.1 to 1.6 of https://fetch.spec.whatwg.org/#concept-fetch.
+    if (auto* document = this->document()) {
         if (!request.origin())
             request.setOrigin(document->securityOrigin());
 #if ENABLE(SERVICE_WORKER)
@@ -805,13 +801,20 @@
 
 ResourceErrorOr<CachedResourceHandle<CachedResource>> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request, ForPreload forPreload, ImageLoading imageLoading)
 {
+    URL url = ""
     if (!frame() || !frame()->page()) {
         RELEASE_LOG_IF_ALLOWED("requestResource: failed because no frame or page");
-        return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, request.resourceRequest().url(), "Invalid loader state"_s });
+        return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "Invalid loader state"_s });
     }
+
     auto& frame = *this->frame();
-    auto& page = *frame.page();
+    if (!url.isValid()) {
+        RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: URL is invalid", frame);
+        return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "URL is invalid"_s });
+    }
 
+    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);
+
     request.setDestinationIfNotSet(destinationForType(type));
 
     // Entry point to https://fetch.spec.whatwg.org/#main-fetch.
@@ -822,13 +825,8 @@
         originalRequest->clearHTTPOrigin();
     }
 
-    if (Document* document = this->document())
-        request.upgradeInsecureRequestIfNeeded(*document);
+    prepareFetch(type, request);
 
-    if (InspectorInstrumentation::willInterceptRequest(&frame, request.resourceRequest()))
-        request.setCachingPolicy(CachingPolicy::DisallowCaching);
-
-    URL url = ""
     if (request.options().destination == FetchOptions::Destination::Document) {
         // FIXME: Identify HSTS cases and avoid adding the header. <https://bugs.webkit.org/show_bug.cgi?id=157885>
         if (!url.protocolIs("https"))
@@ -835,23 +833,24 @@
             request.resourceRequest().setHTTPHeaderField(HTTPHeaderName::UpgradeInsecureRequests, "1"_s);
     }
 
-    request.updateReferrerPolicy(document() ? document()->referrerPolicy() : ReferrerPolicy::NoReferrerWhenDowngrade);
-
-    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);
-
-    if (!url.isValid()) {
-        RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: URL is invalid", frame);
-        return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "URL is invalid"_s });
+    if (Document* document = this->document()) {
+        request.upgradeInsecureRequestIfNeeded(*document);
+        url = ""
     }
 
-    prepareFetch(type, request);
-
     // We are passing url as well as request, as request url may contain a fragment identifier.
-    if (!canRequest(type, url, request, forPreload)) {
+    if (!canRequest(type, url, request.options(), forPreload)) {
         RELEASE_LOG_IF_ALLOWED_WITH_FRAME("requestResource: Not allowed to request resource", frame);
         return makeUnexpected(ResourceError { errorDomainWebKitInternal, 0, url, "Not allowed to request resource"_s, ResourceError::Type::AccessControl });
     }
 
+    request.updateReferrerPolicy(document() ? document()->referrerPolicy() : ReferrerPolicy::NoReferrerWhenDowngrade);
+
+    if (InspectorInstrumentation::willInterceptRequest(&frame, request.resourceRequest()))
+        request.setCachingPolicy(CachingPolicy::DisallowCaching);
+
+    auto& page = *frame.page();
+
 #if ENABLE(CONTENT_EXTENSIONS)
     if (m_documentLoader) {
         const auto& resourceRequest = request.resourceRequest();

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.h (260621 => 260622)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.h	2020-04-24 05:43:33 UTC (rev 260621)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.h	2020-04-24 06:51:19 UTC (rev 260622)
@@ -177,7 +177,7 @@
     void prepareFetch(CachedResource::Type, CachedResourceRequest&);
     void updateHTTPRequestHeaders(FrameLoader&, CachedResource::Type, CachedResourceRequest&);
 
-    bool canRequest(CachedResource::Type, const URL&, const CachedResourceRequest&, ForPreload);
+    bool canRequest(CachedResource::Type, const URL&, const ResourceLoaderOptions&, ForPreload);
 
     enum RevalidationPolicy { Use, Revalidate, Reload, Load };
     RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, CachedResourceRequest&, CachedResource* existingResource, ForPreload, ImageLoading) const;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to