diff options
Diffstat (limited to 'WebCore/platform/network/qt')
-rw-r--r-- | WebCore/platform/network/qt/QNetworkReplyHandler.cpp | 35 | ||||
-rw-r--r-- | WebCore/platform/network/qt/QNetworkReplyHandler.h | 4 | ||||
-rw-r--r-- | WebCore/platform/network/qt/ResourceHandleQt.cpp | 39 | ||||
-rw-r--r-- | WebCore/platform/network/qt/ResourceRequest.h | 9 | ||||
-rw-r--r-- | WebCore/platform/network/qt/ResourceRequestQt.cpp | 14 |
5 files changed, 54 insertions, 47 deletions
diff --git a/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index ed5e024..f7bbb9d 100644 --- a/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -21,8 +21,6 @@ #include "config.h" #include "QNetworkReplyHandler.h" -#if QT_VERSION >= 0x040400 - #include "HTTPParsers.h" #include "MIMETypeRegistry.h" #include "ResourceHandle.h" @@ -140,10 +138,14 @@ QNetworkReplyHandler::QNetworkReplyHandler(ResourceHandle* handle, LoadMode load m_method = QNetworkAccessManager::PostOperation; else if (r.httpMethod() == "PUT") m_method = QNetworkAccessManager::PutOperation; +#if QT_VERSION >= 0x040600 + else if (r.httpMethod() == "DELETE") + m_method = QNetworkAccessManager::DeleteOperation; +#endif else m_method = QNetworkAccessManager::UnknownOperation; - m_request = r.toNetworkRequest(); + m_request = r.toNetworkRequest(m_resourceHandle->getInternal()->m_frame); if (m_loadMode == LoadNormal) start(); @@ -255,7 +257,7 @@ void QNetworkReplyHandler::sendResponseIfNeeded() if (m_shouldSendResponse) return; - if (m_reply->error()) + if (m_reply->error() && !ignoreHttpError(m_reply, m_responseDataSent)) return; if (m_responseSent || !m_resourceHandle) @@ -305,9 +307,15 @@ void QNetworkReplyHandler::sendResponseIfNeeded() response.setHTTPStatusText(m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toByteArray().constData()); // Add remaining headers. +#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + foreach (const QNetworkReply::RawHeaderPair& pair, m_reply->rawHeaderPairs()) { + response.setHTTPHeaderField(QString::fromAscii(pair.first), QString::fromAscii(pair.second)); + } +#else foreach (const QByteArray& headerName, m_reply->rawHeaderList()) { response.setHTTPHeaderField(QString::fromAscii(headerName), QString::fromAscii(m_reply->rawHeader(headerName))); } +#endif } QUrl redirection = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); @@ -321,12 +329,13 @@ void QNetworkReplyHandler::sendResponseIfNeeded() newRequest.setHTTPMethod("GET"); } + // Should not set Referer after a redirect from a secure resource to non-secure one. + if (!newRequest.url().protocolIs("https") && protocolIs(newRequest.httpReferrer(), "https")) + newRequest.clearHTTPReferrer(); + client->willSendRequest(m_resourceHandle, newRequest, response); m_redirected = true; - m_request = newRequest.toNetworkRequest(); - - ResourceHandleInternal* d = m_resourceHandle->getInternal(); - emit d->m_frame->page()->networkRequestStarted(d->m_frame, &m_request); + m_request = newRequest.toNetworkRequest(m_resourceHandle->getInternal()->m_frame); return; } @@ -368,8 +377,6 @@ void QNetworkReplyHandler::start() QNetworkAccessManager* manager = d->m_frame->page()->networkAccessManager(); - emit d->m_frame->page()->networkRequestStarted(d->m_frame, &m_request); - const QUrl url = m_request.url(); const QString scheme = url.scheme(); // Post requests on files and data don't really make sense, but for @@ -398,6 +405,12 @@ void QNetworkReplyHandler::start() putDevice->setParent(m_reply); break; } +#if QT_VERSION >= 0x040600 + case QNetworkAccessManager::DeleteOperation: { + m_reply = manager->deleteResource(m_request); + break; + } +#endif case QNetworkAccessManager::UnknownOperation: { m_reply = 0; ResourceHandleClient* client = m_resourceHandle->client(); @@ -461,5 +474,3 @@ void QNetworkReplyHandler::sendQueuedItems() } #include "moc_QNetworkReplyHandler.cpp" - -#endif diff --git a/WebCore/platform/network/qt/QNetworkReplyHandler.h b/WebCore/platform/network/qt/QNetworkReplyHandler.h index fccc4a6..2171083 100644 --- a/WebCore/platform/network/qt/QNetworkReplyHandler.h +++ b/WebCore/platform/network/qt/QNetworkReplyHandler.h @@ -21,8 +21,6 @@ #include <QObject> -#if QT_VERSION >= 0x040400 - #include <QNetworkRequest> #include <QNetworkAccessManager> @@ -113,6 +111,4 @@ private: } -#endif - #endif // QNETWORKREPLYHANDLER_H diff --git a/WebCore/platform/network/qt/ResourceHandleQt.cpp b/WebCore/platform/network/qt/ResourceHandleQt.cpp index f4c30c9..09cdefd 100644 --- a/WebCore/platform/network/qt/ResourceHandleQt.cpp +++ b/WebCore/platform/network/qt/ResourceHandleQt.cpp @@ -48,13 +48,9 @@ #endif #include <QCoreApplication> #include <QUrl> -#if QT_VERSION >= 0x040400 #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> -#else -#include "qwebnetworkinterface_p.h" -#endif namespace WebCore { @@ -131,24 +127,25 @@ bool ResourceHandle::start(Frame* frame) if (!page) return false; + if (!(d->m_user.isEmpty() || d->m_pass.isEmpty())) { + // If credentials were specified for this request, add them to the url, + // so that they will be passed to QNetworkRequest. + KURL urlWithCredentials(d->m_request.url()); + urlWithCredentials.setUser(d->m_user); + urlWithCredentials.setPass(d->m_pass); + d->m_request.setURL(urlWithCredentials); + } + getInternal()->m_frame = static_cast<FrameLoaderClientQt*>(frame->loader()->client())->webFrame(); -#if QT_VERSION < 0x040400 - return QWebNetworkManager::self()->add(this, getInternal()->m_frame->page()->d->networkInterface); -#else ResourceHandleInternal *d = getInternal(); d->m_job = new QNetworkReplyHandler(this, QNetworkReplyHandler::LoadMode(d->m_defersLoading)); return true; -#endif } void ResourceHandle::cancel() { -#if QT_VERSION < 0x040400 - QWebNetworkManager::self()->cancel(this); -#else if (d->m_job) d->m_job->abort(); -#endif } bool ResourceHandle::loadsBlocked() @@ -196,17 +193,17 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, S WebCoreSynchronousLoader syncLoader; ResourceHandle handle(request, &syncLoader, true, false, true); -#if QT_VERSION < 0x040400 - if (!QWebNetworkManager::self()->add(&handle, QWebNetworkInterface::defaultInterface(), QWebNetworkManager::SynchronousJob)) { - // FIXME Create a sane ResourceError - error = ResourceError(String(), -1, String(), String()); - return; - } -#else ResourceHandleInternal *d = handle.getInternal(); + if (!(d->m_user.isEmpty() || d->m_pass.isEmpty())) { + // If credentials were specified for this request, add them to the url, + // so that they will be passed to QNetworkRequest. + KURL urlWithCredentials(d->m_request.url()); + urlWithCredentials.setUser(d->m_user); + urlWithCredentials.setPass(d->m_pass); + d->m_request.setURL(urlWithCredentials); + } d->m_frame = static_cast<FrameLoaderClientQt*>(frame->loader()->client())->webFrame(); d->m_job = new QNetworkReplyHandler(&handle, QNetworkReplyHandler::LoadNormal); -#endif syncLoader.waitForCompletion(); error = syncLoader.resourceError(); @@ -219,10 +216,8 @@ void ResourceHandle::setDefersLoading(bool defers) { d->m_defersLoading = defers; -#if QT_VERSION >= 0x040400 if (d->m_job) d->m_job->setLoadMode(QNetworkReplyHandler::LoadMode(defers)); -#endif } } // namespace WebCore diff --git a/WebCore/platform/network/qt/ResourceRequest.h b/WebCore/platform/network/qt/ResourceRequest.h index 93dacf3..fb69326 100644 --- a/WebCore/platform/network/qt/ResourceRequest.h +++ b/WebCore/platform/network/qt/ResourceRequest.h @@ -31,12 +31,13 @@ QT_BEGIN_NAMESPACE class QNetworkRequest; +class QObject; QT_END_NAMESPACE namespace WebCore { - struct ResourceRequest : ResourceRequestBase { - + class ResourceRequest : public ResourceRequestBase { + public: ResourceRequest(const String& url) : ResourceRequestBase(KURL(ParsedURLString, url), UseProtocolCachePolicy) { @@ -58,9 +59,7 @@ namespace WebCore { { } -#if QT_VERSION >= 0x040400 - QNetworkRequest toNetworkRequest() const; -#endif + QNetworkRequest toNetworkRequest(QObject* originatingObject) const; private: friend class ResourceRequestBase; diff --git a/WebCore/platform/network/qt/ResourceRequestQt.cpp b/WebCore/platform/network/qt/ResourceRequestQt.cpp index c8f6ad5..752abfe 100644 --- a/WebCore/platform/network/qt/ResourceRequestQt.cpp +++ b/WebCore/platform/network/qt/ResourceRequestQt.cpp @@ -21,24 +21,31 @@ #include "ResourceRequest.h" #include <qglobal.h> -#if QT_VERSION >= 0x040400 #include <QNetworkRequest> #include <QUrl> namespace WebCore { -QNetworkRequest ResourceRequest::toNetworkRequest() const +QNetworkRequest ResourceRequest::toNetworkRequest(QObject* originatingFrame) const { QNetworkRequest request; request.setUrl(url()); +#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) + request.setOriginatingObject(originatingFrame); +#endif const HTTPHeaderMap &headers = httpHeaderFields(); for (HTTPHeaderMap::const_iterator it = headers.begin(), end = headers.end(); it != end; ++it) { QByteArray name = QString(it->first).toAscii(); QByteArray value = QString(it->second).toAscii(); - request.setRawHeader(name, value); + // QNetworkRequest::setRawHeader() would remove the header if the value is null + // Make sure to set an empty header instead of null header. + if (!value.isNull()) + request.setRawHeader(name, value); + else + request.setRawHeader(name, ""); } switch (cachePolicy()) { @@ -62,4 +69,3 @@ QNetworkRequest ResourceRequest::toNetworkRequest() const } -#endif |