| Index: Source/modules/fetch/FetchRequestData.cpp | 
| diff --git a/Source/modules/fetch/FetchRequestData.cpp b/Source/modules/fetch/FetchRequestData.cpp | 
| index 0a467dfcd011c52e8df70f6da440d4759bf25e25..5a8cb5139a7ecbab9ee443544da7284df412982c 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()); | 
| @@ -40,19 +40,13 @@ FetchRequestData* FetchRequestData::create(ExecutionContext* executionContext, c | 
| return request; | 
| } | 
|  | 
| -FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) | 
| +FetchRequestData* FetchRequestData::cloneExceptBody() | 
| { | 
| 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; | 
| -    if (m_buffer) { | 
| -        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()); | 
| -    } | 
| request->m_origin = m_origin; | 
| request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag; | 
| request->m_context = m_context; | 
| @@ -64,9 +58,27 @@ FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) | 
| return request; | 
| } | 
|  | 
| +FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) | 
| +{ | 
| +    FetchRequestData* request = FetchRequestData::cloneExceptBody(); | 
| +    if (m_buffer->hasBody()) { | 
| +        OwnPtr<FetchDataConsumerHandle> dest1, dest2; | 
| +        // 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; | 
| +    } | 
| +    return request; | 
| +} | 
| + | 
| FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext) | 
| { | 
| -    return clone(executionContext); | 
| +    FetchRequestData* request = FetchRequestData::cloneExceptBody(); | 
| +    request->m_buffer = m_buffer; | 
| +    m_buffer = new BodyStreamBuffer; | 
| +    return request; | 
| } | 
|  | 
| FetchRequestData::~FetchRequestData() | 
| @@ -82,6 +94,7 @@ FetchRequestData::FetchRequestData() | 
| , m_mode(WebURLRequest::FetchRequestModeNoCORS) | 
| , m_credentials(WebURLRequest::FetchCredentialsModeOmit) | 
| , m_responseTainting(BasicTainting) | 
| +    , m_buffer(new BodyStreamBuffer) | 
| { | 
| } | 
|  | 
|  |