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;
}