OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org> | 3 * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org> |
4 * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org> | 4 * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org> |
5 * Copyright (C) 2008, 2011 Google Inc. All rights reserved. | 5 * Copyright (C) 2008, 2011 Google Inc. All rights reserved. |
6 * Copyright (C) 2012 Intel Corporation | 6 * Copyright (C) 2012 Intel Corporation |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 m_eventDispatchRecursionLevel(0), | 244 m_eventDispatchRecursionLevel(0), |
245 m_async(true), | 245 m_async(true), |
246 m_includeCredentials(false), | 246 m_includeCredentials(false), |
247 m_parsedResponse(false), | 247 m_parsedResponse(false), |
248 m_error(false), | 248 m_error(false), |
249 m_uploadEventsAllowed(true), | 249 m_uploadEventsAllowed(true), |
250 m_uploadComplete(false), | 250 m_uploadComplete(false), |
251 m_sameOriginRequest(true), | 251 m_sameOriginRequest(true), |
252 m_downloadingToFile(false), | 252 m_downloadingToFile(false), |
253 m_responseTextOverflow(false), | 253 m_responseTextOverflow(false), |
254 m_sendFlag(false) {} | 254 m_sendFlag(false), |
| 255 m_responseArrayBufferFailure(false) {} |
255 | 256 |
256 XMLHttpRequest::~XMLHttpRequest() {} | 257 XMLHttpRequest::~XMLHttpRequest() {} |
257 | 258 |
258 Document* XMLHttpRequest::document() const { | 259 Document* XMLHttpRequest::document() const { |
259 DCHECK(getExecutionContext()->isDocument()); | 260 DCHECK(getExecutionContext()->isDocument()); |
260 return toDocument(getExecutionContext()); | 261 return toDocument(getExecutionContext()); |
261 } | 262 } |
262 | 263 |
263 SecurityOrigin* XMLHttpRequest::getSecurityOrigin() const { | 264 SecurityOrigin* XMLHttpRequest::getSecurityOrigin() const { |
264 return m_isolatedWorldSecurityOrigin | 265 return m_isolatedWorldSecurityOrigin |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 | 380 |
380 return m_responseBlob; | 381 return m_responseBlob; |
381 } | 382 } |
382 | 383 |
383 DOMArrayBuffer* XMLHttpRequest::responseArrayBuffer() { | 384 DOMArrayBuffer* XMLHttpRequest::responseArrayBuffer() { |
384 DCHECK_EQ(m_responseTypeCode, ResponseTypeArrayBuffer); | 385 DCHECK_EQ(m_responseTypeCode, ResponseTypeArrayBuffer); |
385 | 386 |
386 if (m_error || m_state != kDone) | 387 if (m_error || m_state != kDone) |
387 return nullptr; | 388 return nullptr; |
388 | 389 |
389 if (!m_responseArrayBuffer) { | 390 if (!m_responseArrayBuffer && !m_responseArrayBufferFailure) { |
390 if (m_binaryResponseBuilder && m_binaryResponseBuilder->size()) { | 391 if (m_binaryResponseBuilder && m_binaryResponseBuilder->size()) { |
391 DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitialized( | 392 DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitializedOrNull( |
392 m_binaryResponseBuilder->size(), 1); | 393 m_binaryResponseBuilder->size(), 1); |
393 m_binaryResponseBuilder->getAsBytes( | 394 if (buffer) { |
394 buffer->data(), static_cast<size_t>(buffer->byteLength())); | 395 m_binaryResponseBuilder->getAsBytes( |
395 m_responseArrayBuffer = buffer; | 396 buffer->data(), static_cast<size_t>(buffer->byteLength())); |
| 397 m_responseArrayBuffer = buffer; |
| 398 } |
| 399 // https://xhr.spec.whatwg.org/#arraybuffer-response allows clearing |
| 400 // of the 'received bytes' payload when the response buffer allocation |
| 401 // fails. |
396 m_binaryResponseBuilder.clear(); | 402 m_binaryResponseBuilder.clear(); |
| 403 // Mark allocation as failed; subsequent calls to the accessor must |
| 404 // continue to report |null|. |
| 405 // |
| 406 m_responseArrayBufferFailure = !buffer; |
397 } else { | 407 } else { |
398 m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0); | 408 m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0); |
399 } | 409 } |
400 } | 410 } |
401 | 411 |
402 return m_responseArrayBuffer; | 412 return m_responseArrayBuffer; |
403 } | 413 } |
404 | 414 |
405 void XMLHttpRequest::setTimeout(unsigned timeout, | 415 void XMLHttpRequest::setTimeout(unsigned timeout, |
406 ExceptionState& exceptionState) { | 416 ExceptionState& exceptionState) { |
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1187 | 1197 |
1188 m_responseBlob = nullptr; | 1198 m_responseBlob = nullptr; |
1189 | 1199 |
1190 m_downloadingToFile = false; | 1200 m_downloadingToFile = false; |
1191 m_lengthDownloadedToFile = 0; | 1201 m_lengthDownloadedToFile = 0; |
1192 | 1202 |
1193 // These variables may referred by the response accessors. So, we can clear | 1203 // These variables may referred by the response accessors. So, we can clear |
1194 // this only when we clear the response holder variables above. | 1204 // this only when we clear the response holder variables above. |
1195 m_binaryResponseBuilder.clear(); | 1205 m_binaryResponseBuilder.clear(); |
1196 m_responseArrayBuffer.clear(); | 1206 m_responseArrayBuffer.clear(); |
| 1207 m_responseArrayBufferFailure = false; |
1197 } | 1208 } |
1198 | 1209 |
1199 void XMLHttpRequest::clearRequest() { | 1210 void XMLHttpRequest::clearRequest() { |
1200 m_requestHeaders.clear(); | 1211 m_requestHeaders.clear(); |
1201 } | 1212 } |
1202 | 1213 |
1203 void XMLHttpRequest::dispatchProgressEvent(const AtomicString& type, | 1214 void XMLHttpRequest::dispatchProgressEvent(const AtomicString& type, |
1204 long long receivedLength, | 1215 long long receivedLength, |
1205 long long expectedLength) { | 1216 long long expectedLength) { |
1206 bool lengthComputable = | 1217 bool lengthComputable = |
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1889 visitor->traceWrappers(m_responseDocument); | 1900 visitor->traceWrappers(m_responseDocument); |
1890 visitor->traceWrappers(m_responseArrayBuffer); | 1901 visitor->traceWrappers(m_responseArrayBuffer); |
1891 XMLHttpRequestEventTarget::traceWrappers(visitor); | 1902 XMLHttpRequestEventTarget::traceWrappers(visitor); |
1892 } | 1903 } |
1893 | 1904 |
1894 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) { | 1905 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) { |
1895 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr); | 1906 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr); |
1896 } | 1907 } |
1897 | 1908 |
1898 } // namespace blink | 1909 } // namespace blink |
OLD | NEW |