Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Unified Diff: third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp

Issue 2684533002: [WIP] Mojofy respondwith
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698