| Index: third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| index 46bf173b5eb584c9f76d33900ba450af7d34dc49..bd56379f080b6cce88f8d41e97789a90af8f6986 100644
|
| --- a/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| @@ -151,7 +151,8 @@ void FetchRespondWithObserver::onResponseRejected(
|
| WebServiceWorkerResponse webResponse;
|
| webResponse.setError(error);
|
| ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| - ->respondToFetchEvent(m_eventID, webResponse, m_eventDispatchTime);
|
| + ->respondToFetchEventWithResponse(m_eventID, webResponse,
|
| + m_eventDispatchTime);
|
| }
|
|
|
| void FetchRespondWithObserver::onResponseFulfilled(const ScriptValue& value) {
|
| @@ -213,20 +214,36 @@ void FetchRespondWithObserver::onResponseFulfilled(const ScriptValue& value) {
|
| WebServiceWorkerResponse webResponse;
|
| response->populateWebServiceWorkerResponse(webResponse);
|
| BodyStreamBuffer* buffer = response->internalBodyBuffer();
|
| - if (buffer) {
|
| + if (!buffer) {
|
| + ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| + ->respondToFetchEventWithResponse(m_eventID, webResponse,
|
| + m_eventDispatchTime);
|
| + } else {
|
| RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(
|
| BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize);
|
| if (blobDataHandle) {
|
| webResponse.setBlobDataHandle(blobDataHandle);
|
| + ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| + ->respondToFetchEventWithResponse(m_eventID, webResponse,
|
| + m_eventDispatchTime);
|
| } else {
|
| - Stream* outStream = Stream::create(getExecutionContext(), "");
|
| - webResponse.setStreamURL(outStream->url());
|
| - buffer->startLoading(FetchDataLoader::createLoaderAsStream(outStream),
|
| + MojoCreateDataPipeOptions options;
|
| + options.struct_size = sizeof(MojoCreateDataPipeOptions);
|
| + options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
|
| + options.element_num_bytes = 1;
|
| + options.capacity_num_bytes = 512 * 1024;
|
| + mojo::DataPipe data_pipe(options);
|
| + DCHECK(data_pipe.producer_handle.is_valid());
|
| + DCHECK(data_pipe.consumer_handle.is_valid());
|
| + buffer->startLoading(FetchDataLoader::createLoaderAsDataPipe(
|
| + std::move(data_pipe.producer_handle)),
|
| new NoopLoaderClient);
|
| + ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| + ->respondToFetchEventWithResponseStream(
|
| + m_eventID, webResponse, std::move(data_pipe.consumer_handle),
|
| + m_eventDispatchTime);
|
| }
|
| }
|
| - ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| - ->respondToFetchEvent(m_eventID, webResponse, m_eventDispatchTime);
|
| }
|
|
|
| void FetchRespondWithObserver::onNoResponse() {
|
|
|