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

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

Issue 2389883005: reflow comments in core/xml* (Closed)
Patch Set: Created 4 years, 2 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
11 * version 2 of the License, or (at your option) any later version. 11 * version 2 of the License, or (at your option) any later version.
12 * 12 *
13 * This library is distributed in the hope that it will be useful, 13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details. 16 * Lesser General Public License for more details.
17 * 17 *
18 * You should have received a copy of the GNU Lesser General Public 18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software 19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 U SA 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA
21 */ 22 */
22 23
23 #include "core/xmlhttprequest/XMLHttpRequest.h" 24 #include "core/xmlhttprequest/XMLHttpRequest.h"
24 25
25 #include "bindings/core/v8/ArrayBufferOrArrayBufferViewOrBlobOrDocumentOrStringO rFormData.h" 26 #include "bindings/core/v8/ArrayBufferOrArrayBufferViewOrBlobOrDocumentOrStringO rFormData.h"
26 #include "bindings/core/v8/ArrayBufferOrArrayBufferViewOrBlobOrUSVString.h" 27 #include "bindings/core/v8/ArrayBufferOrArrayBufferViewOrBlobOrUSVString.h"
27 #include "bindings/core/v8/DOMWrapperWorld.h" 28 #include "bindings/core/v8/DOMWrapperWorld.h"
28 #include "bindings/core/v8/ExceptionState.h" 29 #include "bindings/core/v8/ExceptionState.h"
29 #include "bindings/core/v8/ScriptState.h" 30 #include "bindings/core/v8/ScriptState.h"
30 #include "core/dom/DOMArrayBuffer.h" 31 #include "core/dom/DOMArrayBuffer.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 void replaceCharsetInMediaType(String& mediaType, const String& charsetValue) { 104 void replaceCharsetInMediaType(String& mediaType, const String& charsetValue) {
104 unsigned pos = 0, len = 0; 105 unsigned pos = 0, len = 0;
105 106
106 findCharsetInMediaType(mediaType, pos, len); 107 findCharsetInMediaType(mediaType, pos, len);
107 108
108 if (!len) { 109 if (!len) {
109 // When no charset found, do nothing. 110 // When no charset found, do nothing.
110 return; 111 return;
111 } 112 }
112 113
113 // Found at least one existing charset, replace all occurrences with new chars et. 114 // Found at least one existing charset, replace all occurrences with new
115 // charset.
114 while (len) { 116 while (len) {
115 mediaType.replace(pos, len, charsetValue); 117 mediaType.replace(pos, len, charsetValue);
116 unsigned start = pos + charsetValue.length(); 118 unsigned start = pos + charsetValue.length();
117 findCharsetInMediaType(mediaType, pos, len, start); 119 findCharsetInMediaType(mediaType, pos, len, start);
118 } 120 }
119 } 121 }
120 122
121 void logConsoleError(ExecutionContext* context, const String& message) { 123 void logConsoleError(ExecutionContext* context, const String& message) {
122 if (!context) 124 if (!context)
123 return; 125 return;
124 // FIXME: It's not good to report the bad usage without indicating what source line it came from. 126 // FIXME: It's not good to report the bad usage without indicating what source
125 // We should pass additional parameters so we can tell the console where the m istake occurred. 127 // line it came from. We should pass additional parameters so we can tell the
128 // console where the mistake occurred.
126 ConsoleMessage* consoleMessage = 129 ConsoleMessage* consoleMessage =
127 ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message); 130 ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message);
128 context->addConsoleMessage(consoleMessage); 131 context->addConsoleMessage(consoleMessage);
129 } 132 }
130 133
131 enum HeaderValueCategoryByRFC7230 { 134 enum HeaderValueCategoryByRFC7230 {
132 HeaderValueInvalid, 135 HeaderValueInvalid,
133 HeaderValueAffectedByNormalization, 136 HeaderValueAffectedByNormalization,
134 HeaderValueValid, 137 HeaderValueValid,
135 HeaderValueCategoryByRFC7230End 138 HeaderValueCategoryByRFC7230End
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 277
275 ScriptString XMLHttpRequest::responseJSONSource() { 278 ScriptString XMLHttpRequest::responseJSONSource() {
276 DCHECK_EQ(m_responseTypeCode, ResponseTypeJSON); 279 DCHECK_EQ(m_responseTypeCode, ResponseTypeJSON);
277 280
278 if (m_error || m_state != kDone) 281 if (m_error || m_state != kDone)
279 return ScriptString(); 282 return ScriptString();
280 return m_responseText; 283 return m_responseText;
281 } 284 }
282 285
283 void XMLHttpRequest::initResponseDocument() { 286 void XMLHttpRequest::initResponseDocument() {
284 // The W3C spec requires the final MIME type to be some valid XML type, or tex t/html. 287 // The W3C spec requires the final MIME type to be some valid XML type, or
285 // If it is text/html, then the responseType of "document" must have been supp lied explicitly. 288 // text/html. If it is text/html, then the responseType of "document" must
289 // have been supplied explicitly.
286 bool isHTML = responseIsHTML(); 290 bool isHTML = responseIsHTML();
287 if ((m_response.isHTTP() && !responseIsXML() && !isHTML) || 291 if ((m_response.isHTTP() && !responseIsXML() && !isHTML) ||
288 (isHTML && m_responseTypeCode == ResponseTypeDefault) || 292 (isHTML && m_responseTypeCode == ResponseTypeDefault) ||
289 !getExecutionContext() || getExecutionContext()->isWorkerGlobalScope()) { 293 !getExecutionContext() || getExecutionContext()->isWorkerGlobalScope()) {
290 m_responseDocument = nullptr; 294 m_responseDocument = nullptr;
291 return; 295 return;
292 } 296 }
293 297
294 DocumentInit init = 298 DocumentInit init =
295 DocumentInit::fromContext(document()->contextDocument(), m_url); 299 DocumentInit::fromContext(document()->contextDocument(), m_url);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 DCHECK_EQ(m_responseTypeCode, ResponseTypeLegacyStream); 401 DCHECK_EQ(m_responseTypeCode, ResponseTypeLegacyStream);
398 402
399 if (m_error || (m_state != kLoading && m_state != kDone)) 403 if (m_error || (m_state != kLoading && m_state != kDone))
400 return nullptr; 404 return nullptr;
401 405
402 return m_responseLegacyStream; 406 return m_responseLegacyStream;
403 } 407 }
404 408
405 void XMLHttpRequest::setTimeout(unsigned timeout, 409 void XMLHttpRequest::setTimeout(unsigned timeout,
406 ExceptionState& exceptionState) { 410 ExceptionState& exceptionState) {
407 // FIXME: Need to trigger or update the timeout Timer here, if needed. http:// webkit.org/b/98156 411 // FIXME: Need to trigger or update the timeout Timer here, if needed.
408 // XHR2 spec, 4.7.3. "This implies that the timeout attribute can be set while fetching is in progress. If that occurs it will still be measured relative to t he start of fetching." 412 // http://webkit.org/b/98156
413 // XHR2 spec, 4.7.3. "This implies that the timeout attribute can be set while
414 // fetching is in progress. If that occurs it will still be measured relative
415 // to the start of fetching."
409 if (getExecutionContext() && getExecutionContext()->isDocument() && 416 if (getExecutionContext() && getExecutionContext()->isDocument() &&
410 !m_async) { 417 !m_async) {
411 exceptionState.throwDOMException(InvalidAccessError, 418 exceptionState.throwDOMException(InvalidAccessError,
412 "Timeouts cannot be set for synchronous " 419 "Timeouts cannot be set for synchronous "
413 "requests made from a document."); 420 "requests made from a document.");
414 return; 421 return;
415 } 422 }
416 423
417 m_timeoutMilliseconds = timeout; 424 m_timeoutMilliseconds = timeout;
418 425
419 // From http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute: 426 // From http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute:
420 // Note: This implies that the timeout attribute can be set while fetching is in progress. If 427 // Note: This implies that the timeout attribute can be set while fetching is
421 // that occurs it will still be measured relative to the start of fetching. 428 // in progress. If that occurs it will still be measured relative to the start
429 // of fetching.
422 // 430 //
423 // The timeout may be overridden after send. 431 // The timeout may be overridden after send.
424 if (m_loader) 432 if (m_loader)
425 m_loader->overrideTimeout(timeout); 433 m_loader->overrideTimeout(timeout);
426 } 434 }
427 435
428 void XMLHttpRequest::setResponseType(const String& responseType, 436 void XMLHttpRequest::setResponseType(const String& responseType,
429 ExceptionState& exceptionState) { 437 ExceptionState& exceptionState) {
430 if (m_state >= kLoading) { 438 if (m_state >= kLoading) {
431 exceptionState.throwDOMException(InvalidStateError, 439 exceptionState.throwDOMException(InvalidStateError,
432 "The response type cannot be set if the " 440 "The response type cannot be set if the "
433 "object's state is LOADING or DONE."); 441 "object's state is LOADING or DONE.");
434 return; 442 return;
435 } 443 }
436 444
437 // Newer functionality is not available to synchronous requests in window cont exts, as a spec-mandated 445 // Newer functionality is not available to synchronous requests in window
438 // attempt to discourage synchronous XHR use. responseType is one such piece o f functionality. 446 // contexts, as a spec-mandated attempt to discourage synchronous XHR use.
447 // responseType is one such piece of functionality.
439 if (getExecutionContext() && getExecutionContext()->isDocument() && 448 if (getExecutionContext() && getExecutionContext()->isDocument() &&
440 !m_async) { 449 !m_async) {
441 exceptionState.throwDOMException(InvalidAccessError, 450 exceptionState.throwDOMException(InvalidAccessError,
442 "The response type cannot be changed for " 451 "The response type cannot be changed for "
443 "synchronous requests made from a " 452 "synchronous requests made from a "
444 "document."); 453 "document.");
445 return; 454 return;
446 } 455 }
447 456
448 if (responseType == "") { 457 if (responseType == "") {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 return; 620 return;
612 621
613 State previousState = m_state; 622 State previousState = m_state;
614 m_state = kUnsent; 623 m_state = kUnsent;
615 m_error = false; 624 m_error = false;
616 m_uploadComplete = false; 625 m_uploadComplete = false;
617 626
618 if (!ContentSecurityPolicy::shouldBypassMainWorld(getExecutionContext()) && 627 if (!ContentSecurityPolicy::shouldBypassMainWorld(getExecutionContext()) &&
619 !getExecutionContext()->contentSecurityPolicy()->allowConnectToSource( 628 !getExecutionContext()->contentSecurityPolicy()->allowConnectToSource(
620 url)) { 629 url)) {
621 // We can safely expose the URL to JavaScript, as these checks happen synchr onously before redirection. JavaScript receives no new information. 630 // We can safely expose the URL to JavaScript, as these checks happen
631 // synchronously before redirection. JavaScript receives no new information.
622 exceptionState.throwSecurityError( 632 exceptionState.throwSecurityError(
623 "Refused to connect to '" + url.elidedString() + 633 "Refused to connect to '" + url.elidedString() +
624 "' because it violates the document's Content Security Policy."); 634 "' because it violates the document's Content Security Policy.");
625 return; 635 return;
626 } 636 }
627 637
628 if (!async && getExecutionContext()->isDocument()) { 638 if (!async && getExecutionContext()->isDocument()) {
629 if (document()->settings() && 639 if (document()->settings() &&
630 !document()->settings()->syncXHRInDocumentsEnabled()) { 640 !document()->settings()->syncXHRInDocumentsEnabled()) {
631 exceptionState.throwDOMException( 641 exceptionState.throwDOMException(
632 InvalidAccessError, 642 InvalidAccessError,
633 "Synchronous requests are disabled for this page."); 643 "Synchronous requests are disabled for this page.");
634 return; 644 return;
635 } 645 }
636 646
637 // Newer functionality is not available to synchronous requests in window co ntexts, as a spec-mandated 647 // Newer functionality is not available to synchronous requests in window
638 // attempt to discourage synchronous XHR use. responseType is one such piece of functionality. 648 // contexts, as a spec-mandated attempt to discourage synchronous XHR use.
649 // responseType is one such piece of functionality.
639 if (m_responseTypeCode != ResponseTypeDefault) { 650 if (m_responseTypeCode != ResponseTypeDefault) {
640 exceptionState.throwDOMException( 651 exceptionState.throwDOMException(
641 InvalidAccessError, 652 InvalidAccessError,
642 "Synchronous requests from a document must not set a response type."); 653 "Synchronous requests from a document must not set a response type.");
643 return; 654 return;
644 } 655 }
645 656
646 // Similarly, timeouts are disabled for synchronous requests as well. 657 // Similarly, timeouts are disabled for synchronous requests as well.
647 if (m_timeoutMilliseconds > 0) { 658 if (m_timeoutMilliseconds > 0) {
648 exceptionState.throwDOMException( 659 exceptionState.throwDOMException(
649 InvalidAccessError, "Synchronous requests must not set a timeout."); 660 InvalidAccessError, "Synchronous requests must not set a timeout.");
650 return; 661 return;
651 } 662 }
652 663
653 // Here we just warn that firing sync XHR's may affect responsiveness. 664 // Here we just warn that firing sync XHR's may affect responsiveness.
654 // Eventually sync xhr will be deprecated and an "InvalidAccessError" except ion thrown. 665 // Eventually sync xhr will be deprecated and an "InvalidAccessError"
666 // exception thrown.
655 // Refer : https://xhr.spec.whatwg.org/#sync-warning 667 // Refer : https://xhr.spec.whatwg.org/#sync-warning
656 // Use count for XHR synchronous requests on main thread only. 668 // Use count for XHR synchronous requests on main thread only.
657 if (!document()->processingBeforeUnload()) 669 if (!document()->processingBeforeUnload())
658 Deprecation::countDeprecation( 670 Deprecation::countDeprecation(
659 getExecutionContext(), 671 getExecutionContext(),
660 UseCounter::XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload); 672 UseCounter::XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload);
661 } 673 }
662 674
663 m_method = FetchUtils::normalizeMethod(method); 675 m_method = FetchUtils::normalizeMethod(method);
664 676
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 if (!m_async) { 933 if (!m_async) {
922 throwForLoadFailureIfNeeded( 934 throwForLoadFailureIfNeeded(
923 exceptionState, "'GET' is the only method allowed for 'blob:' URLs."); 935 exceptionState, "'GET' is the only method allowed for 'blob:' URLs.");
924 } 936 }
925 return; 937 return;
926 } 938 }
927 939
928 DCHECK(getExecutionContext()); 940 DCHECK(getExecutionContext());
929 ExecutionContext& executionContext = *getExecutionContext(); 941 ExecutionContext& executionContext = *getExecutionContext();
930 942
931 // The presence of upload event listeners forces us to use preflighting becaus e POSTing to an URL that does not 943 // The presence of upload event listeners forces us to use preflighting
932 // permit cross origin requests should look exactly like POSTing to an URL tha t does not respond at all. 944 // because POSTing to an URL that does not permit cross origin requests should
945 // look exactly like POSTing to an URL that does not respond at all.
933 // Also, only async requests support upload progress events. 946 // Also, only async requests support upload progress events.
934 bool uploadEvents = false; 947 bool uploadEvents = false;
935 if (m_async) { 948 if (m_async) {
936 InspectorInstrumentation::asyncTaskScheduled( 949 InspectorInstrumentation::asyncTaskScheduled(
937 &executionContext, "XMLHttpRequest.send", this, true); 950 &executionContext, "XMLHttpRequest.send", this, true);
938 dispatchProgressEvent(EventTypeNames::loadstart, 0, 0); 951 dispatchProgressEvent(EventTypeNames::loadstart, 0, 0);
939 if (httpBody && m_upload) { 952 if (httpBody && m_upload) {
940 uploadEvents = m_upload->hasEventListeners(); 953 uploadEvents = m_upload->hasEventListeners();
941 m_upload->dispatchEvent( 954 m_upload->dispatchEvent(
942 ProgressEvent::create(EventTypeNames::loadstart, false, 0, 0)); 955 ProgressEvent::create(EventTypeNames::loadstart, false, 0, 0));
943 } 956 }
944 } 957 }
945 958
946 m_sameOriginRequest = getSecurityOrigin()->canRequestNoSuborigin(m_url); 959 m_sameOriginRequest = getSecurityOrigin()->canRequestNoSuborigin(m_url);
947 960
948 if (!m_sameOriginRequest && m_includeCredentials) 961 if (!m_sameOriginRequest && m_includeCredentials)
949 UseCounter::count(&executionContext, 962 UseCounter::count(&executionContext,
950 UseCounter::XMLHttpRequestCrossOriginWithCredentials); 963 UseCounter::XMLHttpRequestCrossOriginWithCredentials);
951 964
952 // We also remember whether upload events should be allowed for this request i n case the upload listeners are 965 // We also remember whether upload events should be allowed for this request
953 // added after the request is started. 966 // in case the upload listeners are added after the request is started.
954 m_uploadEventsAllowed = 967 m_uploadEventsAllowed =
955 m_sameOriginRequest || uploadEvents || 968 m_sameOriginRequest || uploadEvents ||
956 !FetchUtils::isSimpleRequest(m_method, m_requestHeaders); 969 !FetchUtils::isSimpleRequest(m_method, m_requestHeaders);
957 970
958 ResourceRequest request(m_url); 971 ResourceRequest request(m_url);
959 request.setHTTPMethod(m_method); 972 request.setHTTPMethod(m_method);
960 request.setRequestContext(WebURLRequest::RequestContextXMLHttpRequest); 973 request.setRequestContext(WebURLRequest::RequestContextXMLHttpRequest);
961 request.setFetchCredentialsMode( 974 request.setFetchCredentialsMode(
962 m_includeCredentials ? WebURLRequest::FetchCredentialsModeInclude 975 m_includeCredentials ? WebURLRequest::FetchCredentialsModeInclude
963 : WebURLRequest::FetchCredentialsModeSameOrigin); 976 : WebURLRequest::FetchCredentialsModeSameOrigin);
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1230 // the end here. 1243 // the end here.
1231 DCHECK(m_error); 1244 DCHECK(m_error);
1232 changeState(kDone); 1245 changeState(kDone);
1233 1246
1234 if (!m_uploadComplete) { 1247 if (!m_uploadComplete) {
1235 m_uploadComplete = true; 1248 m_uploadComplete = true;
1236 if (m_upload && m_uploadEventsAllowed) 1249 if (m_upload && m_uploadEventsAllowed)
1237 m_upload->handleRequestError(type); 1250 m_upload->handleRequestError(type);
1238 } 1251 }
1239 1252
1240 // Note: The below event dispatch may be called while |hasPendingActivity() == false|, 1253 // Note: The below event dispatch may be called while |hasPendingActivity() ==
1241 // when |handleRequestError| is called after |internalAbort()|. 1254 // false|, when |handleRequestError| is called after |internalAbort()|. This
jbroman 2016/10/04 19:56:51 ditto
1242 // This is safe, however, as |this| will be kept alive from a strong ref |Even t::m_target|. 1255 // is safe, however, as |this| will be kept alive from a strong ref
1256 // |Event::m_target|.
1243 dispatchProgressEvent(EventTypeNames::progress, receivedLength, 1257 dispatchProgressEvent(EventTypeNames::progress, receivedLength,
1244 expectedLength); 1258 expectedLength);
1245 dispatchProgressEvent(type, receivedLength, expectedLength); 1259 dispatchProgressEvent(type, receivedLength, expectedLength);
1246 dispatchProgressEvent(EventTypeNames::loadend, receivedLength, 1260 dispatchProgressEvent(EventTypeNames::loadend, receivedLength,
1247 expectedLength); 1261 expectedLength);
1248 } 1262 }
1249 1263
1250 void XMLHttpRequest::overrideMimeType(const AtomicString& mimeType, 1264 void XMLHttpRequest::overrideMimeType(const AtomicString& mimeType,
1251 ExceptionState& exceptionState) { 1265 ExceptionState& exceptionState) {
1252 if (m_state == kLoading || m_state == kDone) { 1266 if (m_state == kLoading || m_state == kDone) {
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 if (!m_response.httpStatusText().isNull()) 1456 if (!m_response.httpStatusText().isNull())
1443 return m_response.httpStatusText(); 1457 return m_response.httpStatusText();
1444 1458
1445 return String(); 1459 return String();
1446 } 1460 }
1447 1461
1448 void XMLHttpRequest::didFail(const ResourceError& error) { 1462 void XMLHttpRequest::didFail(const ResourceError& error) {
1449 NETWORK_DVLOG(1) << this << " didFail()"; 1463 NETWORK_DVLOG(1) << this << " didFail()";
1450 ScopedEventDispatchProtect protect(&m_eventDispatchRecursionLevel); 1464 ScopedEventDispatchProtect protect(&m_eventDispatchRecursionLevel);
1451 1465
1452 // If we are already in an error state, for instance we called abort(), bail o ut early. 1466 // If we are already in an error state, for instance we called abort(), bail
1467 // out early.
1453 if (m_error) 1468 if (m_error)
1454 return; 1469 return;
1455 1470
1456 if (error.isCancellation()) { 1471 if (error.isCancellation()) {
1457 handleDidCancel(); 1472 handleDidCancel();
1458 return; 1473 return;
1459 } 1474 }
1460 1475
1461 if (error.isTimeout()) { 1476 if (error.isTimeout()) {
1462 handleDidTimeout(); 1477 handleDidTimeout();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 // but the user changed the response type after that. Hence we need to 1511 // but the user changed the response type after that. Hence we need to
1497 // read the response data and provide it to this object. 1512 // read the response data and provide it to this object.
1498 m_blobLoader = BlobLoader::create(this, createBlobDataHandleFromResponse()); 1513 m_blobLoader = BlobLoader::create(this, createBlobDataHandleFromResponse());
1499 } else { 1514 } else {
1500 didFinishLoadingInternal(); 1515 didFinishLoadingInternal();
1501 } 1516 }
1502 } 1517 }
1503 1518
1504 void XMLHttpRequest::didFinishLoadingInternal() { 1519 void XMLHttpRequest::didFinishLoadingInternal() {
1505 if (m_responseDocumentParser) { 1520 if (m_responseDocumentParser) {
1506 // |DocumentParser::finish()| tells the parser that we have reached end of t he data. 1521 // |DocumentParser::finish()| tells the parser that we have reached end of
1507 // When using |HTMLDocumentParser|, which works asynchronously, we do not ha ve the 1522 // the data. When using |HTMLDocumentParser|, which works asynchronously,
jbroman 2016/10/04 19:56:51 ditto
1508 // complete document just after the |DocumentParser::finish()| call. 1523 // we do not have the complete document just after the
1509 // Wait for the parser to call us back in |notifyParserStopped| to progress state. 1524 // |DocumentParser::finish()| call. Wait for the parser to call us back in
1525 // |notifyParserStopped| to progress state.
1510 m_responseDocumentParser->finish(); 1526 m_responseDocumentParser->finish();
1511 DCHECK(m_responseDocument); 1527 DCHECK(m_responseDocument);
1512 return; 1528 return;
1513 } 1529 }
1514 1530
1515 if (m_decoder) { 1531 if (m_decoder) {
1516 auto text = m_decoder->flush(); 1532 auto text = m_decoder->flush();
1517 if (!text.isEmpty() && !m_responseTextOverflow) { 1533 if (!text.isEmpty() && !m_responseTextOverflow) {
1518 m_responseText = m_responseText.concatenateWith(text); 1534 m_responseText = m_responseText.concatenateWith(text);
1519 m_responseTextOverflow = m_responseText.isEmpty(); 1535 m_responseTextOverflow = m_responseText.isEmpty();
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 visitor->traceWrappers(m_responseLegacyStream); 1856 visitor->traceWrappers(m_responseLegacyStream);
1841 visitor->traceWrappers(m_responseDocument); 1857 visitor->traceWrappers(m_responseDocument);
1842 visitor->traceWrappers(m_responseArrayBuffer); 1858 visitor->traceWrappers(m_responseArrayBuffer);
1843 } 1859 }
1844 1860
1845 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) { 1861 std::ostream& operator<<(std::ostream& ostream, const XMLHttpRequest* xhr) {
1846 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr); 1862 return ostream << "XMLHttpRequest " << static_cast<const void*>(xhr);
1847 } 1863 }
1848 1864
1849 } // namespace blink 1865 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698