diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
| commit | cd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch) | |
| tree | 8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebKit2/WebProcess/qt | |
| parent | d11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff) | |
| download | qtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz | |
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/WebKit2/WebProcess/qt')
5 files changed, 68 insertions, 41 deletions
diff --git a/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp b/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp index 57b953fea..aa487563d 100644 --- a/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp +++ b/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2011 Zeno Albisser <zeno@webkit.org> + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,7 +30,9 @@ #include "SharedMemory.h" #include "WebFrameNetworkingContext.h" #include "WebPage.h" +#include "WebPageProxyMessages.h" #include "WebProcess.h" +#include <QAuthenticator> #include <QNetworkReply> #include <QNetworkRequest> @@ -39,12 +42,8 @@ QtNetworkAccessManager::QtNetworkAccessManager(WebProcess* webProcess) : QNetworkAccessManager() , m_webProcess(webProcess) { -} - -QtNetworkAccessManager::QtNetworkAccessManager(QObject* parent) - : QNetworkAccessManager(parent) - , m_webProcess(0) -{ + connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), SLOT(onAuthenticationRequired(QNetworkReply*, QAuthenticator*))); + connect(this, SIGNAL(sslErrors(QNetworkReply*, QList<QSslError>)), SLOT(onSslErrors(QNetworkReply*, QList<QSslError>))); } WebPage* QtNetworkAccessManager::obtainOriginatingWebPage(const QNetworkRequest& request) @@ -53,13 +52,8 @@ WebPage* QtNetworkAccessManager::obtainOriginatingWebPage(const QNetworkRequest& if (!originatingObject) return 0; - QVariant pagePtr = originatingObject->property("PagePointer"); - if (!pagePtr.isValid() || !pagePtr.canConvert<void*>()) - return 0; - - WebPage* webPage = static_cast<WebPage*>(pagePtr.value<void*>()); - Q_ASSERT(webPage); - return webPage; + qulonglong pageID = originatingObject->property("pageID").toULongLong(); + return m_webProcess->webPage(pageID); } QNetworkReply* QtNetworkAccessManager::createRequest(Operation operation, const QNetworkRequest& request, QIODevice* outData) @@ -79,6 +73,49 @@ void QtNetworkAccessManager::registerApplicationScheme(const WebPage* page, cons m_applicationSchemes.insert(page, scheme.toLower()); } +void QtNetworkAccessManager::onAuthenticationRequired(QNetworkReply* reply, QAuthenticator* authenticator) +{ + WebPage* webPage = obtainOriginatingWebPage(reply->request()); + + // FIXME: This check can go away once our Qt version is up-to-date. See: QTBUG-23512. + if (!webPage) + return; + + String hostname = reply->url().toString(QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment | QUrl::StripTrailingSlash); + String realm = authenticator->realm(); + String prefilledUsername = authenticator->user(); + String username; + String password; + + if (webPage->sendSync( + Messages::WebPageProxy::AuthenticationRequiredRequest(hostname, realm, prefilledUsername), + Messages::WebPageProxy::AuthenticationRequiredRequest::Reply(username, password))) { + if (!username.isEmpty()) + authenticator->setUser(username); + if (!password.isEmpty()) + authenticator->setPassword(password); + } +} + +void QtNetworkAccessManager::onSslErrors(QNetworkReply* reply, const QList<QSslError>& qSslErrors) +{ + WebPage* webPage = obtainOriginatingWebPage(reply->request()); + + // FIXME: This check can go away once our Qt version is up-to-date. See: QTBUG-23512. + if (!webPage) + return; + + String hostname = reply->url().host(); + bool ignoreErrors = false; + + if (webPage->sendSync( + Messages::WebPageProxy::CertificateVerificationRequest(hostname), + Messages::WebPageProxy::CertificateVerificationRequest::Reply(ignoreErrors))) { + if (ignoreErrors) + reply->ignoreSslErrors(qSslErrors); + } +} + } #include "moc_QtNetworkAccessManager.cpp" diff --git a/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h b/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h index 8d9eb1d0e..846221eb7 100644 --- a/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h +++ b/Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2011 Zeno Albisser <zeno@webkit.org> + * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -38,15 +39,19 @@ class WebProcess; class QtNetworkAccessManager : public QNetworkAccessManager { Q_OBJECT public: - QtNetworkAccessManager(QObject* parent); QtNetworkAccessManager(WebProcess*); void registerApplicationScheme(const WebPage*, const QString& scheme); protected: virtual QNetworkReply* createRequest(Operation, const QNetworkRequest&, QIODevice* outgoingData = 0) OVERRIDE; - static WebPage* obtainOriginatingWebPage(const QNetworkRequest&); + +private Q_SLOTS: + void onAuthenticationRequired(QNetworkReply *, QAuthenticator *); + void onSslErrors(QNetworkReply*, const QList<QSslError>&); private: + WebPage* obtainOriginatingWebPage(const QNetworkRequest&); + QMultiHash<const WebPage*, QString> m_applicationSchemes; WebProcess* m_webProcess; diff --git a/Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp b/Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp index fd0f5cb7a..e65022cdf 100644 --- a/Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp +++ b/Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp @@ -45,11 +45,12 @@ QtNetworkReply::QtNetworkReply(const QNetworkRequest& req, QtNetworkAccessManage setOperation(QNetworkAccessManager::GetOperation); setUrl(req.url()); setOpenMode(QIODevice::ReadOnly); - setHeader(QNetworkRequest::ContentTypeHeader, QVariant(QString::fromLocal8Bit("text/html; charset=UTF-16"))); } void QtNetworkReply::setData(const SharedMemory::Handle& handle, qint64 dataSize) { + if (handle.isNull()) + return; m_sharedMemory = SharedMemory::create(handle, SharedMemory::ReadOnly); if (!m_sharedMemory) return; @@ -60,28 +61,17 @@ void QtNetworkReply::setData(const SharedMemory::Handle& handle, qint64 dataSize void QtNetworkReply::setReplyData(const QtNetworkReplyData& replyData) { - if (replyData.m_operation) - setOperation(replyData.m_operation); - if (!replyData.m_contentDisposition.isNull()) - setHeader(QNetworkRequest::ContentDispositionHeader, QString(replyData.m_contentDisposition)); - if (!replyData.m_contentType.isNull()) + if (!replyData.m_contentType.isEmpty()) setHeader(QNetworkRequest::ContentTypeHeader, QString(replyData.m_contentType)); - if (!replyData.m_location.isNull()) - setHeader(QNetworkRequest::LocationHeader, QString(replyData.m_location)); - if (replyData.m_lastModified) - setHeader(QNetworkRequest::LastModifiedHeader, QDateTime::fromMSecsSinceEpoch(replyData.m_lastModified)); - if (!replyData.m_cookie.isNull()) - setHeader(QNetworkRequest::SetCookieHeader, QVariant::fromValue(QNetworkCookie::parseCookies(QString(replyData.m_cookie).toAscii()))); - if (!replyData.m_userAgent.isNull()) - setHeader(QNetworkRequest::UserAgentHeader, QString(replyData.m_userAgent)); - if (!replyData.m_server.isNull()) - setHeader(QNetworkRequest::ServerHeader, QString(replyData.m_server)); setHeader(QNetworkRequest::ContentLengthHeader, QVariant::fromValue(replyData.m_contentLength)); setData(replyData.m_dataHandle, replyData.m_contentLength); } qint64 QtNetworkReply::readData(char* data, qint64 maxlen) { + if (!m_sharedMemory) + return 0; + qint64 bytesRead = maxlen < m_bytesAvailable ? maxlen : m_bytesAvailable; if (qMemCopy(data, static_cast<char*>(m_sharedMemory->data()) + m_sharedMemorySize - m_bytesAvailable, bytesRead)) { m_bytesAvailable -= bytesRead; @@ -95,11 +85,6 @@ qint64 QtNetworkReply::bytesAvailable() const return m_bytesAvailable + QNetworkReply::bytesAvailable(); } -void QtNetworkReply::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value) -{ - QNetworkReply::setHeader(header, value); -} - void QtNetworkReply::abort() { } void QtNetworkReply::close() { } void QtNetworkReply::setReadBufferSize(qint64 size) { } diff --git a/Source/WebKit2/WebProcess/qt/QtNetworkReply.h b/Source/WebKit2/WebProcess/qt/QtNetworkReply.h index 8ceb7926e..d32c82103 100644 --- a/Source/WebKit2/WebProcess/qt/QtNetworkReply.h +++ b/Source/WebKit2/WebProcess/qt/QtNetworkReply.h @@ -42,12 +42,12 @@ public: virtual qint64 readData(char *data, qint64 maxlen); virtual qint64 bytesAvailable() const; - void setHeader(QNetworkRequest::KnownHeaders, const QVariant &value); - void setData(const SharedMemory::Handle&, qint64 dataSize); void setReplyData(const QtNetworkReplyData&); void finalize(); protected: + void setData(const SharedMemory::Handle&, qint64 dataSize); + virtual void abort(); virtual void close(); virtual void setReadBufferSize(qint64); @@ -55,7 +55,6 @@ protected: private: qint64 m_bytesAvailable; - QByteArray m_buffer; RefPtr<SharedMemory> m_sharedMemory; qint64 m_sharedMemorySize; }; diff --git a/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp b/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp index c38e38241..91e7ae437 100644 --- a/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp +++ b/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp @@ -25,9 +25,10 @@ */ #include "config.h" -#include "RunLoop.h" -#include <runtime/InitializeThreading.h> + #include "WebProcess.h" +#include <WebCore/RunLoop.h> +#include <runtime/InitializeThreading.h> #include <wtf/MainThread.h> #include <QApplication> |
