Title: [205082] trunk
Revision
205082
Author
[email protected]
Date
2016-08-27 13:47:35 -0700 (Sat, 27 Aug 2016)

Log Message

[Fetch API] Opaque responses should not have any body
https://bugs.webkit.org/show_bug.cgi?id=161130

Patch by Youenn Fablet <[email protected]> on 2016-08-27
Reviewed by Sam Weinig.

LayoutTests/imported/w3c:

* web-platform-tests/fetch/api/cors/cors-basic.js:
(cors): Adding response body checking.

Source/WebCore:

Covered by updated test.

Added a new ThreadableLoader option to receive or not opaque response body.
By default, option is set to Receive.
FetchLoader is setting it to DoNotReceive.

* Modules/fetch/FetchLoader.cpp:
(WebCore::FetchLoader::start):
* loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::didReceiveResponse): Calling didFinishLoading just after didReceiveResponse in case of Opaque responses.
* loader/ThreadableLoader.cpp:
(WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
* loader/ThreadableLoader.h:
* loader/WorkerThreadableLoader.cpp:
(WebCore::LoaderTaskOptions::LoaderTaskOptions):

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (205081 => 205082)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2016-08-27 20:47:35 UTC (rev 205082)
@@ -1,5 +1,15 @@
 2016-08-27  Youenn Fablet  <[email protected]>
 
+        [Fetch API] Opaque responses should not have any body
+        https://bugs.webkit.org/show_bug.cgi?id=161130
+
+        Reviewed by Sam Weinig.
+
+        * web-platform-tests/fetch/api/cors/cors-basic.js:
+        (cors): Adding response body checking.
+
+2016-08-27  Youenn Fablet  <[email protected]>
+
         [Fetch API] opaqueredirect responses should have their URL set to the original URL
         https://bugs.webkit.org/show_bug.cgi?id=161194
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.js (205081 => 205082)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.js	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.js	2016-08-27 20:47:35 UTC (rev 205082)
@@ -13,6 +13,9 @@
       assert_equals(resp.status, 0, "Opaque filter: status is 0");
       assert_equals(resp.statusText, "", "Opaque filter: statusText is \"\"");
       assert_equals(resp.type , "opaque", "Opaque filter: response's type is opaque");
+      return resp.text().then(function(value) {
+        assert_equals(value, "", "Opaque response should have an empty body");
+      });
     });
   }, desc + " [no-cors mode]");
 

Modified: trunk/Source/WebCore/ChangeLog (205081 => 205082)


--- trunk/Source/WebCore/ChangeLog	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/Source/WebCore/ChangeLog	2016-08-27 20:47:35 UTC (rev 205082)
@@ -1,5 +1,28 @@
 2016-08-27  Youenn Fablet  <[email protected]>
 
+        [Fetch API] Opaque responses should not have any body
+        https://bugs.webkit.org/show_bug.cgi?id=161130
+
+        Reviewed by Sam Weinig.
+
+        Covered by updated test.
+
+        Added a new ThreadableLoader option to receive or not opaque response body.
+        By default, option is set to Receive.
+        FetchLoader is setting it to DoNotReceive.
+
+        * Modules/fetch/FetchLoader.cpp:
+        (WebCore::FetchLoader::start):
+        * loader/DocumentThreadableLoader.cpp:
+        (WebCore::DocumentThreadableLoader::didReceiveResponse): Calling didFinishLoading just after didReceiveResponse in case of Opaque responses.
+        * loader/ThreadableLoader.cpp:
+        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
+        * loader/ThreadableLoader.h:
+        * loader/WorkerThreadableLoader.cpp:
+        (WebCore::LoaderTaskOptions::LoaderTaskOptions):
+
+2016-08-27  Youenn Fablet  <[email protected]>
+
         [Fetch API] opaqueredirect responses should have their URL set to the original URL
         https://bugs.webkit.org/show_bug.cgi?id=161194
 

Modified: trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp (205081 => 205082)


--- trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp	2016-08-27 20:47:35 UTC (rev 205082)
@@ -76,7 +76,8 @@
 {
     ThreadableLoaderOptions options(request.fetchOptions(), ConsiderPreflight,
         context.shouldBypassMainWorldContentSecurityPolicy() ? ContentSecurityPolicyEnforcement::DoNotEnforce : ContentSecurityPolicyEnforcement::EnforceConnectSrcDirective,
-        String(cachedResourceRequestInitiators().fetch));
+        String(cachedResourceRequestInitiators().fetch),
+        OpaqueResponseBodyPolicy::DoNotReceive);
     options.sendLoadCallbacks = SendCallbacks;
     options.dataBufferingPolicy = DoNotBufferData;
 

Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp (205081 => 205082)


--- trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp	2016-08-27 20:47:35 UTC (rev 205082)
@@ -281,9 +281,14 @@
     }
 
     ASSERT(response.type() != ResourceResponse::Type::Error);
-    if (response.type() == ResourceResponse::Type::Default)
+    if (response.type() == ResourceResponse::Type::Default) {
         m_client->didReceiveResponse(identifier, ResourceResponse::filterResponse(response, tainting));
-    else {
+        if (tainting == ResourceResponse::Tainting::Opaque && options().opaqueResponse == OpaqueResponseBodyPolicy::DoNotReceive) {
+            clearResource();
+            if (m_client)
+                m_client->didFinishLoading(identifier, 0.0);
+        }
+    } else {
         ASSERT(response.type() == ResourceResponse::Type::Opaqueredirect);
         m_client->didReceiveResponse(identifier, response);
     }

Modified: trunk/Source/WebCore/loader/ThreadableLoader.cpp (205081 => 205082)


--- trunk/Source/WebCore/loader/ThreadableLoader.cpp	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/Source/WebCore/loader/ThreadableLoader.cpp	2016-08-27 20:47:35 UTC (rev 205082)
@@ -50,11 +50,12 @@
 {
 }
 
-ThreadableLoaderOptions::ThreadableLoaderOptions(const ResourceLoaderOptions& baseOptions, PreflightPolicy preflightPolicy, ContentSecurityPolicyEnforcement contentSecurityPolicyEnforcement, String&& initiator)
+ThreadableLoaderOptions::ThreadableLoaderOptions(const ResourceLoaderOptions& baseOptions, PreflightPolicy preflightPolicy, ContentSecurityPolicyEnforcement contentSecurityPolicyEnforcement, String&& initiator, OpaqueResponseBodyPolicy opaqueResponse)
     : ResourceLoaderOptions(baseOptions)
     , preflightPolicy(preflightPolicy)
     , contentSecurityPolicyEnforcement(contentSecurityPolicyEnforcement)
     , initiator(WTFMove(initiator))
+    , opaqueResponse(opaqueResponse)
 {
 }
 

Modified: trunk/Source/WebCore/loader/ThreadableLoader.h (205081 => 205082)


--- trunk/Source/WebCore/loader/ThreadableLoader.h	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/Source/WebCore/loader/ThreadableLoader.h	2016-08-27 20:47:35 UTC (rev 205082)
@@ -58,14 +58,20 @@
         EnforceScriptSrcDirective,
     };
 
+    enum class OpaqueResponseBodyPolicy {
+        Receive,
+        DoNotReceive
+    };
+
     struct ThreadableLoaderOptions : ResourceLoaderOptions {
         ThreadableLoaderOptions();
-        ThreadableLoaderOptions(const ResourceLoaderOptions&, PreflightPolicy, ContentSecurityPolicyEnforcement, String&& initiator);
+        ThreadableLoaderOptions(const ResourceLoaderOptions&, PreflightPolicy, ContentSecurityPolicyEnforcement, String&& initiator, OpaqueResponseBodyPolicy);
         ~ThreadableLoaderOptions();
 
         PreflightPolicy preflightPolicy { ConsiderPreflight };
         ContentSecurityPolicyEnforcement contentSecurityPolicyEnforcement { ContentSecurityPolicyEnforcement::EnforceConnectSrcDirective };
         String initiator; // This cannot be an AtomicString, as isolatedCopy() wouldn't create an object that's safe for passing to another thread.
+        OpaqueResponseBodyPolicy opaqueResponse { OpaqueResponseBodyPolicy::Receive };
     };
 
     // Useful for doing loader operations from any thread (not threadsafe,

Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp (205081 => 205082)


--- trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp	2016-08-27 18:43:32 UTC (rev 205081)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp	2016-08-27 20:47:35 UTC (rev 205082)
@@ -92,7 +92,7 @@
 };
 
 LoaderTaskOptions::LoaderTaskOptions(const ThreadableLoaderOptions& options, const String& referrer, const SecurityOrigin& origin)
-    : options(options, options.preflightPolicy, options.contentSecurityPolicyEnforcement, options.initiator.isolatedCopy())
+    : options(options, options.preflightPolicy, options.contentSecurityPolicyEnforcement, options.initiator.isolatedCopy(), options.opaqueResponse)
     , referrer(referrer.isolatedCopy())
     , origin(origin.isolatedCopy())
 {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to