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())
{