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

Unified Diff: Source/modules/serviceworkers/Response.cpp

Issue 786893004: [ServiceWorker] Use BodyStreamBuffer as the body data of the Response object. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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/serviceworkers/Response.cpp
diff --git a/Source/modules/serviceworkers/Response.cpp b/Source/modules/serviceworkers/Response.cpp
index 8ca7b0519a698f900df9d8e965ad1115d9fb042a..657313b8e30fa6ce8ee8fcc51c0e9a89704551a0 100644
--- a/Source/modules/serviceworkers/Response.cpp
+++ b/Source/modules/serviceworkers/Response.cpp
@@ -173,9 +173,9 @@ Response* Response::create(ExecutionContext* context, const WebServiceWorkerResp
return r;
}
-Response* Response::create(const Response& copyFrom)
+Response* Response::createClone(const Response& cloneFrom)
{
- Response* r = new Response(copyFrom);
+ Response* r = new Response(cloneFrom);
r->suspendIfNeeded();
return r;
}
@@ -235,7 +235,12 @@ Response* Response::clone(ExceptionState& exceptionState) const
exceptionState.throwTypeError("Response body is already used");
return nullptr;
}
- return Response::create(*this);
+ if (streamAccessed()) {
+ // FIXME: Support clone() of the stream accessed Response.
+ exceptionState.throwTypeError("clone() of the Response which .body is accessed is not supported.");
+ return nullptr;
+ }
+ return Response::createClone(*this);
}
void Response::populateWebServiceWorkerResponse(WebServiceWorkerResponse& response)
@@ -251,10 +256,10 @@ Response::Response(ExecutionContext* context)
m_headers->setGuard(Headers::ResponseGuard);
}
-Response::Response(const Response& copy_from)
- : Body(copy_from)
- , m_response(copy_from.m_response)
- , m_headers(copy_from.m_headers->createCopy())
+Response::Response(const Response& clone_from)
+ : Body(clone_from)
+ , m_response(clone_from.m_response->clone())
+ , m_headers(Headers::create(m_response->headerList()))
{
}
@@ -266,10 +271,19 @@ Response::Response(ExecutionContext* context, FetchResponseData* response)
m_headers->setGuard(Headers::ResponseGuard);
}
+bool Response::hasBody(bool internal) const
+{
+ return blobDataHandle(internal) || buffer(internal);
+}
+
+PassRefPtr<BlobDataHandle> Response::blobDataHandle(bool internal) const
+{
+ return m_response->blobDataHandle(internal);
+}
-PassRefPtr<BlobDataHandle> Response::blobDataHandle()
+BodyStreamBuffer* Response::buffer(bool internal) const
{
- return m_response->blobDataHandle();
+ return m_response->buffer(internal);
}
void Response::trace(Visitor* visitor)

Powered by Google App Engine
This is Rietveld 408576698