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

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: incorporated yhirano's comment 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..25a8e5f90f23b130e73cb2fbdea931f9832d6779 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,12 +271,41 @@ Response::Response(ExecutionContext* context, FetchResponseData* response)
m_headers->setGuard(Headers::ResponseGuard);
}
+bool Response::hasBody() const
+{
+ return internalBlobDataHandle() || internalBuffer();
+}
-PassRefPtr<BlobDataHandle> Response::blobDataHandle()
+PassRefPtr<BlobDataHandle> Response::blobDataHandle() const
{
return m_response->blobDataHandle();
}
+BodyStreamBuffer* Response::buffer() const
+{
+ return m_response->buffer();
+}
+
+String Response::contentType() const
+{
+ return m_response->contentType();
+}
+
+PassRefPtr<BlobDataHandle> Response::internalBlobDataHandle() const
+{
+ return m_response->internalBlobDataHandle();
+}
+
+BodyStreamBuffer* Response::internalBuffer() const
+{
+ return m_response->internalBuffer();
+}
+
+String Response::internalContentType() const
+{
+ return m_response->internalContentType();
+}
+
void Response::trace(Visitor* visitor)
{
Body::trace(visitor);

Powered by Google App Engine
This is Rietveld 408576698