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

Side by Side Diff: third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp

Issue 2730943002: XMLHttpRequest: return null upon failing responseArrayBuffer allocation. (Closed)
Patch Set: Created 3 years, 9 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 unified diff | Download patch
OLDNEW
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 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 } 380 }
381 381
382 DOMArrayBuffer* XMLHttpRequest::responseArrayBuffer() { 382 DOMArrayBuffer* XMLHttpRequest::responseArrayBuffer() {
383 DCHECK_EQ(m_responseTypeCode, ResponseTypeArrayBuffer); 383 DCHECK_EQ(m_responseTypeCode, ResponseTypeArrayBuffer);
384 384
385 if (m_error || m_state != kDone) 385 if (m_error || m_state != kDone)
386 return nullptr; 386 return nullptr;
387 387
388 if (!m_responseArrayBuffer) { 388 if (!m_responseArrayBuffer) {
389 if (m_binaryResponseBuilder && m_binaryResponseBuilder->size()) { 389 if (m_binaryResponseBuilder && m_binaryResponseBuilder->size()) {
390 DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitialized( 390 DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitializedOrNull(
391 m_binaryResponseBuilder->size(), 1); 391 m_binaryResponseBuilder->size(), 1);
392 m_binaryResponseBuilder->getAsBytes( 392 if (buffer) {
393 buffer->data(), static_cast<size_t>(buffer->byteLength())); 393 m_binaryResponseBuilder->getAsBytes(
394 m_responseArrayBuffer = buffer; 394 buffer->data(), static_cast<size_t>(buffer->byteLength()));
395 m_responseArrayBuffer = buffer;
396 }
397 // https://xhr.spec.whatwg.org/#arraybuffer-response allows clearing
398 // of the 'received bytes' payload when the response buffer allocation
399 // fails.
haraken 2017/03/03 19:23:26 I guess it would be nicer to set an exception but
sof 2017/03/03 21:23:53 https://github.com/whatwg/xhr/issues/26 has some d
395 m_binaryResponseBuilder.clear(); 400 m_binaryResponseBuilder.clear();
396 } else { 401 } else {
397 m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0); 402 m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0);
398 } 403 }
399 } 404 }
400 405
401 return m_responseArrayBuffer; 406 return m_responseArrayBuffer;
402 } 407 }
403 408
404 void XMLHttpRequest::setTimeout(unsigned timeout, 409 void XMLHttpRequest::setTimeout(unsigned timeout,
(...skipping 1451 matching lines...) Expand 10 before | Expand all | Expand 10 after
1856 visitor->traceWrappers(m_responseDocument); 1861 visitor->traceWrappers(m_responseDocument);
1857 visitor->traceWrappers(m_responseArrayBuffer); 1862 visitor->traceWrappers(m_responseArrayBuffer);
1858 XMLHttpRequestEventTarget::traceWrappers(visitor); 1863 XMLHttpRequestEventTarget::traceWrappers(visitor);
1859 } 1864 }
1860 1865
1861 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) { 1866 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) {
1862 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr); 1867 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr);
1863 } 1868 }
1864 1869
1865 } // namespace blink 1870 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/testing/Internals.cpp ('k') | third_party/WebKit/Source/wtf/typed_arrays/ArrayBuffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698