Title: [258798] trunk
Revision
258798
Author
[email protected]
Date
2020-03-20 16:24:33 -0700 (Fri, 20 Mar 2020)

Log Message

CORS-disabling SPI introduced in r253978 should make responses non-opaque
https://bugs.webkit.org/show_bug.cgi?id=209351
<rdar://problem/60024850>

Reviewed by Chris Dumez.

Source/WebCore:

Covered by making the API test actually check that response content is readable.

* loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::responseReceived):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (258797 => 258798)


--- trunk/Source/WebCore/ChangeLog	2020-03-20 22:56:09 UTC (rev 258797)
+++ trunk/Source/WebCore/ChangeLog	2020-03-20 23:24:33 UTC (rev 258798)
@@ -1,3 +1,16 @@
+2020-03-20  Alex Christensen  <[email protected]>
+
+        CORS-disabling SPI introduced in r253978 should make responses non-opaque
+        https://bugs.webkit.org/show_bug.cgi?id=209351
+        <rdar://problem/60024850>
+
+        Reviewed by Chris Dumez.
+
+        Covered by making the API test actually check that response content is readable.
+
+        * loader/DocumentThreadableLoader.cpp:
+        (WebCore::DocumentThreadableLoader::responseReceived):
+
 2020-03-20  Jer Noble  <[email protected]>
 
         Ensure media cache directory is created before passing to AVURLAsset.

Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp (258797 => 258798)


--- trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp	2020-03-20 22:56:09 UTC (rev 258797)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp	2020-03-20 23:24:33 UTC (rev 258798)
@@ -161,6 +161,7 @@
     if (shouldDisableCORS) {
         m_options.mode = FetchOptions::Mode::NoCors;
         m_options.filteringPolicy = ResponseFilteringPolicy::Disable;
+        m_responsesCanBeOpaque = false;
     }
 
     m_options.cspResponseHeaders = m_options.contentSecurityPolicyEnforcement != ContentSecurityPolicyEnforcement::DoNotEnforce ? this->contentSecurityPolicy().responseHeaders() : ContentSecurityPolicyResponseHeaders { };
@@ -371,7 +372,12 @@
 void DocumentThreadableLoader::responseReceived(CachedResource& resource, const ResourceResponse& response, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT_UNUSED(resource, &resource == m_resource);
-    didReceiveResponse(m_resource->identifier(), response);
+    if (!m_responsesCanBeOpaque) {
+        ResourceResponse responseWithoutTainting = response;
+        responseWithoutTainting.setTainting(ResourceResponse::Tainting::Basic);
+        didReceiveResponse(m_resource->identifier(), responseWithoutTainting);
+    } else
+        didReceiveResponse(m_resource->identifier(), response);
 
     if (completionHandler)
         completionHandler();

Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.h (258797 => 258798)


--- trunk/Source/WebCore/loader/DocumentThreadableLoader.h	2020-03-20 22:56:09 UTC (rev 258797)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.h	2020-03-20 23:24:33 UTC (rev 258798)
@@ -123,6 +123,7 @@
         ThreadableLoaderClient* m_client;
         Document& m_document;
         ThreadableLoaderOptions m_options;
+        bool m_responsesCanBeOpaque { true };
         RefPtr<SecurityOrigin> m_origin;
         String m_referrer;
         bool m_sameOriginRequest;

Modified: trunk/Tools/ChangeLog (258797 => 258798)


--- trunk/Tools/ChangeLog	2020-03-20 22:56:09 UTC (rev 258797)
+++ trunk/Tools/ChangeLog	2020-03-20 23:24:33 UTC (rev 258798)
@@ -1,3 +1,13 @@
+2020-03-20  Alex Christensen  <[email protected]>
+
+        CORS-disabling SPI introduced in r253978 should make responses non-opaque
+        https://bugs.webkit.org/show_bug.cgi?id=209351
+        <rdar://problem/60024850>
+
+        Reviewed by Chris Dumez.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
+
 2020-03-20  Aakash Jain  <[email protected]>
 
         commit-queue should skip building and testing if patch already passed tests on mac-wk2 queue

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm (258797 => 258798)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm	2020-03-20 22:56:09 UTC (rev 258797)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm	2020-03-20 23:24:33 UTC (rev 258798)
@@ -836,7 +836,7 @@
 TEST(URLSchemeHandler, DisableCORS)
 {
     TestWebKitAPI::HTTPServer server({
-        { "/subresource", { "subresourcecontent" } }
+        { "/subresource", { {{ "Content-Type", "application/json" }}, "{\"testkey\":\"testvalue\"}" } }
     });
 
     bool corssuccess = false;
@@ -850,7 +850,18 @@
 
     [handler setStartURLSchemeTaskHandler:[&](WKWebView *, id<WKURLSchemeTask> task) {
         if ([task.request.URL.path isEqualToString:@"/main.html"]) {
-            NSData *data = "" stringWithFormat:@"<script>fetch('http://127.0.0.1:%d/subresource').then(function(){fetch('/corssuccess')}).catch(function(){fetch('/corsfailure')})</script>", server.port()] dataUsingEncoding:NSUTF8StringEncoding];
+            NSData *data = "" stringWithFormat:
+                @"<script>"
+                    "fetch('http://127.0.0.1:%d/subresource').then(function(r){"
+                        "r.json().then(function(object) {"
+                            "if (object.testkey == 'testvalue') {"
+                                "fetch('/corssuccess')"
+                            "} else {"
+                                "fetch('/corsfailure')"
+                            "}"
+                        "}).catch(function(){fetch('/corsfailure')})"
+                    "}).catch(function(){fetch('/corsfailure')})"
+                "</script>", server.port()] dataUsingEncoding:NSUTF8StringEncoding];
             [task didReceiveResponse:[[[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:@"text/html" expectedContentLength:data.length textEncodingName:nil] autorelease]];
             [task didReceiveData:data];
             [task didFinish];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to