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;