diff options
author | Steve Block <steveblock@google.com> | 2011-05-13 06:44:40 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-05-13 06:44:40 -0700 |
commit | 08014c20784f3db5df3a89b73cce46037b77eb59 (patch) | |
tree | 47749210d31e19e6e2f64036fa8fae2ad693476f /Source/WebCore/xml/XMLHttpRequest.h | |
parent | 860220379e56aeb66424861ad602b07ee22b4055 (diff) | |
parent | 4c3661f7918f8b3f139f824efb7855bedccb4c94 (diff) | |
download | external_webkit-08014c20784f3db5df3a89b73cce46037b77eb59.zip external_webkit-08014c20784f3db5df3a89b73cce46037b77eb59.tar.gz external_webkit-08014c20784f3db5df3a89b73cce46037b77eb59.tar.bz2 |
Merge changes Ide388898,Ic49f367c,I1158a808,Iacb6ca5d,I2100dd3a,I5c1abe54,Ib0ef9902,I31dbc523,I570314b3
* changes:
Merge WebKit at r75315: Update WebKit version
Merge WebKit at r75315: Add FrameLoaderClient PageCache stubs
Merge WebKit at r75315: Stub out AXObjectCache::remove()
Merge WebKit at r75315: Fix ImageBuffer
Merge WebKit at r75315: Fix PluginData::initPlugins()
Merge WebKit at r75315: Fix conflicts
Merge WebKit at r75315: Fix Makefiles
Merge WebKit at r75315: Move Android-specific WebCore files to Source
Merge WebKit at r75315: Initial merge by git.
Diffstat (limited to 'Source/WebCore/xml/XMLHttpRequest.h')
-rw-r--r-- | Source/WebCore/xml/XMLHttpRequest.h | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/Source/WebCore/xml/XMLHttpRequest.h b/Source/WebCore/xml/XMLHttpRequest.h new file mode 100644 index 0000000..bc6815d --- /dev/null +++ b/Source/WebCore/xml/XMLHttpRequest.h @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@nypop.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef XMLHttpRequest_h +#define XMLHttpRequest_h + +#include "ActiveDOMObject.h" +#include "EventListener.h" +#include "EventNames.h" +#include "EventTarget.h" +#include "FormData.h" +#include "ResourceResponse.h" +#include "ThreadableLoaderClient.h" +#include "XMLHttpRequestProgressEventThrottle.h" +#include <wtf/OwnPtr.h> +#include <wtf/text/AtomicStringHash.h> +#include <wtf/text/StringBuilder.h> + +namespace WebCore { + +class ArrayBuffer; +class Blob; +class Document; +class DOMFormData; +class ResourceRequest; +class SharedBuffer; +class TextResourceDecoder; +class ThreadableLoader; + +class XMLHttpRequest : public RefCounted<XMLHttpRequest>, public EventTarget, private ThreadableLoaderClient, public ActiveDOMObject { +public: + static PassRefPtr<XMLHttpRequest> create(ScriptExecutionContext* context) { return adoptRef(new XMLHttpRequest(context)); } + ~XMLHttpRequest(); + + // These exact numeric values are important because JS expects them. + enum State { + UNSENT = 0, + OPENED = 1, + HEADERS_RECEIVED = 2, + LOADING = 3, + DONE = 4 + }; + + enum ResponseTypeCode { + ResponseTypeDefault, + ResponseTypeText, + ResponseTypeDocument, + ResponseTypeBlob, + ResponseTypeArrayBuffer + }; + + virtual XMLHttpRequest* toXMLHttpRequest() { return this; } + + virtual void contextDestroyed(); + virtual bool canSuspend() const; + virtual void suspend(ReasonForSuspension); + virtual void resume(); + virtual void stop(); + + virtual ScriptExecutionContext* scriptExecutionContext() const; + + const KURL& url() const { return m_url; } + String statusText(ExceptionCode&) const; + int status(ExceptionCode&) const; + State readyState() const; + bool withCredentials() const { return m_includeCredentials; } + void setWithCredentials(bool, ExceptionCode&); +#if ENABLE(XHR_RESPONSE_BLOB) + bool asBlob() const { return responseTypeCode() == ResponseTypeBlob; } + void setAsBlob(bool, ExceptionCode&); +#endif + void open(const String& method, const KURL&, ExceptionCode&); + void open(const String& method, const KURL&, bool async, ExceptionCode&); + void open(const String& method, const KURL&, bool async, const String& user, ExceptionCode&); + void open(const String& method, const KURL&, bool async, const String& user, const String& password, ExceptionCode&); + void send(ExceptionCode&); + void send(Document*, ExceptionCode&); + void send(const String&, ExceptionCode&); + void send(Blob*, ExceptionCode&); + void send(DOMFormData*, ExceptionCode&); +#if ENABLE(3D_CANVAS) || ENABLE(BLOB) + void send(ArrayBuffer*, ExceptionCode&); +#endif + void abort(); + void setRequestHeader(const AtomicString& name, const String& value, ExceptionCode&); + void overrideMimeType(const String& override); + String getAllResponseHeaders(ExceptionCode&) const; + String getResponseHeader(const AtomicString& name, ExceptionCode&) const; + String responseText(ExceptionCode&); + Document* responseXML(ExceptionCode&); + Document* optionalResponseXML() const { return m_responseXML.get(); } +#if ENABLE(XHR_RESPONSE_BLOB) + Blob* responseBlob(ExceptionCode&) const; + Blob* optionalResponseBlob() const { return m_responseBlob.get(); } +#endif + + void setResponseType(const String&, ExceptionCode&); + String responseType(); + ResponseTypeCode responseTypeCode() const { return m_responseTypeCode; } + +#if ENABLE(3D_CANVAS) || ENABLE(BLOB) + // response attribute has custom getter. + ArrayBuffer* responseArrayBuffer(ExceptionCode&); + ArrayBuffer* optionalResponseArrayBuffer() const { return m_responseArrayBuffer.get(); } +#endif + + void setLastSendLineNumber(unsigned lineNumber) { m_lastSendLineNumber = lineNumber; } + void setLastSendURL(const String& url) { m_lastSendURL = url; } + + XMLHttpRequestUpload* upload(); + XMLHttpRequestUpload* optionalUpload() const { return m_upload.get(); } + + DEFINE_ATTRIBUTE_EVENT_LISTENER(readystatechange); + DEFINE_ATTRIBUTE_EVENT_LISTENER(abort); + DEFINE_ATTRIBUTE_EVENT_LISTENER(error); + DEFINE_ATTRIBUTE_EVENT_LISTENER(load); + DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart); + DEFINE_ATTRIBUTE_EVENT_LISTENER(progress); + + using RefCounted<XMLHttpRequest>::ref; + using RefCounted<XMLHttpRequest>::deref; + +private: + XMLHttpRequest(ScriptExecutionContext*); + + virtual void refEventTarget() { ref(); } + virtual void derefEventTarget() { deref(); } + virtual EventTargetData* eventTargetData(); + virtual EventTargetData* ensureEventTargetData(); + + Document* document() const; + +#if ENABLE(DASHBOARD_SUPPORT) + bool usesDashboardBackwardCompatibilityMode() const; +#endif + + virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent); + virtual void didReceiveResponse(const ResourceResponse&); + virtual void didReceiveData(const char* data, int lengthReceived); + virtual void didFinishLoading(unsigned long identifier); + virtual void didFail(const ResourceError&); + virtual void didFailRedirectCheck(); + virtual void didReceiveAuthenticationCancellation(const ResourceResponse&); + + String responseMIMEType() const; + bool responseIsXML() const; + + bool initSend(ExceptionCode&); + + String getRequestHeader(const AtomicString& name) const; + void setRequestHeaderInternal(const AtomicString& name, const String& value); + bool isSafeRequestHeader(const String&) const; + + void changeState(State newState); + void callReadyStateChangeListener(); + void dropProtection(); + void internalAbort(); + void clearResponse(); + void clearRequest(); + + void createRequest(ExceptionCode&); + + void genericError(); + void networkError(); + void abortError(); + + RefPtr<XMLHttpRequestUpload> m_upload; + + KURL m_url; + String m_method; + HTTPHeaderMap m_requestHeaders; + RefPtr<FormData> m_requestEntityBody; + String m_mimeTypeOverride; + bool m_async; + bool m_includeCredentials; +#if ENABLE(XHR_RESPONSE_BLOB) + RefPtr<Blob> m_responseBlob; +#endif + + RefPtr<ThreadableLoader> m_loader; + State m_state; + + ResourceResponse m_response; + String m_responseEncoding; + + RefPtr<TextResourceDecoder> m_decoder; + + StringBuilder m_responseBuilder; + mutable bool m_createdDocument; + mutable RefPtr<Document> m_responseXML; + +#if ENABLE(3D_CANVAS) || ENABLE(BLOB) + RefPtr<SharedBuffer> m_binaryResponseBuilder; + mutable RefPtr<ArrayBuffer> m_responseArrayBuffer; +#endif + + bool m_error; + + bool m_uploadEventsAllowed; + bool m_uploadComplete; + + bool m_sameOriginRequest; + + // Used for onprogress tracking + long long m_receivedLength; + + unsigned m_lastSendLineNumber; + String m_lastSendURL; + ExceptionCode m_exceptionCode; + + EventTargetData m_eventTargetData; + + XMLHttpRequestProgressEventThrottle m_progressEventThrottle; + + // An enum corresponding to the allowed string values for the responseType attribute. + ResponseTypeCode m_responseTypeCode; +}; + +} // namespace WebCore + +#endif // XMLHttpRequest_h |