Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1509)

Unified Diff: Source/modules/fetch/FetchRequestData.cpp

Issue 1192913007: Change BodyStreamBuffer to be FetchDataConsumerHandle-based and enable backpressure in Fetch API (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/modules/fetch/FetchRequestData.h ('k') | Source/modules/fetch/FetchResponseData.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/fetch/FetchRequestData.cpp
diff --git a/Source/modules/fetch/FetchRequestData.cpp b/Source/modules/fetch/FetchRequestData.cpp
index 94178f8d14c833dfb120e873553321ce7c371ef6..0a467dfcd011c52e8df70f6da440d4759bf25e25 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,15 +40,19 @@ FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webReq
return request;
}
-FetchRequestData* FetchRequestData::clone() const
+FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext)
{
- // TODO(yhirano): This method will be destructive.
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_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 +64,9 @@ FetchRequestData* FetchRequestData::clone() const
return request;
}
-FetchRequestData* FetchRequestData::pass() const
+FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext)
{
- // TODO(yhirano): This method will be destructive.
- return clone();
+ return clone(executionContext);
}
FetchRequestData::~FetchRequestData()
@@ -80,6 +87,7 @@ FetchRequestData::FetchRequestData()
DEFINE_TRACE(FetchRequestData)
{
+ visitor->trace(m_buffer);
visitor->trace(m_headerList);
}
« no previous file with comments | « Source/modules/fetch/FetchRequestData.h ('k') | Source/modules/fetch/FetchResponseData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698