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 #ifdef APPLE_CHANGES
00084 void processSyncLoadResults(const QByteArray &data, const KURL &finalURL, const QString &headers);
00085 #endif
00086
00087 void open(const QString& _method, const KURL& _url, bool _async);
00088 void send(const QString& _body);
00089 void abort();
00090 void setRequestHeader(const QString& name, const QString &value);
00091 Value getAllResponseHeaders() const;
00092 Value getResponseHeader(const QString& name) const;
00093
00094 void changeState(XMLHttpRequestState newState);
00095
00096 QGuardedPtr<DOM::DocumentImpl> doc;
00097
00098 KURL url;
00099 QString method;
00100 bool async;
00101 QString requestHeaders;
00102
00103 KIO::TransferJob * job;
00104
00105 XMLHttpRequestState state;
00106 JSEventListener *onReadyStateChangeListener;
00107 JSEventListener *onLoadListener;
00108
00109 khtml::Decoder *decoder;
00110 QString encoding;
00111 QString responseHeaders;
00112
00113 QString response;
00114 mutable bool createdDocument;
00115 mutable bool typeIsXML;
00116 mutable DOM::Document responseXML;
00117
00118 bool aborted;
00119 };
00120
00121
00122 class XMLHttpRequestQObject : public QObject {
00123 Q_OBJECT
00124
00125 public:
00126 XMLHttpRequestQObject(XMLHttpRequest *_jsObject);
00127
00128 public slots:
00129 void slotData( KIO::Job* job, const QByteArray &data );
00130 void slotFinished( KIO::Job* job );
00131 void slotRedirection( KIO::Job* job, const KURL& url);
00132
00133 private:
00134 XMLHttpRequest *jsObject;
00135 };
00136
00137 }
00138
00139 #endif
This file is part of the documentation for khtml Library Version 3.3.0.