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

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

Issue 1233573002: [Fetch API] Remove DrainingBuffer. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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
Index: Source/modules/fetch/Request.cpp
diff --git a/Source/modules/fetch/Request.cpp b/Source/modules/fetch/Request.cpp
index 9f7608476ce4b5d5db127958d8fbd62fb4967380..3995331d210e1063a004c81bf841430cc5de3315 100644
--- a/Source/modules/fetch/Request.cpp
+++ b/Source/modules/fetch/Request.cpp
@@ -70,8 +70,6 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req
exceptionState.throwTypeError("Cannot construct a Request with a Request object that has already been used.");
return nullptr;
}
- // We call createDrainingStream() later and not here, because
- // createDrainingStream() has side effects on |inputRequest|'s body.
temporaryBodyRequest = inputRequest;
}
@@ -186,7 +184,7 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req
headers = r->headers()->clone();
}
// "24. Empty |r|'s request's header list."
- r->clearHeaderList();
+ r->m_request->headerList()->clearList();
// "25. If |r|'s request's mode is no CORS, run these substeps:
if (r->request()->mode() == WebURLRequest::FetchRequestModeNoCORS) {
// "1. If |r|'s request's method is not a simple method, throw a
@@ -229,7 +227,7 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req
// contains no header named `Content-Type`, append
// `Content-Type`/|Content-Type| to |r|'s Headers object. Rethrow any
// exception."
- temporaryBodyBuffer = BodyStreamBuffer::create(FetchBlobDataConsumerHandle::create(scriptState->executionContext(), init.bodyBlobHandle));
+ temporaryBodyBuffer = new BodyStreamBuffer(FetchBlobDataConsumerHandle::create(scriptState->executionContext(), init.bodyBlobHandle));
temporaryBodyRequest = nullptr;
if (!init.bodyBlobHandle->type().isEmpty() && !r->headers()->has("Content-Type", exceptionState)) {
r->headers()->append("Content-Type", init.bodyBlobHandle->type(), exceptionState);
@@ -240,9 +238,9 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req
// "29. Set |r|'s body to |temporaryBody|.
if (temporaryBodyBuffer)
- r->setBuffer(temporaryBodyBuffer);
+ r->m_request->setBuffer(temporaryBodyBuffer);
else if (temporaryBodyRequest)
- r->setBuffer(temporaryBodyRequest->createDrainingStream()->leakBuffer());
+ r->m_request->setBuffer(temporaryBodyRequest->bodyBuffer());
// "30. Set |r|'s MIME type to the result of extracting a MIME type from
// |r|'s request's header list."
@@ -254,9 +252,9 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req
// spec. See https://github.com/whatwg/fetch/issues/61 for details.
if (inputRequest) {
// "1. Set |input|'s body to null."
- inputRequest->setBuffer(nullptr);
+ inputRequest->m_request->setBuffer(new BodyStreamBuffer);
// "2. Set |input|'s used flag."
- inputRequest->lockBody(PassBody);
+ inputRequest->setBodyPassed();
}
// "32. Return |r|."
@@ -293,9 +291,7 @@ Request* Request::create(ScriptState* scriptState, Request* input, const Diction
Request* Request::create(ExecutionContext* context, FetchRequestData* request)
{
- Request* r = new Request(context, request);
- r->suspendIfNeeded();
- return r;
+ return new Request(context, request);
}
Request::Request(ExecutionContext* context, FetchRequestData* request)
@@ -304,21 +300,14 @@ Request::Request(ExecutionContext* context, FetchRequestData* request)
, m_headers(Headers::create(m_request->headerList()))
{
m_headers->setGuard(Headers::RequestGuard);
-
- refreshBody();
}
Request::Request(ExecutionContext* context, FetchRequestData* request, Headers* headers)
- : Body(context) , m_request(request) , m_headers(headers)
-{
- refreshBody();
-}
+ : Body(context) , m_request(request) , m_headers(headers) {}
Request* Request::create(ExecutionContext* context, const WebServiceWorkerRequest& webRequest)
{
- Request* r = new Request(context, webRequest);
- r->suspendIfNeeded();
- return r;
+ return new Request(context, webRequest);
}
Request::Request(ExecutionContext* context, const WebServiceWorkerRequest& webRequest)
@@ -327,8 +316,6 @@ Request::Request(ExecutionContext* context, const WebServiceWorkerRequest& webRe
, m_headers(Headers::create(m_request->headerList()))
{
m_headers->setGuard(Headers::RequestGuard);
-
- refreshBody();
}
String Request::method() const
@@ -477,34 +464,25 @@ Request* Request::clone(ExceptionState& exceptionState)
return nullptr;
}
- if (OwnPtr<DrainingBodyStreamBuffer> buffer = createDrainingStream())
- m_request->setBuffer(buffer->leakBuffer());
-
FetchRequestData* request = m_request->clone(executionContext());
Headers* headers = Headers::create(request->headerList());
headers->setGuard(m_headers->guard());
- Request* r = new Request(executionContext(), request, headers);
- r->suspendIfNeeded();
-
- // Lock the old body and set |body| property to the new one.
- lockBody();
- refreshBody();
- return r;
+ return new Request(executionContext(), request, headers);
}
FetchRequestData* Request::passRequestData()
{
ASSERT(!bodyUsed());
-
- if (OwnPtr<DrainingBodyStreamBuffer> buffer = createDrainingStream())
- m_request->setBuffer(buffer->leakBuffer());
-
- lockBody(PassBody);
+ setBodyPassed();
FetchRequestData* newRequestData = m_request->pass(executionContext());
- refreshBody();
return newRequestData;
}
+bool Request::hasBody() const
+{
+ return bodyBuffer()->hasBody();
+}
+
void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webRequest) const
{
webRequest.setMethod(method());
@@ -523,22 +501,6 @@ void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webReques
// to plumb this information in to here.
}
-void Request::setBuffer(BodyStreamBuffer* buffer)
-{
- m_request->setBuffer(buffer);
- refreshBody();
-}
-
-void Request::refreshBody()
-{
- setBody(m_request->buffer());
-}
-
-void Request::clearHeaderList()
-{
- m_request->headerList()->clearList();
-}
-
String Request::mimeType() const
{
return m_request->mimeType();

Powered by Google App Engine
This is Rietveld 408576698