18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@nypop.com>
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Lesser General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Lesser General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Lesser General Public
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License along with this library; if not, write to the Free Software
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef XMLHttpRequest_h
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define XMLHttpRequest_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ActiveDOMObject.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EventListener.h"
25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventNames.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EventTarget.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FormData.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceResponse.h"
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ThreadableLoaderClient.h"
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "XMLHttpRequestProgressEventThrottle.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/OwnPtr.h>
32f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicStringHash.h>
33a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <wtf/text/StringBuilder.h>
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass ArrayBuffer;
38d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass Blob;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Document;
40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass DOMFormData;
41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ResourceRequest;
424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SharedBuffer;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass TextResourceDecoder;
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass ThreadableLoader;
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass XMLHttpRequest : public RefCounted<XMLHttpRequest>, public EventTarget, private ThreadableLoaderClient, public ActiveDOMObject {
47ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_FAST_ALLOCATED;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    static PassRefPtr<XMLHttpRequest> create(ScriptExecutionContext* context) { return adoptRef(new XMLHttpRequest(context)); }
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ~XMLHttpRequest();
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // These exact numeric values are important because JS expects them.
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    enum State {
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UNSENT = 0,
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        OPENED = 1,
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        HEADERS_RECEIVED = 2,
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        LOADING = 3,
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        DONE = 4
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    enum ResponseTypeCode {
624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        ResponseTypeDefault,
634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        ResponseTypeText,
644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        ResponseTypeDocument,
654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        ResponseTypeBlob,
664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        ResponseTypeArrayBuffer
674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    };
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual XMLHttpRequest* toXMLHttpRequest() { return this; }
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void contextDestroyed();
72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool canSuspend() const;
7368513a70bcd92384395513322f1b801e7bf9c729Steve Block    virtual void suspend(ReasonForSuspension);
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void resume();
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void stop();
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ScriptExecutionContext* scriptExecutionContext() const;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
79bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    const KURL& url() const { return m_url; }
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String statusText(ExceptionCode&) const;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int status(ExceptionCode&) const;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    State readyState() const;
835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool withCredentials() const { return m_includeCredentials; }
845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void setWithCredentials(bool, ExceptionCode&);
855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(XHR_RESPONSE_BLOB)
864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    bool asBlob() const { return responseTypeCode() == ResponseTypeBlob; }
875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    void setAsBlob(bool, ExceptionCode&);
885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif
89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void open(const String& method, const KURL&, ExceptionCode&);
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void open(const String& method, const KURL&, bool async, ExceptionCode&);
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void open(const String& method, const KURL&, bool async, const String& user, ExceptionCode&);
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void open(const String& method, const KURL&, bool async, const String& user, const String& password, ExceptionCode&);
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void send(ExceptionCode&);
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void send(Document*, ExceptionCode&);
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void send(const String&, ExceptionCode&);
96d0825bca7fe65beaee391d30da42e937db621564Steve Block    void send(Blob*, ExceptionCode&);
97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void send(DOMFormData*, ExceptionCode&);
984a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    void send(ArrayBuffer*, ExceptionCode&);
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void abort();
100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void setRequestHeader(const AtomicString& name, const String& value, ExceptionCode&);
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void overrideMimeType(const String& override);
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String getAllResponseHeaders(ExceptionCode&) const;
103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    String getResponseHeader(const AtomicString& name, ExceptionCode&) const;
104a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    String responseText(ExceptionCode&);
105a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    Document* responseXML(ExceptionCode&);
1064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    Document* optionalResponseXML() const { return m_responseXML.get(); }
1075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(XHR_RESPONSE_BLOB)
1085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    Blob* responseBlob(ExceptionCode&) const;
1094576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    Blob* optionalResponseBlob() const { return m_responseBlob.get(); }
1104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif
1114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    void setResponseType(const String&, ExceptionCode&);
1134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    String responseType();
1144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    ResponseTypeCode responseTypeCode() const { return m_responseTypeCode; }
1154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // response attribute has custom getter.
1174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    ArrayBuffer* responseArrayBuffer(ExceptionCode&);
1184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    ArrayBuffer* optionalResponseArrayBuffer() const { return m_responseArrayBuffer.get(); }
1194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setLastSendLineNumber(unsigned lineNumber) { m_lastSendLineNumber = lineNumber; }
121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void setLastSendURL(const String& url) { m_lastSendURL = url; }
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    XMLHttpRequestUpload* upload();
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    XMLHttpRequestUpload* optionalUpload() const { return m_upload.get(); }
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    DEFINE_ATTRIBUTE_EVENT_LISTENER(readystatechange);
127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    DEFINE_ATTRIBUTE_EVENT_LISTENER(load);
130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart);
131231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    DEFINE_ATTRIBUTE_EVENT_LISTENER(progress);
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    using RefCounted<XMLHttpRequest>::ref;
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    using RefCounted<XMLHttpRequest>::deref;
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    XMLHttpRequest(ScriptExecutionContext*);
138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void refEventTarget() { ref(); }
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void derefEventTarget() { deref(); }
141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual EventTargetData* eventTargetData();
142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual EventTargetData* ensureEventTargetData();
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Document* document() const;
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT)
147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool usesDashboardBackwardCompatibilityMode() const;
148635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
149635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void didReceiveResponse(const ResourceResponse&);
1522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void didReceiveData(const char* data, int dataLength);
15381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void didFinishLoading(unsigned long identifier, double finishTime);
1548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void didFail(const ResourceError&);
1558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void didFailRedirectCheck();
156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void didReceiveAuthenticationCancellation(const ResourceResponse&);
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String responseMIMEType() const;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool responseIsXML() const;
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool initSend(ExceptionCode&);
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    String getRequestHeader(const AtomicString& name) const;
164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void setRequestHeaderInternal(const AtomicString& name, const String& value);
165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool isSafeRequestHeader(const String&) const;
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void changeState(State newState);
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void callReadyStateChangeListener();
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void dropProtection();
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void internalAbort();
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearResponse();
17281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void clearResponseBuffers();
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearRequest();
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void createRequest(ExceptionCode&);
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void genericError();
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void networkError();
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void abortError();
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<XMLHttpRequestUpload> m_upload;
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    KURL m_url;
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String m_method;
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    HTTPHeaderMap m_requestHeaders;
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<FormData> m_requestEntityBody;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String m_mimeTypeOverride;
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_async;
1895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool m_includeCredentials;
1905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(XHR_RESPONSE_BLOB)
1915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    RefPtr<Blob> m_responseBlob;
1925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
194635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<ThreadableLoader> m_loader;
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    State m_state;
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ResourceResponse m_response;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String m_responseEncoding;
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<TextResourceDecoder> m_decoder;
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
202a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    StringBuilder m_responseBuilder;
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    mutable bool m_createdDocument;
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    mutable RefPtr<Document> m_responseXML;
2054576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
2064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    RefPtr<SharedBuffer> m_binaryResponseBuilder;
2074576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    mutable RefPtr<ArrayBuffer> m_responseArrayBuffer;
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_error;
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool m_uploadEventsAllowed;
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_uploadComplete;
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_sameOriginRequest;
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Used for onprogress tracking
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    long long m_receivedLength;
218231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    unsigned m_lastSendLineNumber;
220635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    String m_lastSendURL;
2218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    ExceptionCode m_exceptionCode;
222cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
223231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    EventTargetData m_eventTargetData;
224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    XMLHttpRequestProgressEventThrottle m_progressEventThrottle;
2264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
2274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // An enum corresponding to the allowed string values for the responseType attribute.
2284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    ResponseTypeCode m_responseTypeCode;
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // XMLHttpRequest_h
234