xmlhttprequest.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _XMLHTTPREQUEST_H_
00022 #define _XMLHTTPREQUEST_H_
00023
00024 #include "ecma/kjs_binding.h"
00025 #include "ecma/kjs_dom.h"
00026 #include "misc/decoder.h"
00027 #include "kio/jobclasses.h"
00028
00029 namespace KJS {
00030
00031 class JSEventListener;
00032 class XMLHttpRequestQObject;
00033
00034
00035 enum XMLHttpRequestState {
00036 Uninitialized = 0,
00037 Loading = 1,
00038 Loaded = 2,
00039 Interactive = 3,
00040 Completed = 4
00041 };
00042
00043 class XMLHttpRequestConstructorImp : public ObjectImp {
00044 public:
00045 XMLHttpRequestConstructorImp(ExecState *exec, const DOM::Document &d);
00046 virtual bool implementsConstruct() const;
00047 virtual Object construct(ExecState *exec, const List &args);
00048 private:
00049 DOM::Document doc;
00050 };
00051
00052 class XMLHttpRequest : public DOMObject {
00053 public:
00054 XMLHttpRequest(ExecState *, const DOM::Document &d);
00055 ~XMLHttpRequest();
00056 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00057 Value getValueProperty(ExecState *exec, int token) const;
00058 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00059 void putValueProperty(ExecState *exec, int token, const Value& value, int );
00060 virtual bool toBoolean(ExecState *) const { return true; }
00061 virtual const ClassInfo* classInfo() const { return &info; }
00062 static const ClassInfo info;
00063 enum { Onload, Onreadystatechange, ReadyState, ResponseText, ResponseXML, Status, StatusText, Abort, GetAllResponseHeaders, GetResponseHeader, Open, Send, SetRequestHeader };
00064
00065 private:
00066 friend class XMLHttpRequestProtoFunc;
00067 friend class XMLHttpRequestQObject;
00068
00069 Value getStatusText() const;
00070 Value getStatus() const;
00071 bool urlMatchesDocumentDomain(const KURL&) const;
00072
00073 XMLHttpRequestQObject *qObject;
00074
00075 #ifdef APPLE_CHANGES
00076 void slotData( KIO::Job* job, const char *data, int size );
00077 #else
00078 void slotData( KIO::Job* job, const QByteArray &data );
00079 #endif
00080 void slotFinished( KIO::Job* );
00081 void slotRedirection( KIO::Job*, const KURL& );
00082
00083 void processSyncLoadResults(const QByteArray &data, const KURL &finalURL, const QString &headers);
00084
00085 void open(const QString& _method, const KURL& _url, bool _async);
00086 void send(const QString& _body);
00087 void abort();
00088 void setRequestHeader(const QString& name, const QString &value);
00089 Value getAllResponseHeaders() const;
00090 Value getResponseHeader(const QString& name) const;
00091
00092 void changeState(XMLHttpRequestState newState);
00093
00094 QGuardedPtr<DOM::DocumentImpl> doc;
00095
00096 KURL url;
00097 QString method;
00098 bool async;
00099 QString requestHeaders;
00100
00101 KIO::TransferJob * job;
00102
00103 XMLHttpRequestState state;
00104 JSEventListener *onReadyStateChangeListener;
00105 JSEventListener *onLoadListener;
00106
00107 khtml::Decoder *decoder;
00108 QString encoding;
00109 QString responseHeaders;
00110
00111 QString response;
00112 mutable bool createdDocument;
00113 mutable bool typeIsXML;
00114 mutable DOM::Document responseXML;
00115
00116 bool aborted;
00117 };
00118
00119
00120 class XMLHttpRequestQObject : public QObject {
00121 Q_OBJECT
00122
00123 public:
00124 XMLHttpRequestQObject(XMLHttpRequest *_jsObject);
00125
00126 public slots:
00127 void slotData( KIO::Job* job, const QByteArray &data );
00128 void slotFinished( KIO::Job* job );
00129 void slotRedirection( KIO::Job* job, const KURL& url);
00130
00131 private:
00132 XMLHttpRequest *jsObject;
00133 };
00134
00135 }
00136
00137 #endif
This file is part of the documentation for khtml Library Version 3.3.1.