Index: third_party/WebKit/Source/modules/fetch/FetchRequestData.cpp |
diff --git a/third_party/WebKit/Source/modules/fetch/FetchRequestData.cpp b/third_party/WebKit/Source/modules/fetch/FetchRequestData.cpp |
index 88c6467fdaa6bdad2f832acd5f1074fa0af0a477..260ab32ed29f20fd429f2e9a2b1f2f119639097f 100644 |
--- a/third_party/WebKit/Source/modules/fetch/FetchRequestData.cpp |
+++ b/third_party/WebKit/Source/modules/fetch/FetchRequestData.cpp |
@@ -8,7 +8,9 @@ |
#include "core/dom/ExecutionContext.h" |
#include "core/fetch/ResourceLoaderOptions.h" |
#include "core/loader/ThreadableLoader.h" |
+#include "core/streams/ReadableStream.h" |
#include "modules/fetch/BodyStreamBuffer.h" |
+#include "modules/fetch/DataConsumerHandleUtil.h" |
#include "modules/fetch/DataConsumerTee.h" |
#include "modules/fetch/FetchBlobDataConsumerHandle.h" |
#include "modules/fetch/FetchHeaderList.h" |
@@ -66,8 +68,7 @@ FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) |
FetchRequestData* request = FetchRequestData::cloneExceptBody(); |
if (m_buffer) { |
OwnPtr<FetchDataConsumerHandle> dest1, dest2; |
- // TODO(yhirano): unlock the buffer. |
- DataConsumerTee::create(executionContext, m_buffer->lock(executionContext), &dest1, &dest2); |
+ DataConsumerTee::create(executionContext, m_buffer->releaseHandle(executionContext), &dest1, &dest2); |
m_buffer = new BodyStreamBuffer(dest1.release()); |
request->m_buffer = new BodyStreamBuffer(dest2.release()); |
} |
@@ -77,8 +78,11 @@ FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) |
FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext) |
{ |
FetchRequestData* request = FetchRequestData::cloneExceptBody(); |
- request->m_buffer = m_buffer; |
- m_buffer = nullptr; |
+ if (m_buffer) { |
+ request->m_buffer = m_buffer; |
+ m_buffer = new BodyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); |
+ m_buffer->stream()->setIsDisturbed(); |
+ } |
return request; |
} |