[WebKit-devel] KDE/kdelibs/kio/kio
Dawit Alemayehu
adawit at kde.org
Mon Feb 1 00:03:44 CET 2010
SVN commit 1083276 by adawit:
- Prevent all cache related header directives from being sent through the customHttpHeader
meta-data sent to the http ioslave.
This should fix the intermittent issues with missing images or partial rendering of pages,
specially when navigating back in history.
CCMAIL:webkit-devel at kde.org
CCMAIL:rekonq at kde.org
M +37 -41 accessmanager.cpp
--- trunk/KDE/kdelibs/kio/kio/accessmanager.cpp #1083275:1083276
@@ -122,8 +122,7 @@
{
KIO::SimpleJob *kioJob = 0;
- if ( !d->externalContentAllowed && req.url().scheme() != "file" &&
- req.url().scheme() != "data" && !req.url().scheme().isEmpty() ) {
+ if ( !d->externalContentAllowed && req.url().scheme() != "file" && !req.url().scheme().isEmpty() ) {
kDebug( 7044 ) << "Blocked: " << req.url().scheme() << req.url();
/* if kioJob equals zero, the AccessManagerReply will block the request */
return new KDEPrivate::AccessManagerReply(op, req, kioJob, this);
@@ -162,15 +161,13 @@
kioJob->addMetaData(d->metaDataForRequest(req));
if ( op == PostOperation && !kioJob->metaData().contains("content-type")) {
- QString contentType (QLatin1String("Content-Type: "));
QVariant header = req.header(QNetworkRequest::ContentTypeHeader);
-
if (header.isValid())
- contentType += header.toString();
+ kioJob->addMetaData(QLatin1String("content-type"),
+ QString::fromLatin1("Content-Type: %1").arg(header.toString()));
else
- contentType += QLatin1String("application/x-www-form-urlencoded");
-
- kioJob->addMetaData("content-type", contentType);
+ kioJob->addMetaData(QLatin1String("content-type"),
+ QLatin1String("Content-Type: application/x-www-form-urlencoded"));
}
return reply;
@@ -181,61 +178,60 @@
{
KIO::MetaData metaData;
- // Add the user-specified meta data first...
+ // Add any meta data specified within request...
QVariant userMetaData = request.attribute (static_cast<QNetworkRequest::Attribute>(MetaData));
if (userMetaData.isValid() && userMetaData.type() == QVariant::Map) {
- metaData += userMetaData.toMap();
+ metaData += userMetaData.toMap();
}
metaData.insert("PropagateHttpHeader", "true");
- metaData.insert("UserAgent", request.rawHeader("User-Agent"));
- request.setRawHeader("User-Agent", QByteArray());
+ if (request.hasRawHeader("User-Agent")) {
+ metaData.insert("UserAgent", request.rawHeader("User-Agent"));
+ request.setRawHeader("User-Agent", QByteArray());
+ }
- metaData.insert("accept", request.rawHeader("Accept"));
- request.setRawHeader("Accept", QByteArray());
+ if (request.hasRawHeader("Accept")) {
+ metaData.insert("accept", request.rawHeader("Accept"));
+ request.setRawHeader("Accept", QByteArray());
+ }
+ if (request.hasRawHeader("Referer")) {
+ metaData.insert("referrer", request.rawHeader("Referer"));
+ request.setRawHeader("Referer", QByteArray());
+ }
+
+ if (request.hasRawHeader("Content-Type")) {
+ metaData.insert("content-type", request.rawHeader("Content-Type"));
+ request.setRawHeader("Content-Type", QByteArray());
+ }
+
request.setRawHeader("content-length", QByteArray());
request.setRawHeader("Connection", QByteArray());
+ request.setRawHeader("If-None-Match", QByteArray());
+ request.setRawHeader("If-Modified-Since", QByteArray());
- QString additionHeaders;
- QListIterator<QByteArray> headersIt (request.rawHeaderList());
-
- while (headersIt.hasNext()) {
- const QByteArray key = headersIt.next();
+ QStringList customHeaders;
+ Q_FOREACH(const QByteArray &key, request.rawHeaderList()) {
const QByteArray value = request.rawHeader(key);
-
- if (value.isNull())
- continue;
-
- // createRequest() checks later for existence "content-type" metadata
- if (QString::compare(key, QLatin1String("Content-Type"), Qt::CaseInsensitive) == 0) {
- metaData.insert("content-type", value);
- continue;
- }
-
- if (additionHeaders.length() > 0) {
- additionHeaders += QLatin1String("\r\n");
- }
-
- additionHeaders += key;
- additionHeaders += QLatin1String(": ");
- additionHeaders += value;
+ if (value.length())
+ customHeaders << (key + ": " + value);
}
- metaData.insert("customHTTPHeader", additionHeaders);
+ if (!customHeaders.isEmpty())
+ metaData.insert("customHTTPHeader", customHeaders.join("\r\n"));
// Append per request meta data, if any...
- if (!requestMetaData.isEmpty())
+ if (!requestMetaData.isEmpty()) {
metaData += requestMetaData;
+ // Clear per request meta data...
+ requestMetaData.clear();
+ }
// Append per session meta data, if any...
if (!sessionMetaData.isEmpty())
metaData += sessionMetaData;
- // Clear per request meta data...
- requestMetaData.clear();
-
return metaData;
}
More information about the WebKit-devel
mailing list