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

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

Issue 2517173002: XMLHttpRequest.abort(): follow spec wrt readyState transitions. (Closed)
Patch Set: fix pass test predicate Created 4 years 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 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 if (!m_responseDocument) 333 if (!m_responseDocument)
334 return nullptr; 334 return nullptr;
335 335
336 m_responseDocument->setContent(m_responseText.flattenToString()); 336 m_responseDocument->setContent(m_responseText.flattenToString());
337 if (!m_responseDocument->wellFormed()) 337 if (!m_responseDocument->wellFormed())
338 m_responseDocument = nullptr; 338 m_responseDocument = nullptr;
339 339
340 m_parsedResponse = true; 340 m_parsedResponse = true;
341 } 341 }
342 342
343 return m_responseDocument.get(); 343 return m_responseDocument;
344 } 344 }
345 345
346 Blob* XMLHttpRequest::responseBlob() { 346 Blob* XMLHttpRequest::responseBlob() {
347 DCHECK_EQ(m_responseTypeCode, ResponseTypeBlob); 347 DCHECK_EQ(m_responseTypeCode, ResponseTypeBlob);
348 348
349 // We always return null before kDone. 349 // We always return null before kDone.
350 if (m_error || m_state != kDone) 350 if (m_error || m_state != kDone)
351 return nullptr; 351 return nullptr;
352 352
353 if (!m_responseBlob) { 353 if (!m_responseBlob) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 // the spec to tell this to the user. 393 // the spec to tell this to the user.
394 CRASH(); 394 CRASH();
395 } 395 }
396 m_responseArrayBuffer = buffer; 396 m_responseArrayBuffer = buffer;
397 m_binaryResponseBuilder.clear(); 397 m_binaryResponseBuilder.clear();
398 } else { 398 } else {
399 m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0); 399 m_responseArrayBuffer = DOMArrayBuffer::create(nullptr, 0);
400 } 400 }
401 } 401 }
402 402
403 return m_responseArrayBuffer.get(); 403 return m_responseArrayBuffer;
404 } 404 }
405 405
406 void XMLHttpRequest::setTimeout(unsigned timeout, 406 void XMLHttpRequest::setTimeout(unsigned timeout,
407 ExceptionState& exceptionState) { 407 ExceptionState& exceptionState) {
408 // FIXME: Need to trigger or update the timeout Timer here, if needed. 408 // FIXME: Need to trigger or update the timeout Timer here, if needed.
409 // http://webkit.org/b/98156 409 // http://webkit.org/b/98156
410 // XHR2 spec, 4.7.3. "This implies that the timeout attribute can be set while 410 // XHR2 spec, 4.7.3. "This implies that the timeout attribute can be set while
411 // fetching is in progress. If that occurs it will still be measured relative 411 // fetching is in progress. If that occurs it will still be measured relative
412 // to the start of fetching." 412 // to the start of fetching."
413 if (getExecutionContext() && getExecutionContext()->isDocument() && 413 if (getExecutionContext() && getExecutionContext()->isDocument() &&
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 String XMLHttpRequest::responseURL() { 489 String XMLHttpRequest::responseURL() {
490 KURL responseURL(m_response.url()); 490 KURL responseURL(m_response.url());
491 if (!responseURL.isNull()) 491 if (!responseURL.isNull())
492 responseURL.removeFragmentIdentifier(); 492 responseURL.removeFragmentIdentifier();
493 return responseURL.getString(); 493 return responseURL.getString();
494 } 494 }
495 495
496 XMLHttpRequestUpload* XMLHttpRequest::upload() { 496 XMLHttpRequestUpload* XMLHttpRequest::upload() {
497 if (!m_upload) 497 if (!m_upload)
498 m_upload = XMLHttpRequestUpload::create(this); 498 m_upload = XMLHttpRequestUpload::create(this);
499 return m_upload.get(); 499 return m_upload;
500 } 500 }
501 501
502 void XMLHttpRequest::trackProgress(long long length) { 502 void XMLHttpRequest::trackProgress(long long length) {
503 m_receivedLength += length; 503 m_receivedLength += length;
504 504
505 changeState(kLoading); 505 changeState(kLoading);
506 if (m_async) { 506 if (m_async) {
507 // readyStateChange event is fired as well. 507 // readyStateChange event is fired as well.
508 dispatchProgressEventFromSnapshot(EventTypeNames::progress); 508 dispatchProgressEventFromSnapshot(EventTypeNames::progress);
509 } 509 }
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 // becomes true by that. We should implement more reliable treatment for 1084 // becomes true by that. We should implement more reliable treatment for
1085 // nested method invocations at some point. 1085 // nested method invocations at some point.
1086 if (m_async) { 1086 if (m_async) {
1087 if ((m_state == kOpened && m_sendFlag) || m_state == kHeadersReceived || 1087 if ((m_state == kOpened && m_sendFlag) || m_state == kHeadersReceived ||
1088 m_state == kLoading) { 1088 m_state == kLoading) {
1089 DCHECK(!m_loader); 1089 DCHECK(!m_loader);
1090 handleRequestError(0, EventTypeNames::abort, receivedLength, 1090 handleRequestError(0, EventTypeNames::abort, receivedLength,
1091 expectedLength); 1091 expectedLength);
1092 } 1092 }
1093 } 1093 }
1094 m_state = kUnsent; 1094 if (m_state == kDone)
1095 m_state = kUnsent;
1095 } 1096 }
1096 1097
1097 void XMLHttpRequest::clearVariablesForLoading() { 1098 void XMLHttpRequest::clearVariablesForLoading() {
1098 if (m_blobLoader) { 1099 if (m_blobLoader) {
1099 m_blobLoader->cancel(); 1100 m_blobLoader->cancel();
1100 m_blobLoader = nullptr; 1101 m_blobLoader = nullptr;
1101 } 1102 }
1102 1103
1103 m_decoder.reset(); 1104 m_decoder.reset();
1104 1105
(...skipping 26 matching lines...) Expand all
1131 // 1132 //
1132 // If, window.onload contains open() and send(), m_loader will be set to 1133 // If, window.onload contains open() and send(), m_loader will be set to
1133 // non 0 value. So, we cannot continue the outer open(). In such case, 1134 // non 0 value. So, we cannot continue the outer open(). In such case,
1134 // just abort the outer open() by returning false. 1135 // just abort the outer open() by returning false.
1135 ThreadableLoader* loader = m_loader.release(); 1136 ThreadableLoader* loader = m_loader.release();
1136 loader->cancel(); 1137 loader->cancel();
1137 1138
1138 // If abort() called internalAbort() and a nested open() ended up 1139 // If abort() called internalAbort() and a nested open() ended up
1139 // clearing the error flag, but didn't send(), make sure the error 1140 // clearing the error flag, but didn't send(), make sure the error
1140 // flag is still set. 1141 // flag is still set.
1141 bool newLoadStarted = m_loader.get(); 1142 bool newLoadStarted = m_loader;
1142 if (!newLoadStarted) 1143 if (!newLoadStarted)
1143 m_error = true; 1144 m_error = true;
1144 1145
1145 return !newLoadStarted; 1146 return !newLoadStarted;
1146 } 1147 }
1147 1148
1148 void XMLHttpRequest::clearResponse() { 1149 void XMLHttpRequest::clearResponse() {
1149 // FIXME: when we add the support for multi-part XHR, we will have to 1150 // FIXME: when we add the support for multi-part XHR, we will have to
1150 // be careful with this initialization. 1151 // be careful with this initialization.
1151 m_receivedLength = 0; 1152 m_receivedLength = 0;
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1851 visitor->traceWrappers(m_responseDocument); 1852 visitor->traceWrappers(m_responseDocument);
1852 visitor->traceWrappers(m_responseArrayBuffer); 1853 visitor->traceWrappers(m_responseArrayBuffer);
1853 XMLHttpRequestEventTarget::traceWrappers(visitor); 1854 XMLHttpRequestEventTarget::traceWrappers(visitor);
1854 } 1855 }
1855 1856
1856 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) { 1857 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) {
1857 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr); 1858 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr);
1858 } 1859 }
1859 1860
1860 } // namespace blink 1861 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldNotDispatchEvent.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698