 Chromium Code Reviews
 Chromium Code Reviews Issue 1233573002:
  [Fetch API] Remove DrainingBuffer.  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 1233573002:
  [Fetch API] Remove DrainingBuffer.  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| Index: Source/modules/serviceworkers/RespondWithObserver.cpp | 
| diff --git a/Source/modules/serviceworkers/RespondWithObserver.cpp b/Source/modules/serviceworkers/RespondWithObserver.cpp | 
| index 98b792df6a7c071dd698d8aa11de744a5e32bcbf..e202b2ad6aef41764550755f57a924bb39c7e6e9 100644 | 
| --- a/Source/modules/serviceworkers/RespondWithObserver.cpp | 
| +++ b/Source/modules/serviceworkers/RespondWithObserver.cpp | 
| @@ -61,6 +61,20 @@ const String getMessageForResponseError(WebServiceWorkerResponseError error, con | 
| } // namespace | 
| +namespace { | 
| 
hiroshige
2015/07/24 12:47:03
nit: can we merge two anonymous namespaces (i.e. r
 
yhirano
2015/07/29 08:45:02
Done.
 | 
| + | 
| +class LoaderClient final : public GarbageCollectedFinalized<LoaderClient>, public FetchDataLoader::Client { | 
| 
hiroshige
2015/07/24 12:47:03
nit optional: how about a name like NoopLoaderClie
 
yhirano
2015/07/29 08:45:02
Done.
 | 
| + WTF_MAKE_NONCOPYABLE(LoaderClient); | 
| + USING_GARBAGE_COLLECTED_MIXIN(LoaderClient); | 
| +public: | 
| + LoaderClient() = default; | 
| + void didFetchDataLoadedStream() override {} | 
| + void didFetchDataLoadFailed() override {} | 
| + DEFINE_INLINE_TRACE() { FetchDataLoader::Client::trace(visitor); } | 
| +}; | 
| + | 
| +} // namespace | 
| + | 
| class RespondWithObserver::ThenFunction final : public ScriptFunction { | 
| public: | 
| enum ResolveType { | 
| @@ -189,26 +203,20 @@ void RespondWithObserver::responseWasFulfilled(const ScriptValue& value) | 
| return; | 
| } | 
| - response->lockBody(Body::PassBody); | 
| - if (OwnPtr<DrainingBodyStreamBuffer> buffer = response->createInternalDrainingStream()) { | 
| - WebServiceWorkerResponse webResponse; | 
| - response->populateWebServiceWorkerResponse(webResponse); | 
| - if (RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize)) { | 
| + response->setBodyPassed(); | 
| + WebServiceWorkerResponse webResponse; | 
| + response->populateWebServiceWorkerResponse(webResponse); | 
| + BodyStreamBuffer* buffer = response->internalBodyBuffer(); | 
| + if (buffer->hasBody()) { | 
| + RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); | 
| + if (blobDataHandle) { | 
| webResponse.setBlobDataHandle(blobDataHandle); | 
| - ServiceWorkerGlobalScopeClient::from(executionContext())->didHandleFetchEvent(m_eventID, webResponse); | 
| - m_state = Done; | 
| - return; | 
| + } else { | 
| + Stream* outStream = Stream::create(executionContext(), ""); | 
| + webResponse.setStreamURL(outStream->url()); | 
| + buffer->startLoading(executionContext(), FetchDataLoader::createLoaderAsStream(outStream), new LoaderClient); | 
| } | 
| - Stream* outStream = Stream::create(executionContext(), ""); | 
| - webResponse.setStreamURL(outStream->url()); | 
| - ServiceWorkerGlobalScopeClient::from(executionContext())->didHandleFetchEvent(m_eventID, webResponse); | 
| - FetchDataLoader* loader = FetchDataLoader::createLoaderAsStream(outStream); | 
| - buffer->startLoading(loader, nullptr); | 
| - m_state = Done; | 
| - return; | 
| } | 
| - WebServiceWorkerResponse webResponse; | 
| - response->populateWebServiceWorkerResponse(webResponse); | 
| ServiceWorkerGlobalScopeClient::from(executionContext())->didHandleFetchEvent(m_eventID, webResponse); | 
| m_state = Done; | 
| } |