| Index: Source/modules/fetch/FetchRequestData.cpp
|
| diff --git a/Source/modules/fetch/FetchRequestData.cpp b/Source/modules/fetch/FetchRequestData.cpp
|
| index 0a467dfcd011c52e8df70f6da440d4759bf25e25..7c58b55dc3727b0ae04dd40736d7b8f561b07b71 100644
|
| --- a/Source/modules/fetch/FetchRequestData.cpp
|
| +++ b/Source/modules/fetch/FetchRequestData.cpp
|
| @@ -31,7 +31,7 @@ FetchRequestData* FetchRequestData::create(ExecutionContext* executionContext, c
|
| for (HTTPHeaderMap::const_iterator it = webRequest.headers().begin(); it != webRequest.headers().end(); ++it)
|
| request->m_headerList->append(it->key, it->value);
|
| if (webRequest.blobDataHandle())
|
| - request->setBuffer(BodyStreamBuffer::create(FetchBlobDataConsumerHandle::create(executionContext, webRequest.blobDataHandle())));
|
| + request->setBuffer(new BodyStreamBuffer(FetchBlobDataConsumerHandle::create(executionContext, webRequest.blobDataHandle())));
|
| request->setContext(webRequest.requestContext());
|
| request->m_referrer.setURL(webRequest.referrer());
|
| request->setMode(webRequest.mode());
|
| @@ -47,11 +47,15 @@ FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext)
|
| request->m_method = m_method;
|
| request->m_headerList = m_headerList->clone();
|
| request->m_unsafeRequestFlag = m_unsafeRequestFlag;
|
| - if (m_buffer) {
|
| + if (m_buffer->hasBody()) {
|
| OwnPtr<FetchDataConsumerHandle> dest1, dest2;
|
| - DataConsumerTee::create(executionContext, m_buffer->releaseHandle(), &dest1, &dest2);
|
| - m_buffer = BodyStreamBuffer::create(dest1.release());
|
| - request->m_buffer = BodyStreamBuffer::create(dest2.release());
|
| + // TODO(yhirano): unlock the buffer.
|
| + DataConsumerTee::create(executionContext, m_buffer->lock(executionContext), &dest1, &dest2);
|
| + m_buffer = new BodyStreamBuffer(dest1.release());
|
| + request->m_buffer = new BodyStreamBuffer(dest2.release());
|
| + } else {
|
| + m_buffer = new BodyStreamBuffer;
|
| + request->m_buffer = new BodyStreamBuffer;
|
| }
|
| request->m_origin = m_origin;
|
| request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag;
|
| @@ -66,7 +70,22 @@ FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext)
|
|
|
| FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext)
|
| {
|
| - return clone(executionContext);
|
| + FetchRequestData* request = FetchRequestData::create();
|
| + request->m_url = m_url;
|
| + request->m_method = m_method;
|
| + request->m_headerList = m_headerList->clone();
|
| + request->m_unsafeRequestFlag = m_unsafeRequestFlag;
|
| + request->m_buffer = m_buffer;
|
| + m_buffer = new BodyStreamBuffer;
|
| + request->m_origin = m_origin;
|
| + request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag;
|
| + request->m_context = m_context;
|
| + request->m_referrer = m_referrer;
|
| + request->m_mode = m_mode;
|
| + request->m_credentials = m_credentials;
|
| + request->m_responseTainting = m_responseTainting;
|
| + request->m_mimeType = m_mimeType;
|
| + return request;
|
| }
|
|
|
| FetchRequestData::~FetchRequestData()
|
| @@ -82,6 +101,7 @@ FetchRequestData::FetchRequestData()
|
| , m_mode(WebURLRequest::FetchRequestModeNoCORS)
|
| , m_credentials(WebURLRequest::FetchCredentialsModeOmit)
|
| , m_responseTainting(BasicTainting)
|
| + , m_buffer(new BodyStreamBuffer)
|
| {
|
| }
|
|
|
|
|