Title: [224903] trunk
Revision
224903
Author
commit-qu...@webkit.org
Date
2017-11-15 15:05:41 -0800 (Wed, 15 Nov 2017)

Log Message

Service Worker fetch should handle empty responses
https://bugs.webkit.org/show_bug.cgi?id=179740

Patch by Youenn Fablet <you...@apple.com> on 2017-11-15
Reviewed by Alex Christensen.

Source/WebCore:

Covered by updated test.

* Modules/streams/ReadableStreamSink.cpp:
(WebCore::ReadableStreamToSharedBufferSink::enqueue): Not create a buffer until actually needed.
* workers/service/context/ServiceWorkerFetch.cpp:
(WebCore::ServiceWorkerFetch::processResponse): Check for null buffers.

LayoutTests:

* http/tests/workers/service/resources/service-worker-fetch-worker.js:
(event.event.request.url.endsWith):
* http/tests/workers/service/resources/service-worker-fetch.js:
(async.test):
* http/tests/workers/service/service-worker-fetch.https-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (224902 => 224903)


--- trunk/LayoutTests/ChangeLog	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/LayoutTests/ChangeLog	2017-11-15 23:05:41 UTC (rev 224903)
@@ -1,5 +1,18 @@
 2017-11-15  Youenn Fablet  <you...@apple.com>
 
+        Service Worker fetch should handle empty responses
+        https://bugs.webkit.org/show_bug.cgi?id=179740
+
+        Reviewed by Alex Christensen.
+
+        * http/tests/workers/service/resources/service-worker-fetch-worker.js:
+        (event.event.request.url.endsWith):
+        * http/tests/workers/service/resources/service-worker-fetch.js:
+        (async.test):
+        * http/tests/workers/service/service-worker-fetch.https-expected.txt:
+
+2017-11-15  Youenn Fablet  <you...@apple.com>
+
         ReloadFromOrigin loads should not select any service worker
         https://bugs.webkit.org/show_bug.cgi?id=179736
 

Modified: trunk/LayoutTests/http/tests/workers/service/resources/service-worker-fetch-worker.js (224902 => 224903)


--- trunk/LayoutTests/http/tests/workers/service/resources/service-worker-fetch-worker.js	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/LayoutTests/http/tests/workers/service/resources/service-worker-fetch-worker.js	2017-11-15 23:05:41 UTC (rev 224903)
@@ -4,11 +4,18 @@
         event.respondWith(new Response(null, {status: 200, statusText: status}));
         return;
     }
-    if (!event.request.url.endsWith(".fromserviceworker")) {
-        state = "unknown url";
-        event.respondWith(new Response(null, {status: 404, statusText: "Not Found"}));
+    if (event.request.url.endsWith(".fromserviceworker")) {
+        status = event.request.url.substring(0, event.request.url.length - 18) + " through " + "fetch";
+        event.respondWith(fetch(event.request.url.substring(0, event.request.url.length - 18)));
+    }
+    if (event.request.url.endsWith(".bodyasanemptystream")) {
+        var stream = new ReadableStream({ start : controller => {
+            controller.close();
+        }});
+        event.respondWith(new Response(stream, {status : 200, statusText : "Empty stream"}));
         return;
     }
-    status = event.request.url.substring(0, event.request.url.length - 18) + " through " + "fetch";
-    event.respondWith(fetch(event.request.url.substring(0, event.request.url.length - 18)));
+    state = "unknown url";
+    event.respondWith(new Response(null, {status: 404, statusText: "Not Found"}));
+    return;
 });

Modified: trunk/LayoutTests/http/tests/workers/service/resources/service-worker-fetch.js (224902 => 224903)


--- trunk/LayoutTests/http/tests/workers/service/resources/service-worker-fetch.js	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/LayoutTests/http/tests/workers/service/resources/service-worker-fetch.js	2017-11-15 23:05:41 UTC (rev 224903)
@@ -9,8 +9,12 @@
 
         response = await fetch("/resources/square100.png.fromserviceworker");
         var buffer =  await response.arrayBuffer();
-        log("Got response with buffer byte length being " + buffer.byteLength);
+        log("Got image response with buffer byte length being " + buffer.byteLength);
 
+        response = await fetch("/resources/square100.png.bodyasanemptystream");
+        var buffer =  await response.arrayBuffer();
+        log("Got should-be-empty response with buffer byte length being " + buffer.byteLength + " and status is " + response.statusText);
+
         response = await fetch("status");
         log("Status is " + response.statusText);
     } catch(e) {

Modified: trunk/LayoutTests/http/tests/workers/service/service-worker-fetch.https-expected.txt (224902 => 224903)


--- trunk/LayoutTests/http/tests/workers/service/service-worker-fetch.https-expected.txt	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/LayoutTests/http/tests/workers/service/service-worker-fetch.https-expected.txt	2017-11-15 23:05:41 UTC (rev 224903)
@@ -1,5 +1,6 @@
 
 Status is no status
-Got response with buffer byte length being 12940
+Got image response with buffer byte length being 12940
+Got should-be-empty response with buffer byte length being 0 and status is Empty stream
 Status is https://127.0.0.1:8443/resources/square100.png through fetch
 

Modified: trunk/Source/WebCore/ChangeLog (224902 => 224903)


--- trunk/Source/WebCore/ChangeLog	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/Source/WebCore/ChangeLog	2017-11-15 23:05:41 UTC (rev 224903)
@@ -1,5 +1,19 @@
 2017-11-15  Youenn Fablet  <you...@apple.com>
 
+        Service Worker fetch should handle empty responses
+        https://bugs.webkit.org/show_bug.cgi?id=179740
+
+        Reviewed by Alex Christensen.
+
+        Covered by updated test.
+
+        * Modules/streams/ReadableStreamSink.cpp:
+        (WebCore::ReadableStreamToSharedBufferSink::enqueue): Not create a buffer until actually needed.
+        * workers/service/context/ServiceWorkerFetch.cpp:
+        (WebCore::ServiceWorkerFetch::processResponse): Check for null buffers.
+
+2017-11-15  Youenn Fablet  <you...@apple.com>
+
         ReloadFromOrigin loads should not select any service worker
         https://bugs.webkit.org/show_bug.cgi?id=179736
 

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamSink.cpp (224902 => 224903)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamSink.cpp	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamSink.cpp	2017-11-15 23:05:41 UTC (rev 224903)
@@ -48,6 +48,9 @@
 
 void ReadableStreamToSharedBufferSink::enqueue(const BufferSource& buffer)
 {
+    if (!buffer.length())
+        return;
+
     if (!m_data) {
         m_data = SharedBuffer::create(buffer.data(), buffer.length());
         return;

Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp (224902 => 224903)


--- trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp	2017-11-15 22:56:59 UTC (rev 224902)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp	2017-11-15 23:05:41 UTC (rev 224903)
@@ -56,7 +56,9 @@
                 client->didFail();
                 return;
             }
-            client->didReceiveData(result.releaseReturnValue().releaseNonNull());
+
+            if (auto buffer = result.releaseReturnValue())
+                client->didReceiveData(buffer.releaseNonNull());
             client->didFinish();
         });
         return;
@@ -68,7 +70,9 @@
                 client->didFail();
                 return;
             }
-            client->didReceiveData(result.releaseReturnValue().releaseNonNull());
+
+            if (auto buffer = result.releaseReturnValue())
+                client->didReceiveData(buffer.releaseNonNull());
             client->didFinish();
         });
         return;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to