PassOwnPtr<FetchDataConsumerHandle> FetchBlobDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle, LoaderFactory* loaderFactory) { if (!blobDataHandle) return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle()); return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHandle, loaderFactory)); }
std::unique_ptr<FetchDataConsumerHandle> FetchBlobDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle) { if (!blobDataHandle) return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle()); return wrapUnique(new FetchBlobDataConsumerHandle(executionContext, blobDataHandle, new DefaultLoaderFactory)); }
FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext) { FetchRequestData* request = FetchRequestData::cloneExceptBody(); if (m_buffer) { request->m_buffer = m_buffer; m_buffer = new BodyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); m_buffer->stream()->setIsDisturbed(); } return request; }
PassOwnPtr<FetchDataConsumerHandle> BodyStreamBuffer::lock(ExecutionContext* executionContext) { ASSERT(!isLocked()); ++m_lockLevel; m_reader = nullptr; OwnPtr<FetchDataConsumerHandle> handle = m_handle.release(); if (ReadableStream::Closed == m_stream->stateInternal()) return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle()); if (ReadableStream::Errored == m_stream->stateInternal()) return createFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorDataConsumerHandle()); TrackExceptionState exceptionState; m_streamReader = m_stream->getBytesReader(executionContext, exceptionState); return handle.release(); }
FetchRequestData* FetchRequestData::pass(ScriptState* scriptState) { FetchRequestData* request = FetchRequestData::cloneExceptBody(); if (m_buffer) { request->m_buffer = m_buffer; m_buffer = new BodyStreamBuffer(scriptState, createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); m_buffer->closeAndLockAndDisturb(); } return request; }