Chromium Code Reviews| 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; |
|
hiroshige
2015/07/24 12:47:03
same as the FetchResponseData::clone()'s comment.
yhirano
2015/07/29 08:45:02
Done.
|
| } |
| 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) |
| { |
| } |