| 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 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 | 699 |
| 700 void XMLHttpRequest::send(Document* document, ExceptionState& exceptionState) | 700 void XMLHttpRequest::send(Document* document, ExceptionState& exceptionState) |
| 701 { | 701 { |
| 702 WTF_LOG(Network, "XMLHttpRequest %p send() Document %p", this, document); | 702 WTF_LOG(Network, "XMLHttpRequest %p send() Document %p", this, document); |
| 703 | 703 |
| 704 ASSERT(document); | 704 ASSERT(document); |
| 705 | 705 |
| 706 if (!initSend(exceptionState)) | 706 if (!initSend(exceptionState)) |
| 707 return; | 707 return; |
| 708 | 708 |
| 709 RefPtr<FormData> httpBody; | 709 RefPtr<EncodedFormData> httpBody; |
| 710 | 710 |
| 711 if (areMethodAndURLValidForSend()) { | 711 if (areMethodAndURLValidForSend()) { |
| 712 // FIXME: Per https://xhr.spec.whatwg.org/#dom-xmlhttprequest-send the | 712 // FIXME: Per https://xhr.spec.whatwg.org/#dom-xmlhttprequest-send the |
| 713 // Content-Type header and whether to serialize as HTML or XML should | 713 // Content-Type header and whether to serialize as HTML or XML should |
| 714 // depend on |document->isHTMLDocument()|. | 714 // depend on |document->isHTMLDocument()|. |
| 715 if (getRequestHeader("Content-Type").isEmpty()) | 715 if (getRequestHeader("Content-Type").isEmpty()) |
| 716 setRequestHeaderInternal("Content-Type", "application/xml;charset=UT
F-8"); | 716 setRequestHeaderInternal("Content-Type", "application/xml;charset=UT
F-8"); |
| 717 | 717 |
| 718 String body = createMarkup(document); | 718 String body = createMarkup(document); |
| 719 | 719 |
| 720 httpBody = FormData::create(UTF8Encoding().encode(body, WTF::EntitiesFor
Unencodables)); | 720 httpBody = EncodedFormData::create(UTF8Encoding().encode(body, WTF::Enti
tiesForUnencodables)); |
| 721 } | 721 } |
| 722 | 722 |
| 723 createRequest(httpBody.release(), exceptionState); | 723 createRequest(httpBody.release(), exceptionState); |
| 724 } | 724 } |
| 725 | 725 |
| 726 void XMLHttpRequest::send(const String& body, ExceptionState& exceptionState) | 726 void XMLHttpRequest::send(const String& body, ExceptionState& exceptionState) |
| 727 { | 727 { |
| 728 WTF_LOG(Network, "XMLHttpRequest %p send() String '%s'", this, body.utf8().d
ata()); | 728 WTF_LOG(Network, "XMLHttpRequest %p send() String '%s'", this, body.utf8().d
ata()); |
| 729 | 729 |
| 730 if (!initSend(exceptionState)) | 730 if (!initSend(exceptionState)) |
| 731 return; | 731 return; |
| 732 | 732 |
| 733 RefPtr<FormData> httpBody; | 733 RefPtr<EncodedFormData> httpBody; |
| 734 | 734 |
| 735 if (!body.isNull() && areMethodAndURLValidForSend()) { | 735 if (!body.isNull() && areMethodAndURLValidForSend()) { |
| 736 String contentType = getRequestHeader("Content-Type"); | 736 String contentType = getRequestHeader("Content-Type"); |
| 737 if (contentType.isEmpty()) { | 737 if (contentType.isEmpty()) { |
| 738 setRequestHeaderInternal("Content-Type", "text/plain;charset=UTF-8")
; | 738 setRequestHeaderInternal("Content-Type", "text/plain;charset=UTF-8")
; |
| 739 } else { | 739 } else { |
| 740 replaceCharsetInMediaType(contentType, "UTF-8"); | 740 replaceCharsetInMediaType(contentType, "UTF-8"); |
| 741 m_requestHeaders.set("Content-Type", AtomicString(contentType)); | 741 m_requestHeaders.set("Content-Type", AtomicString(contentType)); |
| 742 } | 742 } |
| 743 | 743 |
| 744 httpBody = FormData::create(UTF8Encoding().encode(body, WTF::EntitiesFor
Unencodables)); | 744 httpBody = EncodedFormData::create(UTF8Encoding().encode(body, WTF::Enti
tiesForUnencodables)); |
| 745 } | 745 } |
| 746 | 746 |
| 747 createRequest(httpBody.release(), exceptionState); | 747 createRequest(httpBody.release(), exceptionState); |
| 748 } | 748 } |
| 749 | 749 |
| 750 void XMLHttpRequest::send(Blob* body, ExceptionState& exceptionState) | 750 void XMLHttpRequest::send(Blob* body, ExceptionState& exceptionState) |
| 751 { | 751 { |
| 752 WTF_LOG(Network, "XMLHttpRequest %p send() Blob '%s'", this, body->uuid().ut
f8().data()); | 752 WTF_LOG(Network, "XMLHttpRequest %p send() Blob '%s'", this, body->uuid().ut
f8().data()); |
| 753 | 753 |
| 754 if (!initSend(exceptionState)) | 754 if (!initSend(exceptionState)) |
| 755 return; | 755 return; |
| 756 | 756 |
| 757 RefPtr<FormData> httpBody; | 757 RefPtr<EncodedFormData> httpBody; |
| 758 | 758 |
| 759 if (areMethodAndURLValidForSend()) { | 759 if (areMethodAndURLValidForSend()) { |
| 760 if (getRequestHeader("Content-Type").isEmpty()) { | 760 if (getRequestHeader("Content-Type").isEmpty()) { |
| 761 const String& blobType = body->type(); | 761 const String& blobType = body->type(); |
| 762 if (!blobType.isEmpty() && isValidContentType(blobType)) { | 762 if (!blobType.isEmpty() && isValidContentType(blobType)) { |
| 763 setRequestHeaderInternal("Content-Type", AtomicString(blobType))
; | 763 setRequestHeaderInternal("Content-Type", AtomicString(blobType))
; |
| 764 } | 764 } |
| 765 } | 765 } |
| 766 | 766 |
| 767 // FIXME: add support for uploading bundles. | 767 // FIXME: add support for uploading bundles. |
| 768 httpBody = FormData::create(); | 768 httpBody = EncodedFormData::create(); |
| 769 if (body->hasBackingFile()) { | 769 if (body->hasBackingFile()) { |
| 770 File* file = toFile(body); | 770 File* file = toFile(body); |
| 771 if (!file->path().isEmpty()) | 771 if (!file->path().isEmpty()) |
| 772 httpBody->appendFile(file->path()); | 772 httpBody->appendFile(file->path()); |
| 773 else if (!file->fileSystemURL().isEmpty()) | 773 else if (!file->fileSystemURL().isEmpty()) |
| 774 httpBody->appendFileSystemURL(file->fileSystemURL()); | 774 httpBody->appendFileSystemURL(file->fileSystemURL()); |
| 775 else | 775 else |
| 776 ASSERT_NOT_REACHED(); | 776 ASSERT_NOT_REACHED(); |
| 777 } else { | 777 } else { |
| 778 httpBody->appendBlob(body->uuid(), body->blobDataHandle()); | 778 httpBody->appendBlob(body->uuid(), body->blobDataHandle()); |
| 779 } | 779 } |
| 780 } | 780 } |
| 781 | 781 |
| 782 createRequest(httpBody.release(), exceptionState); | 782 createRequest(httpBody.release(), exceptionState); |
| 783 } | 783 } |
| 784 | 784 |
| 785 void XMLHttpRequest::send(DOMFormData* body, ExceptionState& exceptionState) | 785 void XMLHttpRequest::send(DOMFormData* body, ExceptionState& exceptionState) |
| 786 { | 786 { |
| 787 WTF_LOG(Network, "XMLHttpRequest %p send() DOMFormData %p", this, body); | 787 WTF_LOG(Network, "XMLHttpRequest %p send() DOMFormData %p", this, body); |
| 788 | 788 |
| 789 if (!initSend(exceptionState)) | 789 if (!initSend(exceptionState)) |
| 790 return; | 790 return; |
| 791 | 791 |
| 792 RefPtr<FormData> httpBody; | 792 RefPtr<EncodedFormData> httpBody; |
| 793 | 793 |
| 794 if (areMethodAndURLValidForSend()) { | 794 if (areMethodAndURLValidForSend()) { |
| 795 httpBody = body->createMultiPartFormData(); | 795 httpBody = body->createMultiPartFormData(); |
| 796 | 796 |
| 797 if (getRequestHeader("Content-Type").isEmpty()) { | 797 if (getRequestHeader("Content-Type").isEmpty()) { |
| 798 AtomicString contentType = AtomicString("multipart/form-data; bounda
ry=", AtomicString::ConstructFromLiteral) + httpBody->boundary().data(); | 798 AtomicString contentType = AtomicString("multipart/form-data; bounda
ry=", AtomicString::ConstructFromLiteral) + httpBody->boundary().data(); |
| 799 setRequestHeaderInternal("Content-Type", contentType); | 799 setRequestHeaderInternal("Content-Type", contentType); |
| 800 } | 800 } |
| 801 } | 801 } |
| 802 | 802 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 815 WTF_LOG(Network, "XMLHttpRequest %p send() ArrayBufferView %p", this, body); | 815 WTF_LOG(Network, "XMLHttpRequest %p send() ArrayBufferView %p", this, body); |
| 816 | 816 |
| 817 sendBytesData(body->baseAddress(), body->byteLength(), exceptionState); | 817 sendBytesData(body->baseAddress(), body->byteLength(), exceptionState); |
| 818 } | 818 } |
| 819 | 819 |
| 820 void XMLHttpRequest::sendBytesData(const void* data, size_t length, ExceptionSta
te& exceptionState) | 820 void XMLHttpRequest::sendBytesData(const void* data, size_t length, ExceptionSta
te& exceptionState) |
| 821 { | 821 { |
| 822 if (!initSend(exceptionState)) | 822 if (!initSend(exceptionState)) |
| 823 return; | 823 return; |
| 824 | 824 |
| 825 RefPtr<FormData> httpBody; | 825 RefPtr<EncodedFormData> httpBody; |
| 826 | 826 |
| 827 if (areMethodAndURLValidForSend()) { | 827 if (areMethodAndURLValidForSend()) { |
| 828 httpBody = FormData::create(data, length); | 828 httpBody = EncodedFormData::create(data, length); |
| 829 } | 829 } |
| 830 | 830 |
| 831 createRequest(httpBody.release(), exceptionState); | 831 createRequest(httpBody.release(), exceptionState); |
| 832 } | 832 } |
| 833 | 833 |
| 834 void XMLHttpRequest::sendForInspectorXHRReplay(PassRefPtr<FormData> formData, Ex
ceptionState& exceptionState) | 834 void XMLHttpRequest::sendForInspectorXHRReplay(PassRefPtr<EncodedFormData> formD
ata, ExceptionState& exceptionState) |
| 835 { | 835 { |
| 836 createRequest(formData ? formData->deepCopy() : nullptr, exceptionState); | 836 createRequest(formData ? formData->deepCopy() : nullptr, exceptionState); |
| 837 m_exceptionCode = exceptionState.code(); | 837 m_exceptionCode = exceptionState.code(); |
| 838 } | 838 } |
| 839 | 839 |
| 840 void XMLHttpRequest::throwForLoadFailureIfNeeded(ExceptionState& exceptionState,
const String& reason) | 840 void XMLHttpRequest::throwForLoadFailureIfNeeded(ExceptionState& exceptionState,
const String& reason) |
| 841 { | 841 { |
| 842 if (m_error && !m_exceptionCode) | 842 if (m_error && !m_exceptionCode) |
| 843 m_exceptionCode = NetworkError; | 843 m_exceptionCode = NetworkError; |
| 844 | 844 |
| 845 if (!m_exceptionCode) | 845 if (!m_exceptionCode) |
| 846 return; | 846 return; |
| 847 | 847 |
| 848 String message = "Failed to load '" + m_url.elidedString() + "'"; | 848 String message = "Failed to load '" + m_url.elidedString() + "'"; |
| 849 if (reason.isNull()) { | 849 if (reason.isNull()) { |
| 850 message.append("."); | 850 message.append("."); |
| 851 } else { | 851 } else { |
| 852 message.append(": "); | 852 message.append(": "); |
| 853 message.append(reason); | 853 message.append(reason); |
| 854 } | 854 } |
| 855 | 855 |
| 856 exceptionState.throwDOMException(m_exceptionCode, message); | 856 exceptionState.throwDOMException(m_exceptionCode, message); |
| 857 } | 857 } |
| 858 | 858 |
| 859 void XMLHttpRequest::createRequest(PassRefPtr<FormData> httpBody, ExceptionState
& exceptionState) | 859 void XMLHttpRequest::createRequest(PassRefPtr<EncodedFormData> httpBody, Excepti
onState& exceptionState) |
| 860 { | 860 { |
| 861 // Only GET request is supported for blob URL. | 861 // Only GET request is supported for blob URL. |
| 862 if (m_url.protocolIs("blob") && m_method != "GET") { | 862 if (m_url.protocolIs("blob") && m_method != "GET") { |
| 863 handleNetworkError(); | 863 handleNetworkError(); |
| 864 | 864 |
| 865 if (!m_async) { | 865 if (!m_async) { |
| 866 throwForLoadFailureIfNeeded(exceptionState, "'GET' is the only metho
d allowed for 'blob:' URLs."); | 866 throwForLoadFailureIfNeeded(exceptionState, "'GET' is the only metho
d allowed for 'blob:' URLs."); |
| 867 } | 867 } |
| 868 return; | 868 return; |
| 869 } | 869 } |
| (...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1697 visitor->trace(m_responseDocumentParser); | 1697 visitor->trace(m_responseDocumentParser); |
| 1698 visitor->trace(m_progressEventThrottle); | 1698 visitor->trace(m_progressEventThrottle); |
| 1699 visitor->trace(m_upload); | 1699 visitor->trace(m_upload); |
| 1700 visitor->trace(m_blobLoader); | 1700 visitor->trace(m_blobLoader); |
| 1701 XMLHttpRequestEventTarget::trace(visitor); | 1701 XMLHttpRequestEventTarget::trace(visitor); |
| 1702 DocumentParserClient::trace(visitor); | 1702 DocumentParserClient::trace(visitor); |
| 1703 ActiveDOMObject::trace(visitor); | 1703 ActiveDOMObject::trace(visitor); |
| 1704 } | 1704 } |
| 1705 | 1705 |
| 1706 } // namespace blink | 1706 } // namespace blink |
| OLD | NEW |