#ifndef XMLHTTPREQUEST_H_
#define XMLHTTPREQUEST_H_
#include "KURL.h"
#include "PlatformString.h"
#include "TransferJobClient.h"
#include <wtf/Vector.h>
namespace WebCore {
class Decoder;
class Document;
class EventListener;
class String;
typedef int ExceptionCode;
enum XMLHttpRequestState {
Uninitialized = 0, Loading = 1, Loaded = 2, Interactive = 3, Completed = 4 };
class XMLHttpRequest : public Shared<XMLHttpRequest>, TransferJobClient {
public:
XMLHttpRequest(Document*);
~XMLHttpRequest();
static void detachRequests(Document*);
static void cancelRequests(Document*);
String getStatusText() const;
int getStatus() const;
XMLHttpRequestState getReadyState() const;
void open(const String& method, const KURL& url, bool async, const String& user, const String& password, ExceptionCode& ec);
void send(const String& body, ExceptionCode& ec);
void abort();
void setRequestHeader(const String& name, const String &value, ExceptionCode& ec);
void overrideMIMEType(const String& override);
String getAllResponseHeaders() const;
String getResponseHeader(const String& name) const;
String getResponseText() const;
Document* getResponseXML() const;
void setOnReadyStateChangeListener(EventListener*);
EventListener* onReadyStateChangeListener() const;
void setOnLoadListener(EventListener*);
EventListener* onLoadListener() const;
private:
bool urlMatchesDocumentDomain(const KURL&) const;
virtual void receivedRedirect(TransferJob*, const KURL&);
virtual void receivedData(TransferJob*, const char *data, int size);
virtual void receivedAllData(TransferJob*);
void processSyncLoadResults(const Vector<char>& data, const KURL& finalURL, const DeprecatedString& headers);
bool responseIsXML() const;
DeprecatedString getRequestHeader(const DeprecatedString& name) const;
static DeprecatedString getSpecificHeader(const DeprecatedString& headers, const DeprecatedString& name);
void changeState(XMLHttpRequestState newState);
void callReadyStateChangeListener();
Document* m_doc;
RefPtr<EventListener> m_onReadyStateChangeListener;
RefPtr<EventListener> m_onLoadListener;
KURL m_url;
DeprecatedString m_method;
bool m_async;
DeprecatedString m_requestHeaders;
TransferJob* m_job;
XMLHttpRequestState m_state;
RefPtr<Decoder> m_decoder;
String m_encoding;
String m_responseHeaders;
String m_mimeTypeOverride;
DeprecatedString m_response;
mutable bool m_createdDocument;
mutable RefPtr<Document> m_responseXML;
bool m_aborted;
};
}
#endif