[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/work/unity/WebKit/WebCore/platform
From: Nikolas Zimmermann <wildfox () kde ! org>
Date: 2006-08-24 11:30:25
Message-ID: 1156419025.818314.26809.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 576600 by wildfox:
Readded POST support - this time way better with KIO.
-> Finally receivedResponse() is called once, instead
of multiple times (because of libcurl!)
-> retrieveCharset() could be implemented.
Also changed indention of these two classes, to follow
the WebKit style guide - as I plan to submit them later...
M +5 -1 TransferJobClient.h
M +3 -4 TransferJobInternal.h
M +5 -0 qt/FrameQt.cpp
M +52 -46 qt/TransferJobManager.cpp
M +9 -9 qt/TransferJobManager.h
M +26 -29 qt/TransferJobQt.cpp
--- branches/work/unity/WebKit/WebCore/platform/TransferJobClient.h #576599:576600
@@ -38,6 +38,10 @@
#endif
#endif
+#if PLATFORM(QT)
+#include <QString>
+#endif
+
namespace WebCore {
#ifdef __APPLE__
@@ -45,7 +49,7 @@
typedef NSURLResponse* PlatformResponse;
#elif PLATFORM(QT)
typedef void* PlatformData;
- typedef char* PlatformResponse;
+ typedef QString PlatformResponse;
#else
// Not sure what the strategy for this will be on other platforms.
typedef struct PlatformDataStruct *PlatformData;
--- branches/work/unity/WebKit/WebCore/platform/TransferJobInternal.h #576599:576600
@@ -39,10 +39,6 @@
typedef void CURL;
#endif
-#if PLATFORM(QT)
-#include <kio/job.h>
-#endif
-
// The allocations and releases in TransferJobInternal are
// Cocoa-exception-free (either simple Foundation classes or
// KWQResourceLoader which avoids doing work in dealloc).
@@ -145,6 +141,9 @@
#if PLATFORM(GDK)
CURL *m_handle;
#endif
+#if PLATFORM(QT)
+ QString m_response;
+#endif
};
} // namespace WebCore
--- branches/work/unity/WebKit/WebCore/platform/qt/FrameQt.cpp #576599:576600
@@ -150,6 +150,11 @@
{
qDebug("openURL(%s)", url.url().latin1());
didOpenURL(url);
+
+ // ResourceRequest request(resourceRequest());
+ // request.m_responseMIMEType = "image/svg+xml";
+ // setResourceRequest(request);
+
begin(url);
TransferJob* job = new TransferJob(this, "GET", url);
job->start(document()->docLoader());
--- branches/work/unity/WebKit/WebCore/platform/qt/TransferJobManager.cpp \
#576599:576600 @@ -35,9 +35,11 @@
namespace WebCore {
-static TransferJobManager *s_self = 0;
+static TransferJobManager* s_self = 0;
-TransferJobManager::TransferJobManager() : m_jobToKioMap(), m_kioToJobMap()
+TransferJobManager::TransferJobManager()
+ : m_jobToKioMap()
+ , m_kioToJobMap()
{
}
@@ -45,36 +47,36 @@
{
}
-TransferJobManager *TransferJobManager::self()
+TransferJobManager* TransferJobManager::self()
{
- if(!s_self)
+ if (!s_self)
s_self = new TransferJobManager();
return s_self;
}
-void TransferJobManager::slotData(KIO::Job *kioJob, const QByteArray &data)
+void TransferJobManager::slotData(KIO::Job* kioJob, const QByteArray& data)
{
qDebug("TransferJobManager::slotData() kioJob=%p", kioJob);
- TransferJob *job = 0;
+ TransferJob* job = 0;
// Check if we know about 'kioJob'...
- QMap<KIO::Job *, TransferJob *>::const_iterator it = m_kioToJobMap.find(kioJob);
- if(it != m_kioToJobMap.end())
+ QMap<KIO::Job*, TransferJob*>::const_iterator it = m_kioToJobMap.find(kioJob);
+ if (it != m_kioToJobMap.end())
job = it.value();
- if(!job)
+ if (!job)
return;
- TransferJobInternal *d = job->getInternal();
- if(!d || !d->client)
+ TransferJobInternal* d = job->getInternal();
+ if (!d || !d->client)
return;
d->client->receivedData(job, data.data(), data.size());
}
-void TransferJobManager::slotMimetype(KIO::Job *job, const QString &type)
+void TransferJobManager::slotMimetype(KIO::Job* job, const QString& type)
{
qDebug("TransferJobManager::slotMimetype(), job=%p, type=%s", job, \
qPrintable(type)); }
@@ -83,42 +85,49 @@
{
qDebug("TransferJobManager::slotResult(), kjob=%p", kjob);
- KIO::Job *kioJob = qobject_cast<KIO::Job *>(kjob);
- if(!kioJob)
+ KIO::Job* kioJob = qobject_cast<KIO::Job*>(kjob);
+ if (!kioJob)
return;
- TransferJob *job = 0;
+ TransferJob* job = 0;
// Check if we know about 'kioJob'...
- QMap<KIO::Job *, TransferJob *>::const_iterator it = m_kioToJobMap.find(kioJob);
- if(it != m_kioToJobMap.end())
+ QMap<KIO::Job*, TransferJob*>::const_iterator it = m_kioToJobMap.find(kioJob);
+ if (it != m_kioToJobMap.end())
job = it.value();
- if(!job)
+ if (!job)
return;
job->setError(kjob->error());
remove(job);
}
-void TransferJobManager::remove(TransferJob *job)
+void TransferJobManager::remove(TransferJob* job)
{
qDebug("TransferJobManager::remove(), job=%p", job);
- TransferJobInternal *d = job->getInternal();
- if(!d || !d->client)
+ TransferJobInternal* d = job->getInternal();
+ if (!d || !d->client)
return;
- KIO::Job *kioJob = 0;
+ KIO::Job* kioJob = 0;
// Check if we know about 'job'...
- QMap<TransferJob *, KIO::Job *>::const_iterator it = m_jobToKioMap.find(job);
- if(it != m_jobToKioMap.end())
+ QMap<TransferJob*, KIO::Job*>::const_iterator it = m_jobToKioMap.find(job);
+ if (it != m_jobToKioMap.end())
kioJob = it.value();
- if(!kioJob)
+ if (!kioJob)
return;
+ if (job->method() == "POST") {
+ // Will take care of informing our client...
+ // This must be called before receivedAllData(),
+ // otherwhise assembleResponseHeaders() is called too early...
+ job->receivedResponse(kioJob->queryMetaData("HTTP-Headers"));
+ }
+
d->client->receivedAllData(job, 0);
d->client->receivedAllData(job);
@@ -126,40 +135,37 @@
m_kioToJobMap.remove(kioJob);
}
-void TransferJobManager::add(TransferJob *job)
+void TransferJobManager::add(TransferJob* job)
{
- TransferJobInternal *d = job->getInternal();
+ TransferJobInternal* d = job->getInternal();
DeprecatedString url = d->URL.url();
qDebug("TransferJobManager::add(), job=%p, url=%s", job, url.latin1());
- if(job->method() == "GET")
- {
- KIO::Job *kioJob = KIO::get(KUrl(toQString(url)), false, false);
+ KIO::Job* kioJob = 0;
- m_jobToKioMap.insert(job, kioJob);
- m_kioToJobMap.insert(kioJob, job);
+ if (job->method() == "GET")
+ kioJob = KIO::get(KUrl(toQString(url)), false, false);
+ else if (job->method() == "POST") {
+ DeprecatedString postData = job->postData().flattenToString();
+ QByteArray postDataArray(postData.ascii(), postData.length());
- QObject::connect(kioJob, SIGNAL(data(KIO::Job *, const QByteArray &)), this, \
SLOT(slotData(KIO::Job *, const QByteArray &)));
- QObject::connect(kioJob, SIGNAL(mimetype(KIO::Job *, const QString &)), \
this, SLOT(slotMimetype(KIO::Job *, const QString &)));
- QObject::connect(kioJob, SIGNAL(result(KJob *)), this, SLOT(slotResult(KJob \
*))); + kioJob = KIO::http_post(KUrl(toQString(url)), postDataArray, false);
+ kioJob->addMetaData("PropagateHttpHeader", "true");
+ kioJob->addMetaData("content-type", "Content-Type: \
application/x-www-form-urlencoded"); }
- /*
- if(job->method() == "POST") {
- DeprecatedString postData = job->postData().flattenToString();
+ Q_ASSERT(kioJob != 0);
- char *postDataString = (char *) malloc(postData.length() + 1);
- strncpy(postDataString, postData.ascii(), postData.length());
- postDataString[postData.length()] = '\0';
+ QObject::connect(kioJob, SIGNAL(data(KIO::Job*, const QByteArray&)), this, \
SLOT(slotData(KIO::Job*, const QByteArray&))); + QObject::connect(kioJob, \
SIGNAL(mimetype(KIO::Job*, const QString&)), this, SLOT(slotMimetype(KIO::Job*, const \
QString&))); + QObject::connect(kioJob, SIGNAL(result(KJob*)), this, \
SLOT(slotResult(KJob*)));
- // TODO: Do it properly after we got rid of libcurl! (also leaks the \
headerlist. hmpf.)
- curl_easy_setopt(d->m_handle, CURLOPT_POSTFIELDS, postDataString);
- }
- */
+ m_jobToKioMap.insert(job, kioJob);
+ m_kioToJobMap.insert(kioJob, job);
}
-void TransferJobManager::cancel(TransferJob *job)
+void TransferJobManager::cancel(TransferJob* job)
{
qDebug("TransferJobManager::cancel(), job=%p", job);
--- branches/work/unity/WebKit/WebCore/platform/qt/TransferJobManager.h \
#576599:576600 @@ -40,25 +40,25 @@
class TransferJobManager : public QObject {
Q_OBJECT
public:
- static TransferJobManager *self();
+ static TransferJobManager* self();
- void add(TransferJob *job);
- void cancel(TransferJob *job);
+ void add(TransferJob*);
+ void cancel(TransferJob*);
public Q_SLOTS:
- void slotData(KIO::Job *job, const QByteArray &data);
- void slotMimetype(KIO::Job *job, const QString &type);
- void slotResult(KJob *job);
+ void slotData(KIO::Job*, const QByteArray& data);
+ void slotMimetype(KIO::Job*, const QString& type);
+ void slotResult(KJob*);
private:
TransferJobManager();
~TransferJobManager();
- void remove(TransferJob *job);
+ void remove(TransferJob*);
// KIO Job <-> WebKit Job mapping
- QMap<TransferJob *, KIO::Job *> m_jobToKioMap;
- QMap<KIO::Job *, TransferJob *> m_kioToJobMap;
+ QMap<TransferJob*, KIO::Job*> m_jobToKioMap;
+ QMap<KIO::Job*, TransferJob*> m_kioToJobMap;
};
}
--- branches/work/unity/WebKit/WebCore/platform/qt/TransferJobQt.cpp #576599:576600
@@ -27,11 +27,14 @@
#include "config.h"
#include "HelperQt.h"
-#include "TransferJob.h"
+#include <QDebug>
+#include <kio/job.h>
+
#include "DocLoader.h"
-#include "TransferJobInternal.h"
+#include "TransferJob.h"
#include "TransferJobManager.h"
+#include "TransferJobInternal.h"
namespace WebCore {
@@ -44,7 +47,7 @@
cancel();
}
-bool TransferJob::start(DocLoader *docLoader)
+bool TransferJob::start(DocLoader*)
{
TransferJobManager::self()->add(this);
return true;
@@ -57,50 +60,44 @@
void TransferJob::assembleResponseHeaders() const
{
- /*
if (!d->assembledResponseHeaders) {
- d->responseHeaders = DeprecatedString(d->response.constData(), \
d->response.length());
-
+ d->responseHeaders = DeprecatedString(d->m_response.constData(), \
d->m_response.length()); d->assembledResponseHeaders = true;
-
- // TODO: Move the client activation to receivedResponse(), once
- // we use KIO, and receivedResponse() is called only once.
- if (d->client)
- d->client->receivedResponse(const_cast<TransferJob *>(this), (char *) \
d->response.data());
-
- d->response = QString(); // Reset
+ d->m_response = QString(); // Reset
}
- */
}
void TransferJob::retrieveCharset() const
{
if (!d->retrievedCharset) {
d->retrievedCharset = true;
- }
- // TODO: We can just parse the headers here, but once we use KIO
- // we can set the response parameter to sth. else than a "char*".
- // I save my time but not implementing it for now :-)
- notImplemented();
+ int pos = d->responseHeaders.find("content-type:", 0, false);
+
+ if (pos > -1) {
+ pos += 13;
+ int index = d->responseHeaders.find('\n', pos);
+ QString type = toQString(d->responseHeaders.mid(pos, (index - pos)));
+ index = type.indexOf(';');
+
+ if (index > -1) {
+ QString encoding = type.mid(index + 1).remove(QRegExp("charset[ ]*=[ \
]*", Qt::CaseInsensitive)).trimmed(); + d->metaData.set("charset", \
fromQString(encoding)); + }
+ }
+ }
}
-void TransferJob::receivedResponse(char* response)
+void TransferJob::receivedResponse(QString response)
{
Q_ASSERT(method() == "POST");
d->assembledResponseHeaders = false;
d->retrievedCharset = false;
+ d->m_response = response;
- // TODO: This is flawed:
- // - usually receivedResponse() should be called _once_, when the
- // response is available - seems very unflexible to do that with libcurl
- // (so let's wait until it dies and do it properly with KIO then.)
- // - QString::fromLatin1() is also wrong, of course.
- //
- // Anyway, let's collect the response data here, as the TransferJobManager
- // calls us for every line of the header it receives.
- // FIXME> d->response += QString::fromLatin1(response);
+ if (d->client)
+ d->client->receivedResponse(const_cast<TransferJob*>(this), response);
}
} // namespace WebCore
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic