Chromium Code Reviews| Index: Source/modules/fetch/FetchResponseData.cpp |
| diff --git a/Source/modules/fetch/FetchResponseData.cpp b/Source/modules/fetch/FetchResponseData.cpp |
| index a5054184f1e2e22928bd57fb541f1434ddc80f4b..59a0fa1d9b9f1cff8d8465f96626c8a66d0201e5 100644 |
| --- a/Source/modules/fetch/FetchResponseData.cpp |
| +++ b/Source/modules/fetch/FetchResponseData.cpp |
| @@ -167,23 +167,25 @@ FetchResponseData* FetchResponseData::clone(ExecutionContext* executionContext) |
| break; |
| case DefaultType: { |
| ASSERT(!m_internalResponse); |
| - if (!m_buffer) |
| - return newResponse; |
| - |
| - OwnPtr<WebDataConsumerHandle> handle1; |
| - OwnPtr<WebDataConsumerHandle> handle2; |
| - DataConsumerTee::create(executionContext, m_buffer->releaseHandle(), &handle1, &handle2); |
| - m_buffer = BodyStreamBuffer::create(createFetchDataConsumerHandleFromWebHandle(handle1.release())); |
| - newResponse->m_buffer = BodyStreamBuffer::create(createFetchDataConsumerHandleFromWebHandle(handle2.release())); |
| + if (m_buffer->hasBody()) { |
| + OwnPtr<WebDataConsumerHandle> handle1, handle2; |
| + // TODO(yhirano): unlock the buffer appropriately. |
| + DataConsumerTee::create(executionContext, m_buffer->lock(executionContext), &handle1, &handle2); |
| + m_buffer = new BodyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(handle1.release())); |
| + newResponse->m_buffer = new BodyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(handle2.release())); |
| + } else { |
| + m_buffer = new BodyStreamBuffer; |
| + newResponse->m_buffer = new BodyStreamBuffer; |
|
hiroshige
2015/07/24 12:47:03
Do we need these two lines? (I'm not sure about th
yhirano
2015/07/29 08:45:02
Done.
|
| + } |
| break; |
| } |
| case ErrorType: |
| ASSERT(!m_internalResponse); |
| - ASSERT(!m_buffer); |
| + ASSERT(!m_buffer->hasBody()); |
| break; |
| case OpaqueType: |
| ASSERT(m_internalResponse); |
| - ASSERT(!m_buffer); |
| + ASSERT(!m_buffer->hasBody()); |
| ASSERT(m_internalResponse->m_type == DefaultType); |
| newResponse->m_internalResponse = m_internalResponse->clone(executionContext); |
| break; |
| @@ -214,6 +216,7 @@ FetchResponseData::FetchResponseData(Type type, unsigned short status, AtomicStr |
| , m_status(status) |
| , m_statusMessage(statusMessage) |
| , m_headerList(FetchHeaderList::create()) |
| + , m_buffer(new BodyStreamBuffer) |
| { |
| } |