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

Unified Diff: Source/modules/fetch/Response.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, 6 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
Index: Source/modules/fetch/Response.cpp
diff --git a/Source/modules/fetch/Response.cpp b/Source/modules/fetch/Response.cpp
index 0863925b33142597ae7fa5f517bdbcfa4bc16b8a..ff1e41924ee600b62eccd36f17b94be6609103fb 100644
--- a/Source/modules/fetch/Response.cpp
+++ b/Source/modules/fetch/Response.cpp
@@ -11,6 +11,8 @@
#include "core/dom/DOMArrayBufferView.h"
#include "core/fileapi/Blob.h"
#include "core/html/DOMFormData.h"
+#include "modules/fetch/BodyStreamBuffer.h"
+#include "modules/fetch/FetchBlobDataConsumerHandle.h"
#include "modules/fetch/ResponseInit.h"
#include "platform/network/FormData.h"
#include "platform/network/HTTPHeaderMap.h"
@@ -21,7 +23,7 @@ namespace blink {
namespace {
-FetchResponseData* createFetchResponseDataFromWebResponse(const WebServiceWorkerResponse& webResponse)
+FetchResponseData* createFetchResponseDataFromWebResponse(ExecutionContext* executionContext, const WebServiceWorkerResponse& webResponse)
{
FetchResponseData* response = 0;
if (200 <= webResponse.status() && webResponse.status() < 300)
@@ -37,7 +39,7 @@ FetchResponseData* createFetchResponseDataFromWebResponse(const WebServiceWorker
response->headerList()->append(i->key, i->value);
}
- response->setBlobDataHandle(webResponse.blobDataHandle());
+ response->replaceBodyStreamBuffer(BodyStreamBuffer2::create(FetchBlobDataConsumerHandle::create(executionContext, webResponse.blobDataHandle())));
// Filter the response according to |webResponse|'s ResponseType.
switch (webResponse.responseType()) {
@@ -205,8 +207,9 @@ Response* Response::create(ExecutionContext* context, Blob* body, const Response
// Step 3, Blob:
// "If object's type attribute is not the empty byte sequence, set
// Content-Type to its value."
- r->m_response->setBlobDataHandle(body->blobDataHandle());
- r->setBody(body->blobDataHandle());
+ BodyStreamBuffer2* buffer = BodyStreamBuffer2::create(FetchBlobDataConsumerHandle::create(context, body->blobDataHandle()));
+ r->m_response->replaceBodyStreamBuffer(buffer);
+ r->setBody(buffer);
if (!body->type().isEmpty() && !r->m_response->headerList()->has("Content-Type"))
r->m_response->headerList()->append("Content-Type", body->type());
}
@@ -228,7 +231,7 @@ Response* Response::create(ExecutionContext* context, FetchResponseData* respons
Response* Response::create(ExecutionContext* context, const WebServiceWorkerResponse& webResponse)
{
- FetchResponseData* responseData = createFetchResponseDataFromWebResponse(webResponse);
+ FetchResponseData* responseData = createFetchResponseDataFromWebResponse(context, webResponse);
Response* r = new Response(context, responseData);
r->suspendIfNeeded();
return r;
@@ -328,11 +331,10 @@ Response* Response::clone(ExceptionState& exceptionState)
return nullptr;
}
if (isBodyConsumed()) {
- BodyStreamBuffer* drainingStream = createDrainingStream();
- m_response->replaceBodyStreamBuffer(drainingStream);
+ m_response->replaceBodyStreamBuffer(createDrainingStream());
}
- FetchResponseData* response = m_response->clone();
+ FetchResponseData* response = m_response->clone(executionContext());
Headers* headers = Headers::create(response->headerList());
headers->setGuard(m_headers->guard());
Response* r = new Response(executionContext(), response, headers);
@@ -376,15 +378,10 @@ Response::Response(ExecutionContext* context, FetchResponseData* response, Heade
bool Response::hasBody() const
{
- return internalBlobDataHandle() || internalBuffer();
+ return internalBuffer();
}
-PassRefPtr<BlobDataHandle> Response::blobDataHandle() const
-{
- return m_response->blobDataHandle();
-}
-
-BodyStreamBuffer* Response::buffer() const
+BodyStreamBuffer2* Response::buffer() const
{
return m_response->buffer();
}
@@ -394,12 +391,7 @@ String Response::mimeType() const
return m_response->mimeType();
}
-PassRefPtr<BlobDataHandle> Response::internalBlobDataHandle() const
-{
- return m_response->internalBlobDataHandle();
-}
-
-BodyStreamBuffer* Response::internalBuffer() const
+BodyStreamBuffer2* Response::internalBuffer() const
{
return m_response->internalBuffer();
}
@@ -411,10 +403,7 @@ String Response::internalMIMEType() const
void Response::refreshBody()
{
- if (m_response->buffer())
- setBody(m_response->buffer());
- else
- setBody(m_response->blobDataHandle());
+ setBody(m_response->buffer());
}
DEFINE_TRACE(Response)

Powered by Google App Engine
This is Rietveld 408576698