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