| 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) | 
| { | 
| } | 
|  | 
|  |