Chromium Code Reviews| Index: Source/core/xml/XMLHttpRequest.cpp |
| diff --git a/Source/core/xml/XMLHttpRequest.cpp b/Source/core/xml/XMLHttpRequest.cpp |
| index 2a585245b23d0b254675ac78d083214150baeb33..4812beb4a7f97500d52328b9cdadeca268a30996 100644 |
| --- a/Source/core/xml/XMLHttpRequest.cpp |
| +++ b/Source/core/xml/XMLHttpRequest.cpp |
| @@ -657,6 +657,8 @@ void XMLHttpRequest::send(Document* document, ExceptionState& exceptionState) |
| if (!initSend(exceptionState)) |
| return; |
| + RefPtr<FormData> httpBody; |
| + |
| if (areMethodAndURLValidForSend()) { |
| if (getRequestHeader("Content-Type").isEmpty()) { |
| // FIXME: this should include the charset used for encoding. |
| @@ -668,12 +670,12 @@ void XMLHttpRequest::send(Document* document, ExceptionState& exceptionState) |
| String body = createMarkup(document); |
| // FIXME: This should use value of document.inputEncoding to determine the encoding to use. |
| - m_requestEntityBody = FormData::create(UTF8Encoding().encode(body, WTF::EntitiesForUnencodables)); |
| + httpBody = FormData::create(UTF8Encoding().encode(body, WTF::EntitiesForUnencodables)); |
| if (m_upload) |
| - m_requestEntityBody->setAlwaysStream(true); |
| + httpBody->setAlwaysStream(true); |
| } |
| - createRequest(exceptionState); |
| + createRequest(httpBody.release(), exceptionState); |
| } |
| void XMLHttpRequest::send(const String& body, ExceptionState& exceptionState) |
| @@ -683,6 +685,8 @@ void XMLHttpRequest::send(const String& body, ExceptionState& exceptionState) |
| if (!initSend(exceptionState)) |
| return; |
| + RefPtr<FormData> httpBody; |
| + |
| if (!body.isNull() && areMethodAndURLValidForSend()) { |
| String contentType = getRequestHeader("Content-Type"); |
| if (contentType.isEmpty()) { |
| @@ -692,12 +696,12 @@ void XMLHttpRequest::send(const String& body, ExceptionState& exceptionState) |
| m_requestHeaders.set("Content-Type", AtomicString(contentType)); |
| } |
| - m_requestEntityBody = FormData::create(UTF8Encoding().encode(body, WTF::EntitiesForUnencodables)); |
| + httpBody = FormData::create(UTF8Encoding().encode(body, WTF::EntitiesForUnencodables)); |
| if (m_upload) |
| - m_requestEntityBody->setAlwaysStream(true); |
| + httpBody->setAlwaysStream(true); |
| } |
| - createRequest(exceptionState); |
| + createRequest(httpBody.release(), exceptionState); |
| } |
| void XMLHttpRequest::send(Blob* body, ExceptionState& exceptionState) |
| @@ -707,6 +711,8 @@ void XMLHttpRequest::send(Blob* body, ExceptionState& exceptionState) |
| if (!initSend(exceptionState)) |
| return; |
| + RefPtr<FormData> httpBody; |
| + |
| if (areMethodAndURLValidForSend()) { |
| if (getRequestHeader("Content-Type").isEmpty()) { |
| const String& blobType = body->type(); |
| @@ -719,21 +725,21 @@ void XMLHttpRequest::send(Blob* body, ExceptionState& exceptionState) |
| } |
| // FIXME: add support for uploading bundles. |
| - m_requestEntityBody = FormData::create(); |
| + httpBody = FormData::create(); |
| if (body->hasBackingFile()) { |
| File* file = toFile(body); |
| if (!file->path().isEmpty()) |
| - m_requestEntityBody->appendFile(file->path()); |
| + httpBody->appendFile(file->path()); |
| else if (!file->fileSystemURL().isEmpty()) |
| - m_requestEntityBody->appendFileSystemURL(file->fileSystemURL()); |
| + httpBody->appendFileSystemURL(file->fileSystemURL()); |
| else |
| ASSERT_NOT_REACHED(); |
| } else { |
| - m_requestEntityBody->appendBlob(body->uuid(), body->blobDataHandle()); |
| + httpBody->appendBlob(body->uuid(), body->blobDataHandle()); |
| } |
| } |
| - createRequest(exceptionState); |
| + createRequest(httpBody.release(), exceptionState); |
| } |
| void XMLHttpRequest::send(DOMFormData* body, ExceptionState& exceptionState) |
| @@ -743,16 +749,18 @@ void XMLHttpRequest::send(DOMFormData* body, ExceptionState& exceptionState) |
| if (!initSend(exceptionState)) |
| return; |
| + RefPtr<FormData> httpBody; |
| + |
| if (areMethodAndURLValidForSend()) { |
| - m_requestEntityBody = body->createMultiPartFormData(body->encoding()); |
| + httpBody = body->createMultiPartFormData(body->encoding()); |
| if (getRequestHeader("Content-Type").isEmpty()) { |
| - AtomicString contentType = AtomicString("multipart/form-data; boundary=", AtomicString::ConstructFromLiteral) + m_requestEntityBody->boundary().data(); |
| + AtomicString contentType = AtomicString("multipart/form-data; boundary=", AtomicString::ConstructFromLiteral) + httpBody->boundary().data(); |
| setRequestHeaderInternal("Content-Type", contentType); |
| } |
| } |
| - createRequest(exceptionState); |
| + createRequest(httpBody.release(), exceptionState); |
| } |
| void XMLHttpRequest::send(ArrayBuffer* body, ExceptionState& exceptionState) |
| @@ -781,23 +789,24 @@ void XMLHttpRequest::sendBytesData(const void* data, size_t length, ExceptionSta |
| if (!initSend(exceptionState)) |
| return; |
| + RefPtr<FormData> httpBody; |
| + |
| if (areMethodAndURLValidForSend()) { |
| - m_requestEntityBody = FormData::create(data, length); |
| + httpBody = FormData::create(data, length); |
| if (m_upload) |
| - m_requestEntityBody->setAlwaysStream(true); |
| + httpBody->setAlwaysStream(true); |
| } |
| - createRequest(exceptionState); |
| + createRequest(httpBody.release(), exceptionState); |
| } |
| void XMLHttpRequest::sendForInspectorXHRReplay(PassRefPtr<FormData> formData, ExceptionState& exceptionState) |
| { |
| - m_requestEntityBody = formData ? formData->deepCopy() : nullptr; |
| - createRequest(exceptionState); |
| + createRequest(formData ? formData->deepCopy() : nullptr, exceptionState); |
| m_exceptionCode = exceptionState.code(); |
| } |
| -void XMLHttpRequest::createRequest(ExceptionState& exceptionState) |
| +void XMLHttpRequest::createRequest(PassRefPtr<FormData> httpBody, ExceptionState& exceptionState) |
| { |
| // Only GET request is supported for blob URL. |
| if (m_url.protocolIs("blob") && m_method != "GET") { |
| @@ -811,7 +820,7 @@ void XMLHttpRequest::createRequest(ExceptionState& exceptionState) |
| bool uploadEvents = false; |
| if (m_async) { |
| dispatchProgressEvent(EventTypeNames::loadstart, 0, 0); |
| - if (m_requestEntityBody && m_upload) { |
| + if (httpBody.get() && m_upload) { |
|
tkent
2014/06/09 04:39:05
nit: |.get()| is unnecessary.
tyoshino (SeeGerritForStatus)
2014/06/09 04:52:30
Done.
|
| uploadEvents = m_upload->hasEventListeners(); |
| m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNames::loadstart)); |
| } |
| @@ -830,12 +839,12 @@ void XMLHttpRequest::createRequest(ExceptionState& exceptionState) |
| request.setHTTPMethod(m_method); |
| request.setTargetType(ResourceRequest::TargetIsXHR); |
| - InspectorInstrumentation::willLoadXHR(&executionContext, this, this, m_method, m_url, m_async, m_requestEntityBody ? m_requestEntityBody->deepCopy() : nullptr, m_requestHeaders, m_includeCredentials); |
| + InspectorInstrumentation::willLoadXHR(&executionContext, this, this, m_method, m_url, m_async, httpBody.get() ? httpBody->deepCopy() : nullptr, m_requestHeaders, m_includeCredentials); |
|
tkent
2014/06/09 04:39:05
nit: |.get()| is unnecessary.
tyoshino (SeeGerritForStatus)
2014/06/09 04:52:30
Done.
|
| - if (m_requestEntityBody) { |
| + if (httpBody.get()) { |
|
tkent
2014/06/09 04:39:05
Ditto.
tyoshino (SeeGerritForStatus)
2014/06/09 04:52:30
Done.
|
| ASSERT(m_method != "GET"); |
| ASSERT(m_method != "HEAD"); |
| - request.setHTTPBody(m_requestEntityBody.release()); |
| + request.setHTTPBody(httpBody); |
| } |
| if (m_requestHeaders.size() > 0) |
| @@ -998,7 +1007,6 @@ void XMLHttpRequest::clearResponse() |
| void XMLHttpRequest::clearRequest() |
| { |
| m_requestHeaders.clear(); |
| - m_requestEntityBody = nullptr; |
| } |
| void XMLHttpRequest::handleDidFailGeneric() |