 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 0c2884931d38c5d312c58b075686ef42c5cab3ec..495464a19722e7bf6ec35658ad8275bff31d1f67 100644 | 
| --- a/Source/modules/serviceworkers/RespondWithObserver.cpp | 
| +++ b/Source/modules/serviceworkers/RespondWithObserver.cpp | 
| @@ -24,6 +24,20 @@ | 
| namespace blink { | 
| +namespace { | 
| + | 
| +class LoaderClient final : public GarbageCollectedFinalized<LoaderClient>, public FetchDataLoader::Client { | 
| + 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 { | 
| @@ -150,26 +164,22 @@ 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()) { | 
| + OwnPtr<FetchDataConsumerHandle> handle = buffer->lock(executionContext()); | 
| + RefPtr<BlobDataHandle> blobDataHandle = handle->obtainReader(nullptr)->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); | 
| + buffer->unlock(handle.release()); | 
| 
hiroshige
2015/07/21 12:14:01
Same for the comment in FetchManager.cpp.
 
yhirano
2015/07/22 09:42:45
Done.
 | 
| + 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; | 
| } |