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

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

Issue 2703343002: ServiceWorker: Use mojo's data pipe for respondWith(stream) (Closed)
Patch Set: IFRAME_URL -> SCOPE 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 e2a70db1e29ab803780f0bea36a201533f7d6f9a..c0b66eff6a942489d95cc59012da3bf85d8bd706 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
@@ -113,17 +113,23 @@ bool IsClientRequest(WebURLRequest::FrameType frame_type,
request_context == WebURLRequest::kRequestContextWorker;
}
-class NoopLoaderClient final
- : public GarbageCollectedFinalized<NoopLoaderClient>,
+class FetchLoaderClient final
haraken 2017/04/13 05:03:44 Would it be possible to remove this wrapper class
haraken 2017/04/13 05:05:14 Correction: It would be nicer if we can remove bot
shimazu 2017/04/18 01:50:05 IIUC, WebServiceWorkerStreamHandle cannot inherit
+ : public GarbageCollectedFinalized<FetchLoaderClient>,
public FetchDataLoader::Client {
- WTF_MAKE_NONCOPYABLE(NoopLoaderClient);
- USING_GARBAGE_COLLECTED_MIXIN(NoopLoaderClient);
+ WTF_MAKE_NONCOPYABLE(FetchLoaderClient);
+ USING_GARBAGE_COLLECTED_MIXIN(FetchLoaderClient);
public:
- NoopLoaderClient() = default;
- void DidFetchDataLoadedStream() override {}
- void DidFetchDataLoadFailed() override {}
+ FetchLoaderClient(std::unique_ptr<WebServiceWorkerStreamHandle> handle)
haraken 2017/04/13 05:03:44 Add explicit.
shimazu 2017/04/18 01:50:05 Done.
+ : handle_(std::move(handle)) {}
+
+ void DidFetchDataLoadedDataPipe() override { handle_->Completed(); }
+ void DidFetchDataLoadFailed() override { handle_->Aborted(); }
+
DEFINE_INLINE_TRACE() { FetchDataLoader::Client::Trace(visitor); }
+
+ private:
+ std::unique_ptr<WebServiceWorkerStreamHandle> handle_;
};
} // namespace
@@ -154,7 +160,8 @@ void FetchRespondWithObserver::OnResponseRejected(
WebServiceWorkerResponse web_response;
web_response.SetError(error);
ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
- ->RespondToFetchEvent(event_id_, web_response, event_dispatch_time_);
+ ->RespondToFetchEventWithResponse(event_id_, web_response,
+ event_dispatch_time_);
}
void FetchRespondWithObserver::OnResponseFulfilled(const ScriptValue& value) {
@@ -222,16 +229,35 @@ void FetchRespondWithObserver::OnResponseFulfilled(const ScriptValue& value) {
RefPtr<BlobDataHandle> blob_data_handle = buffer->DrainAsBlobDataHandle(
BytesConsumer::BlobSizePolicy::kAllowBlobWithInvalidSize);
if (blob_data_handle) {
+ // Handle the blob response.
web_response.SetBlobDataHandle(blob_data_handle);
+ ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
+ ->RespondToFetchEventWithResponse(event_id_, web_response,
+ event_dispatch_time_);
+ return;
} else {
falken 2017/04/12 08:00:16 else isn't needed after the if() { return }
shimazu 2017/04/18 01:50:05 Done.
- Stream* out_stream = Stream::Create(GetExecutionContext(), "");
- web_response.SetStreamURL(out_stream->Url());
- buffer->StartLoading(FetchDataLoader::CreateLoaderAsStream(out_stream),
- new NoopLoaderClient);
+ // Handle the stream response.
+ mojo::DataPipe data_pipe;
+ DCHECK(data_pipe.producer_handle.is_valid());
+ DCHECK(data_pipe.consumer_handle.is_valid());
+
+ std::unique_ptr<WebServiceWorkerStreamHandle> stream_handle =
+ WTF::MakeUnique<WebServiceWorkerStreamHandle>(
+ std::move(data_pipe.consumer_handle));
+ ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
+ ->RespondToFetchEventWithResponseStream(event_id_, web_response,
+ stream_handle.get(),
+ event_dispatch_time_);
+
+ buffer->StartLoading(FetchDataLoader::CreateLoaderAsDataPipe(
+ std::move(data_pipe.producer_handle)),
+ new FetchLoaderClient(std::move(stream_handle)));
+ return;
}
}
ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
- ->RespondToFetchEvent(event_id_, web_response, event_dispatch_time_);
+ ->RespondToFetchEventWithResponse(event_id_, web_response,
+ event_dispatch_time_);
}
void FetchRespondWithObserver::OnNoResponse() {

Powered by Google App Engine
This is Rietveld 408576698