Title: [253814] trunk
Revision
253814
Author
commit-qu...@webkit.org
Date
2019-12-20 05:35:19 -0800 (Fri, 20 Dec 2019)

Log Message

Fetch: handle emtpy Location value
https://bugs.webkit.org/show_bug.cgi?id=205462

Patch by Rob Buis <rb...@igalia.com> on 2019-12-20
Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

Update improved test results.

* web-platform-tests/fetch/api/redirect/redirect-empty-location.any-expected.txt:
* web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker-expected.txt:

Source/WebCore:

Handle empty Location value on redirect as specified here:
https://fetch.spec.whatwg.org/#concept-http-redirect-fetch step 3

Tests: web-platform-tests/fetch/api/redirect/redirect-empty-location.any.html
       web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker.html

* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::didReceiveResponse):

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (253813 => 253814)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2019-12-20 13:15:24 UTC (rev 253813)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2019-12-20 13:35:19 UTC (rev 253814)
@@ -1,3 +1,15 @@
+2019-12-20  Rob Buis  <rb...@igalia.com>
+
+        Fetch: handle emtpy Location value
+        https://bugs.webkit.org/show_bug.cgi?id=205462
+
+        Reviewed by Youenn Fablet.
+
+        Update improved test results.
+
+        * web-platform-tests/fetch/api/redirect/redirect-empty-location.any-expected.txt:
+        * web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker-expected.txt:
+
 2019-12-19  Chris Dumez  <cdu...@apple.com>
 
         REGRESSION: (r251677) imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/form-double-submit-3.html is a flaky failure

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-empty-location.any-expected.txt (253813 => 253814)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-empty-location.any-expected.txt	2019-12-20 13:15:24 UTC (rev 253813)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-empty-location.any-expected.txt	2019-12-20 13:35:19 UTC (rev 253814)
@@ -1,4 +1,4 @@
 
-FAIL redirect response with empty Location, follow mode assert_unreached: Should have rejected: undefined Reached unreachable code
+PASS redirect response with empty Location, follow mode 
 PASS redirect response with empty Location, manual mode 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker-expected.txt (253813 => 253814)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker-expected.txt	2019-12-20 13:15:24 UTC (rev 253813)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker-expected.txt	2019-12-20 13:35:19 UTC (rev 253814)
@@ -1,4 +1,4 @@
 
-FAIL redirect response with empty Location, follow mode assert_unreached: Should have rejected: undefined Reached unreachable code
+PASS redirect response with empty Location, follow mode 
 PASS redirect response with empty Location, manual mode 
 

Modified: trunk/Source/WebCore/ChangeLog (253813 => 253814)


--- trunk/Source/WebCore/ChangeLog	2019-12-20 13:15:24 UTC (rev 253813)
+++ trunk/Source/WebCore/ChangeLog	2019-12-20 13:35:19 UTC (rev 253814)
@@ -1,3 +1,19 @@
+2019-12-20  Rob Buis  <rb...@igalia.com>
+
+        Fetch: handle emtpy Location value
+        https://bugs.webkit.org/show_bug.cgi?id=205462
+
+        Reviewed by Youenn Fablet.
+
+        Handle empty Location value on redirect as specified here:
+        https://fetch.spec.whatwg.org/#concept-http-redirect-fetch step 3
+
+        Tests: web-platform-tests/fetch/api/redirect/redirect-empty-location.any.html
+               web-platform-tests/fetch/api/redirect/redirect-empty-location.any.worker.html
+
+        * loader/SubresourceLoader.cpp:
+        (WebCore::SubresourceLoader::didReceiveResponse):
+
 2019-12-20  youenn fablet  <you...@apple.com>
 
         DOMPromise::whenPromiseIsSettled is asserting in service worker

Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (253813 => 253814)


--- trunk/Source/WebCore/loader/SubresourceLoader.cpp	2019-12-20 13:15:24 UTC (rev 253813)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp	2019-12-20 13:35:19 UTC (rev 253814)
@@ -326,6 +326,12 @@
 
 #endif
 
+static bool isLocationURLFailure(const ResourceResponse& response)
+{
+    auto locationString = response.httpHeaderField(HTTPHeaderName::Location);
+    return !locationString.isNull() && locationString.isEmpty();
+}
+
 void SubresourceLoader::didReceiveResponse(const ResourceResponse& response, CompletionHandler<void()>&& policyCompletionHandler)
 {
     ASSERT(!response.isNull());
@@ -401,14 +407,21 @@
         return;
     }
 
-    if (options().redirect == FetchOptions::Redirect::Manual && response.isRedirection()) {
-        ResourceResponse opaqueRedirectedResponse = response;
-        opaqueRedirectedResponse.setType(ResourceResponse::Type::Opaqueredirect);
-        opaqueRedirectedResponse.setTainting(ResourceResponse::Tainting::Opaqueredirect);
-        m_resource->responseReceived(opaqueRedirectedResponse);
-        if (!reachedTerminalState())
-            ResourceLoader::didReceiveResponse(opaqueRedirectedResponse, [completionHandlerCaller = WTFMove(completionHandlerCaller)] { });
-        return;
+    if (response.isRedirection()) {
+        if (options().redirect == FetchOptions::Redirect::Follow && isLocationURLFailure(response)) {
+            // Implementing https://fetch.spec.whatwg.org/#concept-http-redirect-fetch step 3
+            cancel();
+            return;
+        }
+        if (options().redirect == FetchOptions::Redirect::Manual) {
+            ResourceResponse opaqueRedirectedResponse = response;
+            opaqueRedirectedResponse.setType(ResourceResponse::Type::Opaqueredirect);
+            opaqueRedirectedResponse.setTainting(ResourceResponse::Tainting::Opaqueredirect);
+            m_resource->responseReceived(opaqueRedirectedResponse);
+            if (!reachedTerminalState())
+                ResourceLoader::didReceiveResponse(opaqueRedirectedResponse, [completionHandlerCaller = WTFMove(completionHandlerCaller)] { });
+            return;
+        }
     }
     m_resource->responseReceived(response);
     if (reachedTerminalState())
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to