summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/qt
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
commitcd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch)
tree8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebKit2/WebProcess/qt
parentd11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff)
downloadqtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/WebKit2/WebProcess/qt')
-rw-r--r--Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp63
-rw-r--r--Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h9
-rw-r--r--Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp27
-rw-r--r--Source/WebKit2/WebProcess/qt/QtNetworkReply.h5
-rw-r--r--Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp5
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>