Title: [227888] branches/safari-605-branch

Diff

Modified: branches/safari-605-branch/LayoutTests/imported/w3c/ChangeLog (227887 => 227888)


--- branches/safari-605-branch/LayoutTests/imported/w3c/ChangeLog	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/ChangeLog	2018-01-31 09:09:39 UTC (rev 227888)
@@ -1,3 +1,23 @@
+2018-01-31  Jason Marcell  <[email protected]>
+
+        Cherry-pick r227760. rdar://problem/37019484
+
+    2018-01-29  Oleksandr Skachkov  <[email protected]>
+
+            FetchResponse should support ConsumeData callback on chunk data is received: handling ReadableStream bodies
+            https://bugs.webkit.org/show_bug.cgi?id=182008
+
+            Reviewed by Youenn Fablet.
+
+            * web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https-expected.txt: Added.
+            * web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https.html: Added.
+            * web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-chunk-iframe.html: Added.
+            * web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-chunk-worker.js: Added.
+            (const.process):
+            (this.step):
+            (this.run):
+            (const.asyncSteps):
+
 2018-01-30  Jason Marcell  <[email protected]>
 
         Cherry-pick r227649. rdar://problem/37019344

Added: branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https-expected.txt (0 => 227888)


--- branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https-expected.txt	                        (rev 0)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https-expected.txt	2018-01-31 09:09:39 UTC (rev 227888)
@@ -0,0 +1,3 @@
+
+PASS Respond by chunks with a Response built from a ReadableStream 
+

Added: branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https.html (0 => 227888)


--- branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https.html	                        (rev 0)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream-chunk.https.html	2018-01-31 09:09:39 UTC (rev 227888)
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>respondWith with a response built from a ReadableStream</title>
+<script src=""
+<script src=""
+<script src=""
+<script>
+'use strict';
+
+const WORKER = 'resources/fetch-event-respond-with-readable-stream-chunk-worker.js';
+const SCOPE = 'resources/fetch-event-respond-with-readable-stream-chunk-iframe.html';
+
+promise_test(async t => {
+    var reg = await service_worker_unregister_and_register(t, WORKER, SCOPE);
+    add_completion_callback(() => reg.unregister());
+    await wait_for_state(t, reg.installing, 'activated');
+    let iframe = await with_iframe(SCOPE);
+    t.add_cleanup(() => iframe.remove());
+
+    let response = await iframe.contentWindow.fetch('body-stream');
+    assert_equals(await response.text(), 'chunk #1 chunk #2 chunk #3 chunk #4');
+}, 'Respond by chunks with a Response built from a ReadableStream');
+</script>

Added: branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-chunk-worker.js (0 => 227888)


--- branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-chunk-worker.js	                        (rev 0)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-chunk-worker.js	2018-01-31 09:09:39 UTC (rev 227888)
@@ -0,0 +1,40 @@
+'use strict';
+
+self.addEventListener('fetch', event => {
+    if (!event.request.url.match(/body-stream$/))
+        return;
+
+    var counter = 0;
+    const encoder = new TextEncoder();
+    const stream = new ReadableStream({ pull: controller => {
+        switch (++counter) {
+        case 1:
+            controller.enqueue(encoder.encode(''));
+            return;
+        case 2:
+            controller.enqueue(encoder.encode('chunk #1'));
+            return;
+        case 3:
+            controller.enqueue(encoder.encode(' '));
+            return;
+        case 4:
+            controller.enqueue(encoder.encode('chunk #2'));
+            return;
+        case 5:
+            controller.enqueue(encoder.encode(' '));
+            return;
+        case 6:
+            controller.enqueue(encoder.encode('chunk #3'));
+            return;
+        case 7:
+            controller.enqueue(encoder.encode(' '));
+            return;
+        case 8:
+            controller.enqueue(encoder.encode('chunk #4'));
+            return;
+        default:
+            controller.close();
+        }
+    }});
+    event.respondWith(new Response(stream));
+});

