Title: [222561] trunk
Revision
222561
Author
commit-qu...@webkit.org
Date
2017-09-27 11:01:29 -0700 (Wed, 27 Sep 2017)

Log Message

[Fetch API] Cloning an opaque response should not assert
https://bugs.webkit.org/show_bug.cgi?id=177548

Patch by Youenn Fablet <you...@apple.com> on 2017-09-27
Reviewed by Sam Weinig.

Source/WebCore:

Test: http/wpt/fetch/response-opaque-clone.html

* Modules/fetch/FetchBodyOwner.cpp:
(WebCore::FetchBodyOwner::readableStream): Returning null if response is opaque.
* Modules/fetch/FetchResponse.cpp:
(WebCore::FetchResponse::clone): Making sure cloned responses keep their opaque state.
(WebCore::FetchResponse::consumeBodyAsStream): Removing assertion as we need to create a stream for cloning.

LayoutTests:

* http/wpt/fetch/response-opaque-clone-expected.txt: Added.
* http/wpt/fetch/response-opaque-clone.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (222560 => 222561)


--- trunk/LayoutTests/ChangeLog	2017-09-27 17:57:08 UTC (rev 222560)
+++ trunk/LayoutTests/ChangeLog	2017-09-27 18:01:29 UTC (rev 222561)
@@ -1,3 +1,13 @@
+2017-09-27  Youenn Fablet  <you...@apple.com>
+
+        [Fetch API] Cloning an opaque response should not assert
+        https://bugs.webkit.org/show_bug.cgi?id=177548
+
+        Reviewed by Sam Weinig.
+
+        * http/wpt/fetch/response-opaque-clone-expected.txt: Added.
+        * http/wpt/fetch/response-opaque-clone.html: Added.
+
 2017-09-27  Chris Dumez  <cdu...@apple.com>
 
         cssFloat missing in CSSPropertyDeclaration.prototype

Added: trunk/LayoutTests/http/wpt/fetch/response-opaque-clone-expected.txt (0 => 222561)


--- trunk/LayoutTests/http/wpt/fetch/response-opaque-clone-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/wpt/fetch/response-opaque-clone-expected.txt	2017-09-27 18:01:29 UTC (rev 222561)
@@ -0,0 +1,3 @@
+
+PASS Check opaque response can be cloned 
+

Added: trunk/LayoutTests/http/wpt/fetch/response-opaque-clone.html (0 => 222561)


--- trunk/LayoutTests/http/wpt/fetch/response-opaque-clone.html	                        (rev 0)
+++ trunk/LayoutTests/http/wpt/fetch/response-opaque-clone.html	2017-09-27 18:01:29 UTC (rev 222561)
@@ -0,0 +1,25 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Request clone</title>
+    <meta name="help" href=""
+    <script src=""
+    <script src=""
+  </head>
+  <body>
+    <script src=""
+    <script>
+promise_test(function(test) {
+    return fetch(get_host_info().HTTP_REMOTE_ORIGIN, { mode: "no-cors" }).then((response) => {
+        var clone = response.clone();
+        assert_equals(response.body, null, "opaque response body should be null");
+        assert_equals(clone.body, null, "clone body should be null");
+        return clone.arrayBuffer();
+    }).then((buffer) => {
+        assert_equals(buffer.byteLength, 0, "cloned opaque response buffer should be null");
+    });
+}, "Check opaque response can be cloned");
+    </script>
+  </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (222560 => 222561)


--- trunk/Source/WebCore/ChangeLog	2017-09-27 17:57:08 UTC (rev 222560)
+++ trunk/Source/WebCore/ChangeLog	2017-09-27 18:01:29 UTC (rev 222561)
@@ -1,3 +1,18 @@
+2017-09-27  Youenn Fablet  <you...@apple.com>
+
+        [Fetch API] Cloning an opaque response should not assert
+        https://bugs.webkit.org/show_bug.cgi?id=177548
+
+        Reviewed by Sam Weinig.
+
+        Test: http/wpt/fetch/response-opaque-clone.html
+
+        * Modules/fetch/FetchBodyOwner.cpp:
+        (WebCore::FetchBodyOwner::readableStream): Returning null if response is opaque.
+        * Modules/fetch/FetchResponse.cpp:
+        (WebCore::FetchResponse::clone): Making sure cloned responses keep their opaque state.
+        (WebCore::FetchResponse::consumeBodyAsStream): Removing assertion as we need to create a stream for cloning.
+
 2017-09-26  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Remove unused parameter of Page.reload

Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp (222560 => 222561)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp	2017-09-27 17:57:08 UTC (rev 222560)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp	2017-09-27 18:01:29 UTC (rev 222561)
@@ -287,7 +287,7 @@
 
 RefPtr<ReadableStream> FetchBodyOwner::readableStream(JSC::ExecState& state)
 {
-    if (isBodyNull())
+    if (isBodyNullOrOpaque())
         return nullptr;
 
     if (!m_body->hasReadableStream()) {

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (222560 => 222561)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2017-09-27 17:57:08 UTC (rev 222560)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2017-09-27 18:01:29 UTC (rev 222561)
@@ -157,6 +157,8 @@
 
     auto clone = adoptRef(*new FetchResponse(context, std::nullopt, FetchHeaders::create(headers()), ResourceResponse(m_response)));
     clone->cloneBody(*this);
+    if (isBodyOpaque())
+        clone->setBodyAsOpaque();
     return WTFMove(clone);
 }
 
@@ -350,7 +352,6 @@
 
 void FetchResponse::consumeBodyAsStream()
 {
-    ASSERT(!isBodyOpaque());
     ASSERT(m_readableStreamSource);
     if (!isLoading()) {
         FetchBodyOwner::consumeBodyAsStream();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to