Chromium Code Reviews| Index: Source/modules/fetch/FetchRequestData.cpp |
| diff --git a/Source/modules/fetch/FetchRequestData.cpp b/Source/modules/fetch/FetchRequestData.cpp |
| index 94178f8d14c833dfb120e873553321ce7c371ef6..375f2c3a9802f7100f831d1234934db54502c0fc 100644 |
| --- a/Source/modules/fetch/FetchRequestData.cpp |
| +++ b/Source/modules/fetch/FetchRequestData.cpp |
| @@ -8,6 +8,9 @@ |
| #include "core/dom/ExecutionContext.h" |
| #include "core/fetch/ResourceLoaderOptions.h" |
| #include "core/loader/ThreadableLoader.h" |
| +#include "modules/fetch/BodyStreamBuffer.h" |
| +#include "modules/fetch/DataConsumerTee.h" |
| +#include "modules/fetch/FetchBlobDataConsumerHandle.h" |
| #include "modules/fetch/FetchHeaderList.h" |
| #include "platform/network/ResourceRequest.h" |
| #include "public/platform/WebServiceWorkerRequest.h" |
| @@ -20,14 +23,15 @@ FetchRequestData* FetchRequestData::create() |
| return new FetchRequestData(); |
| } |
| -FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webRequest) |
| +FetchRequestData* FetchRequestData::create(ExecutionContext* executionContext, const WebServiceWorkerRequest& webRequest) |
| { |
| FetchRequestData* request = FetchRequestData::create(); |
| request->m_url = webRequest.url(); |
| request->m_method = webRequest.method(); |
| for (HTTPHeaderMap::const_iterator it = webRequest.headers().begin(); it != webRequest.headers().end(); ++it) |
| request->m_headerList->append(it->key, it->value); |
| - request->m_blobDataHandle = webRequest.blobDataHandle(); |
| + if (webRequest.blobDataHandle()) |
| + request->setBuffer(BodyStreamBuffer::create(FetchBlobDataConsumerHandle::create(executionContext, webRequest.blobDataHandle()))); |
| request->setContext(webRequest.requestContext()); |
| request->m_referrer.setURL(webRequest.referrer()); |
| request->setMode(webRequest.mode()); |
| @@ -36,7 +40,7 @@ FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webReq |
| return request; |
| } |
| -FetchRequestData* FetchRequestData::clone() const |
| +FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) |
| { |
| // TODO(yhirano): This method will be destructive. |
|
yhirano
2015/07/06 06:14:00
Please remove this comment.
hiroshige
2015/07/07 03:50:57
Done.
|
| FetchRequestData* request = FetchRequestData::create(); |
| @@ -44,7 +48,12 @@ FetchRequestData* FetchRequestData::clone() const |
| request->m_method = m_method; |
| request->m_headerList = m_headerList->clone(); |
| request->m_unsafeRequestFlag = m_unsafeRequestFlag; |
| - request->m_blobDataHandle = m_blobDataHandle; |
| + 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; |
| @@ -56,10 +65,10 @@ FetchRequestData* FetchRequestData::clone() const |
| return request; |
| } |
| -FetchRequestData* FetchRequestData::pass() const |
| +FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext) |
| { |
| // TODO(yhirano): This method will be destructive. |
|
hiroshige
2015/07/07 03:50:57
Also removed this.
|
| - return clone(); |
| + return clone(executionContext); |
| } |
| FetchRequestData::~FetchRequestData() |
| @@ -80,6 +89,7 @@ FetchRequestData::FetchRequestData() |
| DEFINE_TRACE(FetchRequestData) |
| { |
| + visitor->trace(m_buffer); |
| visitor->trace(m_headerList); |
| } |