| 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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 #include "platform/network/ParsedContentType.h" | 60 #include "platform/network/ParsedContentType.h" |
| 61 #include "platform/network/ResourceError.h" | 61 #include "platform/network/ResourceError.h" |
| 62 #include "platform/network/ResourceRequest.h" | 62 #include "platform/network/ResourceRequest.h" |
| 63 #include "public/platform/WebURLRequest.h" | 63 #include "public/platform/WebURLRequest.h" |
| 64 #include "wtf/ArrayBuffer.h" | 64 #include "wtf/ArrayBuffer.h" |
| 65 #include "wtf/ArrayBufferView.h" | 65 #include "wtf/ArrayBufferView.h" |
| 66 #include "wtf/Assertions.h" | 66 #include "wtf/Assertions.h" |
| 67 #include "wtf/RefCountedLeakCounter.h" | 67 #include "wtf/RefCountedLeakCounter.h" |
| 68 #include "wtf/StdLibExtras.h" | 68 #include "wtf/StdLibExtras.h" |
| 69 #include "wtf/text/CString.h" | 69 #include "wtf/text/CString.h" |
| 70 #include <limits.h> |
| 70 | 71 |
| 71 namespace blink { | 72 namespace blink { |
| 72 | 73 |
| 73 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XM
LHttpRequest")); | 74 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XM
LHttpRequest")); |
| 74 | 75 |
| 75 static bool isSetCookieHeader(const AtomicString& name) | 76 static bool isSetCookieHeader(const AtomicString& name) |
| 76 { | 77 { |
| 77 return equalIgnoringCase(name, "set-cookie") || equalIgnoringCase(name, "set
-cookie2"); | 78 return equalIgnoringCase(name, "set-cookie") || equalIgnoringCase(name, "set
-cookie2"); |
| 78 } | 79 } |
| 79 | 80 |
| (...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1385 m_response = response; | 1386 m_response = response; |
| 1386 if (!m_mimeTypeOverride.isEmpty()) { | 1387 if (!m_mimeTypeOverride.isEmpty()) { |
| 1387 m_response.setHTTPHeaderField("Content-Type", m_mimeTypeOverride); | 1388 m_response.setHTTPHeaderField("Content-Type", m_mimeTypeOverride); |
| 1388 m_finalResponseCharset = extractCharsetFromMediaType(m_mimeTypeOverride)
; | 1389 m_finalResponseCharset = extractCharsetFromMediaType(m_mimeTypeOverride)
; |
| 1389 } | 1390 } |
| 1390 | 1391 |
| 1391 if (m_finalResponseCharset.isEmpty()) | 1392 if (m_finalResponseCharset.isEmpty()) |
| 1392 m_finalResponseCharset = response.textEncodingName(); | 1393 m_finalResponseCharset = response.textEncodingName(); |
| 1393 } | 1394 } |
| 1394 | 1395 |
| 1395 void XMLHttpRequest::parseDocumentChunk(const char* data, int len) | 1396 void XMLHttpRequest::parseDocumentChunk(const char* data, unsigned len) |
| 1396 { | 1397 { |
| 1397 if (!m_responseDocumentParser) { | 1398 if (!m_responseDocumentParser) { |
| 1398 ASSERT(!m_responseDocument); | 1399 ASSERT(!m_responseDocument); |
| 1399 initResponseDocument(); | 1400 initResponseDocument(); |
| 1400 if (!m_responseDocument) | 1401 if (!m_responseDocument) |
| 1401 return; | 1402 return; |
| 1402 | 1403 |
| 1403 m_responseDocumentParser = m_responseDocument->implicitOpen(); | 1404 m_responseDocumentParser = m_responseDocument->implicitOpen(); |
| 1404 m_responseDocumentParser->addClient(this); | 1405 m_responseDocumentParser->addClient(this); |
| 1405 } | 1406 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1429 | 1430 |
| 1430 return decoder.release(); | 1431 return decoder.release(); |
| 1431 } | 1432 } |
| 1432 | 1433 |
| 1433 if (responseIsHTML()) | 1434 if (responseIsHTML()) |
| 1434 return TextResourceDecoder::create("text/html", "UTF-8"); | 1435 return TextResourceDecoder::create("text/html", "UTF-8"); |
| 1435 | 1436 |
| 1436 return TextResourceDecoder::create("text/plain", "UTF-8"); | 1437 return TextResourceDecoder::create("text/plain", "UTF-8"); |
| 1437 } | 1438 } |
| 1438 | 1439 |
| 1439 void XMLHttpRequest::didReceiveData(const char* data, int len) | 1440 void XMLHttpRequest::didReceiveData(const char* data, unsigned len) |
| 1440 { | 1441 { |
| 1441 ASSERT(!m_downloadingToFile); | 1442 ASSERT(!m_downloadingToFile); |
| 1442 | 1443 |
| 1443 if (m_error) | 1444 if (m_error) |
| 1444 return; | 1445 return; |
| 1445 | 1446 |
| 1446 if (m_state < HEADERS_RECEIVED) | 1447 if (m_state < HEADERS_RECEIVED) |
| 1447 changeState(HEADERS_RECEIVED); | 1448 changeState(HEADERS_RECEIVED); |
| 1448 | 1449 |
| 1449 // We need to check for |m_error| again, because |changeState| may trigger | 1450 // We need to check for |m_error| again, because |changeState| may trigger |
| 1450 // readystatechange, and user javascript can cause |abort()|. | 1451 // readystatechange, and user javascript can cause |abort()|. |
| 1451 if (m_error) | 1452 if (m_error) |
| 1452 return; | 1453 return; |
| 1453 | 1454 |
| 1454 if (!len) | 1455 if (!len) |
| 1455 return; | 1456 return; |
| 1456 | 1457 |
| 1457 if (len == -1) | |
| 1458 len = strlen(data); | |
| 1459 | |
| 1460 if (m_responseTypeCode == ResponseTypeDocument && responseIsHTML()) { | 1458 if (m_responseTypeCode == ResponseTypeDocument && responseIsHTML()) { |
| 1461 parseDocumentChunk(data, len); | 1459 parseDocumentChunk(data, len); |
| 1462 } else if (m_responseTypeCode == ResponseTypeDefault || m_responseTypeCode =
= ResponseTypeText || m_responseTypeCode == ResponseTypeJSON || m_responseTypeCo
de == ResponseTypeDocument) { | 1460 } else if (m_responseTypeCode == ResponseTypeDefault || m_responseTypeCode =
= ResponseTypeText || m_responseTypeCode == ResponseTypeJSON || m_responseTypeCo
de == ResponseTypeDocument) { |
| 1463 if (!m_decoder) | 1461 if (!m_decoder) |
| 1464 m_decoder = createDecoder(); | 1462 m_decoder = createDecoder(); |
| 1465 | 1463 |
| 1466 m_responseText = m_responseText.concatenateWith(m_decoder->decode(data,
len)); | 1464 m_responseText = m_responseText.concatenateWith(m_decoder->decode(data,
len)); |
| 1467 } else if (m_responseTypeCode == ResponseTypeArrayBuffer || m_responseTypeCo
de == ResponseTypeBlob) { | 1465 } else if (m_responseTypeCode == ResponseTypeArrayBuffer || m_responseTypeCo
de == ResponseTypeBlob) { |
| 1468 // Buffer binary data. | 1466 // Buffer binary data. |
| 1469 if (!m_binaryResponseBuilder) | 1467 if (!m_binaryResponseBuilder) |
| 1470 m_binaryResponseBuilder = SharedBuffer::create(); | 1468 m_binaryResponseBuilder = SharedBuffer::create(); |
| 1471 m_binaryResponseBuilder->append(data, len); | 1469 m_binaryResponseBuilder->append(data, len); |
| 1472 } else if (m_responseTypeCode == ResponseTypeLegacyStream) { | 1470 } else if (m_responseTypeCode == ResponseTypeLegacyStream) { |
| 1473 if (!m_responseLegacyStream) | 1471 if (!m_responseLegacyStream) |
| 1474 m_responseLegacyStream = Stream::create(executionContext(), response
Type()); | 1472 m_responseLegacyStream = Stream::create(executionContext(), response
Type()); |
| 1475 m_responseLegacyStream->addData(data, len); | 1473 m_responseLegacyStream->addData(data, len); |
| 1476 } else if (m_responseTypeCode == ResponseTypeStream) { | 1474 } else if (m_responseTypeCode == ResponseTypeStream) { |
| 1477 if (!m_responseStream) { | 1475 if (!m_responseStream) { |
| 1478 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTra
its<ArrayBuffer> >(executionContext(), new ReadableStreamSource(this)); | 1476 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTra
its<ArrayBuffer> >(executionContext(), new ReadableStreamSource(this)); |
| 1479 m_responseStream->didSourceStart(); | 1477 m_responseStream->didSourceStart(); |
| 1480 } | 1478 } |
| 1481 m_responseStream->enqueue(ArrayBuffer::create(data, len)); | 1479 m_responseStream->enqueue(ArrayBuffer::create(data, len)); |
| 1482 } | 1480 } |
| 1483 | 1481 |
| 1482 ASSERT(len <= INT_MAX); |
| 1483 |
| 1484 trackProgress(len); | 1484 trackProgress(len); |
| 1485 } | 1485 } |
| 1486 | 1486 |
| 1487 void XMLHttpRequest::didDownloadData(int dataLength) | 1487 void XMLHttpRequest::didDownloadData(int dataLength) |
| 1488 { | 1488 { |
| 1489 if (m_error) | 1489 if (m_error) |
| 1490 return; | 1490 return; |
| 1491 | 1491 |
| 1492 ASSERT(m_downloadingToFile); | 1492 ASSERT(m_downloadingToFile); |
| 1493 | 1493 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1570 visitor->trace(m_responseStream); | 1570 visitor->trace(m_responseStream); |
| 1571 visitor->trace(m_streamSource); | 1571 visitor->trace(m_streamSource); |
| 1572 visitor->trace(m_responseDocument); | 1572 visitor->trace(m_responseDocument); |
| 1573 visitor->trace(m_responseDocumentParser); | 1573 visitor->trace(m_responseDocumentParser); |
| 1574 visitor->trace(m_progressEventThrottle); | 1574 visitor->trace(m_progressEventThrottle); |
| 1575 visitor->trace(m_upload); | 1575 visitor->trace(m_upload); |
| 1576 XMLHttpRequestEventTarget::trace(visitor); | 1576 XMLHttpRequestEventTarget::trace(visitor); |
| 1577 } | 1577 } |
| 1578 | 1578 |
| 1579 } // namespace blink | 1579 } // namespace blink |
| OLD | NEW |