Modified: branches/safari-605-branch/Source/WebCore/ChangeLog (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/ChangeLog	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/ChangeLog	2018-01-31 09:09:39 UTC (rev 227888)
@@ -1,5 +1,35 @@
 2018-01-31  Jason Marcell  <[email protected]>
 
+        Cherry-pick r227760. rdar://problem/37019484
+
+    2018-01-29  Oleksandr Skachkov  <[email protected]>
+
+            FetchResponse should support ConsumeData callback on chunk data is received: handling ReadableStream bodies
+            https://bugs.webkit.org/show_bug.cgi?id=182008
+
+            Reviewed by Youenn Fablet.
+
+            Modify FetchResponse to support ConsumeData callback with
+            handling of ReadableStream by chunks
+
+            * Modules/cache/DOMCache.cpp:
+            (WebCore::DOMCache::put):
+            * Modules/fetch/FetchBodyConsumer.cpp:
+            (WebCore::FetchBodyConsumer::resolve):
+            * Modules/fetch/FetchResponse.cpp:
+            (WebCore::FetchResponse::consumeBodyFromReadableStream):
+            * Modules/fetch/FetchResponse.h:
+            * Modules/streams/ReadableStreamChunk.h: Added.
+            * Modules/streams/ReadableStreamSink.cpp:
+            (WebCore::ReadableStreamToSharedBufferSink::enqueue):
+            (WebCore::ReadableStreamToSharedBufferSink::close):
+            * Modules/streams/ReadableStreamSink.h:
+            * WebCore.xcodeproj/project.pbxproj:
+            * workers/service/context/ServiceWorkerFetch.cpp:
+            (WebCore::ServiceWorkerFetch::processResponse):
+
+2018-01-31  Jason Marcell  <[email protected]>
+
         Cherry-pick r227755. rdar://problem/37050332
 
     2018-01-29  Brent Fulgham  <[email protected]>

Modified: branches/safari-605-branch/Source/WebCore/Modules/cache/DOMCache.cpp (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/cache/DOMCache.cpp	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/Modules/cache/DOMCache.cpp	2018-01-31 09:09:39 UTC (rev 227888)
@@ -31,6 +31,7 @@
 #include "HTTPParsers.h"
 #include "JSFetchRequest.h"
 #include "JSFetchResponse.h"
+#include "ReadableStreamChunk.h"
 #include "ScriptExecutionContext.h"
 #include "URL.h"
 
@@ -332,10 +333,17 @@
     }
 
     if (response->hasReadableStreamBody()) {
-        setPendingActivity(this);
-        response->consumeBodyFromReadableStream([promise = WTFMove(promise), request = WTFMove(request), response = WTFMove(response), this](ExceptionOr<RefPtr<SharedBuffer>>&& result) mutable {
-            putWithResponseData(WTFMove(promise), WTFMove(request), WTFMove(response), WTFMove(result));
-            unsetPendingActivity(this);
+        response->consumeBodyFromReadableStream([promise = WTFMove(promise), request = WTFMove(request), response = WTFMove(response), data = "" pendingActivity = makePendingActivity(*this), this](auto&& result) mutable {
+
+            if (result.hasException()) {
+                this->putWithResponseData(WTFMove(promise), WTFMove(request), WTFMove(response), result.releaseException().isolatedCopy());
+                return;
+            }
+
+            if (auto chunk = result.returnValue())
+                data->append(reinterpret_cast<const char*>(chunk->data), chunk->size);
+            else
+                this->putWithResponseData(WTFMove(promise), WTFMove(request), WTFMove(response), RefPtr<SharedBuffer> { WTFMove(data) });
         });
         return;
     }

Modified: branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp	2018-01-31 09:09:39 UTC (rev 227888)
@@ -30,6 +30,7 @@
 #include "FetchBodyConsumer.h"
 
 #include "JSBlob.h"
+#include "ReadableStreamChunk.h"
 #include "TextResourceDecoder.h"
 
 namespace WebCore {
@@ -103,15 +104,16 @@
 {
     if (stream) {
         ASSERT(!m_sink);
-        m_sink = ReadableStreamToSharedBufferSink::create([promise = WTFMove(promise), type = m_type, contentType = m_contentType](ExceptionOr<RefPtr<SharedBuffer>>&& result) mutable {
+        m_sink = ReadableStreamToSharedBufferSink::create([promise = WTFMove(promise), data = "" type = m_type, contentType = m_contentType](auto&& result) mutable {
             if (result.hasException()) {
                 promise->reject(result.releaseException());
                 return;
             }
 
-            auto* data = "" && result.returnValue()->data() ? reinterpret_cast<const unsigned char*>(result.returnValue()->data()) : nullptr;
-            auto size = data ? result.returnValue()->size() : 0;
-            resolveWithTypeAndData(WTFMove(promise), type, contentType, data, size);
+            if (auto chunk = result.returnValue())
+                data->append(reinterpret_cast<const char*>(chunk->data), chunk->size);
+            else
+                resolveWithTypeAndData(WTFMove(promise), type, contentType, reinterpret_cast<const unsigned char*>(data->data()), data->size());
         });
         m_sink->pipeFrom(*stream);
         return;

Modified: branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchResponse.cpp (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchResponse.cpp	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchResponse.cpp	2018-01-31 09:09:39 UTC (rev 227888)
@@ -33,6 +33,7 @@
 #include "HTTPParsers.h"
 #include "JSBlob.h"
 #include "MIMETypeRegistry.h"
+#include "ReadableStreamSink.h"
 #include "ResourceError.h"
 #include "ScriptExecutionContext.h"
 
@@ -339,7 +340,7 @@
     return body().take();
 }
 
-void FetchResponse::consumeBodyFromReadableStream(ConsumeDataCallback&& callback)
+void FetchResponse::consumeBodyFromReadableStream(ConsumeDataByChunkCallback&& callback)
 {
     ASSERT(m_body);
     ASSERT(m_body->readableStream());

Modified: branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchResponse.h (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchResponse.h	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/Modules/fetch/FetchResponse.h	2018-01-31 09:09:39 UTC (rev 227888)
@@ -30,6 +30,7 @@
 
 #include "FetchBodyOwner.h"
 #include "FetchHeaders.h"
+#include "ReadableStreamSink.h"
 #include "ResourceResponse.h"
 #include <runtime/TypedArrays.h>
 
@@ -41,6 +42,7 @@
 namespace WebCore {
 
 class FetchRequest;
+struct ReadableStreamChunk;
 class ReadableStreamSource;
 
 class FetchResponse final : public FetchBodyOwner {
@@ -93,8 +95,10 @@
 
     using ConsumeDataCallback = WTF::Function<void(ExceptionOr<RefPtr<SharedBuffer>>&&)>;
     void consumeBodyWhenLoaded(ConsumeDataCallback&&);
-    void consumeBodyFromReadableStream(ConsumeDataCallback&&);
 
+    using ConsumeDataByChunkCallback = WTF::Function<void(ExceptionOr<ReadableStreamChunk*>&&)>;
+    void consumeBodyFromReadableStream(ConsumeDataByChunkCallback&&);
+
     WEBCORE_EXPORT ResourceResponse resourceResponse() const;
 
     uint64_t bodySizeWithPadding() const { return m_bodySizeWithPadding; }

Added: branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamChunk.h (0 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamChunk.h	                        (rev 0)
+++ branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamChunk.h	2018-01-31 09:09:39 UTC (rev 227888)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 Oleksandr Skachkov <[email protected]>.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+namespace WebCore {
+
+struct ReadableStreamChunk {
+    const uint8_t* data;
+    size_t size;
+};
+
+}

Modified: branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamSink.cpp (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamSink.cpp	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamSink.cpp	2018-01-31 09:09:39 UTC (rev 227888)
@@ -51,17 +51,16 @@
     if (!buffer.length())
         return;
 
-    if (!m_data) {
-        m_data = SharedBuffer::create(buffer.data(), buffer.length());
-        return;
+    if (m_callback) {
+        ReadableStreamChunk chunk { buffer.data(), buffer.length() };
+        m_callback(&chunk);
     }
-    m_data->append(reinterpret_cast<const char*>(buffer.data()), buffer.length());
 }
 
 void ReadableStreamToSharedBufferSink::close()
 {
-    if (auto callback = WTFMove(m_callback))
-        callback(WTFMove(m_data));
+    if (m_callback)
+        m_callback(nullptr);
 }
 
 void ReadableStreamToSharedBufferSink::error(String&& message)

Modified: branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamSink.h (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamSink.h	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/Modules/streams/ReadableStreamSink.h	2018-01-31 09:09:39 UTC (rev 227888)
@@ -29,6 +29,7 @@
 #if ENABLE(STREAMS_API)
 
 #include "ExceptionOr.h"
+#include "ReadableStreamChunk.h"
 #include <wtf/Function.h>
 #include <wtf/RefCounted.h>
 
@@ -36,6 +37,7 @@
 
 class BufferSource;
 class ReadableStream;
+struct ReadableStreamChunk;
 class SharedBuffer;
 
 class ReadableStreamSink : public RefCounted<ReadableStreamSink> {
@@ -49,13 +51,13 @@
 
 class ReadableStreamToSharedBufferSink final : public ReadableStreamSink {
 public:
-    using Callback = WTF::Function<void(ExceptionOr<RefPtr<SharedBuffer>>&&)>;
+    using Callback = WTF::Function<void(ExceptionOr<ReadableStreamChunk*>&&)>;
     static Ref<ReadableStreamToSharedBufferSink> create(Callback&& callback) { return adoptRef(*new ReadableStreamToSharedBufferSink(WTFMove(callback))); }
     void pipeFrom(ReadableStream&);
     void clearCallback() { m_callback = { }; }
 
 private:
-    ReadableStreamToSharedBufferSink(Callback&&);
+    explicit ReadableStreamToSharedBufferSink(Callback&&);
 
     void enqueue(const BufferSource&) final;
     void close() final;
@@ -62,7 +64,6 @@
     void error(String&&) final;
 
     Callback m_callback;
-    RefPtr<SharedBuffer> m_data;
 };
 
 } // namespace WebCore

Modified: branches/safari-605-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2018-01-31 09:09:39 UTC (rev 227888)
@@ -2365,6 +2365,7 @@
 		8AB4BC77126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB4BC76126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h */; };
 		8AF4E55611DC5A36000ED3DE /* PerformanceNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55311DC5A36000ED3DE /* PerformanceNavigation.h */; };
 		8AF4E55C11DC5A63000ED3DE /* PerformanceTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55911DC5A63000ED3DE /* PerformanceTiming.h */; };
+		8BD37A68201BB39C0011734A /* ReadableStreamChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD37A67201BB39C0011734A /* ReadableStreamChunk.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		8E4C96DD1AD4483500365A50 /* JSFetchResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E4C96D91AD4483500365A50 /* JSFetchResponse.h */; };
 		8F67561B1288B17B0047ACA3 /* EventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F6756191288B17B0047ACA3 /* EventQueue.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		9001774012E0347800648462 /* OESStandardDerivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9001773D12E0347800648462 /* OESStandardDerivatives.cpp */; };
@@ -9847,6 +9848,7 @@
 		8AF4E55411DC5A36000ED3DE /* PerformanceNavigation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PerformanceNavigation.idl; sourceTree = "<group>"; };
 		8AF4E55911DC5A63000ED3DE /* PerformanceTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceTiming.h; sourceTree = "<group>"; };
 		8AF4E55A11DC5A63000ED3DE /* PerformanceTiming.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PerformanceTiming.idl; sourceTree = "<group>"; };
+		8BD37A67201BB39C0011734A /* ReadableStreamChunk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReadableStreamChunk.h; sourceTree = "<group>"; };
 		8E4C96D81AD4483500365A50 /* JSFetchResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFetchResponse.cpp; sourceTree = "<group>"; };
 		8E4C96D91AD4483500365A50 /* JSFetchResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFetchResponse.h; sourceTree = "<group>"; };
 		8F6756191288B17B0047ACA3 /* EventQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventQueue.h; sourceTree = "<group>"; };
@@ -16472,6 +16474,7 @@
 				9908B0F21BCACF9100ED3572 /* ReadableStreamBYOBReader.js */,
 				41189EF71AD8232800B95672 /* ReadableStreamBYOBRequest.idl */,
 				9908B0F01BCACF9100ED5672 /* ReadableStreamBYOBRequest.js */,
+				8BD37A67201BB39C0011734A /* ReadableStreamChunk.h */,
 				41189EF71AD8232800B90A0D /* ReadableStreamDefaultController.idl */,
 				9908B0F01BCACF9100ED0F65 /* ReadableStreamDefaultController.js */,
 				419FAFAD1ABABCD5005B828B /* ReadableStreamDefaultReader.idl */,
@@ -28899,6 +28902,7 @@
 				A84D827C11D333ED00972990 /* RawDataDocumentParser.h in Headers */,
 				416E6FE81BBD12DF000A6043 /* ReadableByteStreamInternalsBuiltins.h in Headers */,
 				416E6FE91BBD12E5000A6043 /* ReadableStreamBuiltins.h in Headers */,
+				8BD37A68201BB39C0011734A /* ReadableStreamChunk.h in Headers */,
 				4129C9A91F59C56B009D7403 /* ReadableStreamDefaultController.h in Headers */,
 				416E6FE81BBD12DF000A3F64 /* ReadableStreamInternalsBuiltins.h in Headers */,
 				4129C9AF1F59CF5B009D7403 /* ReadableStreamSink.h in Headers */,

Modified: branches/safari-605-branch/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp (227887 => 227888)


--- branches/safari-605-branch/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp	2018-01-31 09:09:35 UTC (rev 227887)
+++ branches/safari-605-branch/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp	2018-01-31 09:09:39 UTC (rev 227888)
@@ -33,6 +33,7 @@
 #include "FetchEvent.h"
 #include "FetchRequest.h"
 #include "FetchResponse.h"
+#include "ReadableStreamChunk.h"
 #include "ResourceRequest.h"
 #include "ServiceWorker.h"
 #include "ServiceWorkerClientIdentifier.h"
@@ -53,16 +54,16 @@
     client->didReceiveResponse(response->resourceResponse());
 
     if (response->hasReadableStreamBody()) {
-        // FIXME: We should send the body as chunks.
-        response->consumeBodyFromReadableStream([client = WTFMove(client)] (ExceptionOr<RefPtr<SharedBuffer>>&& result) mutable {
+        response->consumeBodyFromReadableStream([client = WTFMove(client)] (auto&& result) mutable {
             if (result.hasException()) {
                 client->didFail();
                 return;
             }
 
-            if (auto buffer = result.releaseReturnValue())
-                client->didReceiveData(buffer.releaseNonNull());
-            client->didFinish();
+            if (auto chunk = result.returnValue())
+                client->didReceiveData(SharedBuffer::create(reinterpret_cast<const char*>(chunk->data), chunk->size));
+            else
+                client->didFinish();
         });
         return;
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to