| Index: third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
|
| diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
|
| index c74d9e94739cd731464822eaaff8b2fe52b1bfc5..e0b0b64bc802400b8db6f5f8e34c34b23a5abd25 100644
|
| --- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
|
| +++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
|
| @@ -251,7 +251,8 @@ XMLHttpRequest::XMLHttpRequest(
|
| m_sameOriginRequest(true),
|
| m_downloadingToFile(false),
|
| m_responseTextOverflow(false),
|
| - m_sendFlag(false) {}
|
| + m_sendFlag(false),
|
| + m_responseArrayBufferFailure(false) {}
|
|
|
| XMLHttpRequest::~XMLHttpRequest() {}
|
|
|
| @@ -386,14 +387,23 @@ DOMArrayBuffer* XMLHttpRequest::responseArrayBuffer() {
|
| if (m_error || m_state != kDone)
|
| return nullptr;
|
|
|
| - if (!m_responseArrayBuffer) {
|
| + if (!m_responseArrayBuffer && !m_responseArrayBufferFailure) {
|
| if (m_binaryResponseBuilder && m_binaryResponseBuilder->size()) {
|
| - DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitialized(
|
| + DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitializedOrNull(
|
| m_binaryResponseBuilder->size(), 1);
|
| - m_binaryResponseBuilder->getAsBytes(
|
| - buffer->data(), static_cast<size_t>(buffer->byteLength()));
|
| - m_responseArrayBuffer = buffer;
|
| + if (buffer) {
|
| + m_binaryResponseBuilder->getAsBytes(
|
| + buffer->data(), static_cast<size_t>(buffer->byteLength()));
|
| + m_responseArrayBuffer = buffer;
|
| + }
|
| + // https://xhr.spec.whatwg.org/#arraybuffer-response allows clearing
|
| + // of the 'received bytes' payload when the response buffer allocation
|
| + // fails.
|
| m_binaryResponseBuilder.clear();
|
| + // Mark allocation as failed; subsequent calls to the accessor must
|
| + // continue to report |null|.
|
| + //
|
| + m_responseArrayBufferFailure = !buffer;
|
| } else {
|
| m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0);
|
| }
|
| @@ -1194,6 +1204,7 @@ void XMLHttpRequest::clearResponse() {
|
| // this only when we clear the response holder variables above.
|
| m_binaryResponseBuilder.clear();
|
| m_responseArrayBuffer.clear();
|
| + m_responseArrayBufferFailure = false;
|
| }
|
|
|
| void XMLHttpRequest::clearRequest() {
|
|
|