diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-02-25 15:00:59 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-28 15:21:26 +0100 |
commit | 970ccc7f1e7890f4ac49b761678274823576aca5 (patch) | |
tree | bb8e0ea602b3c8aac9c5967ba8bd0ecb8dc4f0a6 /examples/widgets/browser/webview.cpp | |
parent | 0fb2109e9a14857f76d12c45beaac7fc9640487e (diff) |
Add HTTP and proxy authentication signals directly to QWebEnginePage
This allows handling calls that would be signaled by QNetworkAccessManager
in QtWebKit.
This pulls QtNetwork as a dependency of the QtWebEngineWidgets module
to be able to use QAuthenticator, but isn't required otherwise.
Only the request URL is available in the case of HTTP authentication
(no access to HTTP request headers that the QNetworkReply would allow)
and only the proxy host name in the case case of proxy authentication.
This keeps the API synchronous the same way, as QtWebKit did, in
favor of source compatibility at the cost of requiring a modal
dialog, even though the implementation doesn't require it.
Change-Id: I9e021def38e6107c9e66d2de8f86bd0328d543df
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
Diffstat (limited to 'examples/widgets/browser/webview.cpp')
-rw-r--r-- | examples/widgets/browser/webview.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/examples/widgets/browser/webview.cpp b/examples/widgets/browser/webview.cpp index 7eb08d6a3..193cb4797 100644 --- a/examples/widgets/browser/webview.cpp +++ b/examples/widgets/browser/webview.cpp @@ -44,10 +44,13 @@ #include "cookiejar.h" #include "downloadmanager.h" #include "networkaccessmanager.h" +#include "ui_passworddialog.h" +#include "ui_proxy.h" #include "tabwidget.h" #include "webview.h" #include <QtGui/QClipboard> +#include <QtNetwork/QAuthenticator> #include <QtWidgets/QMenu> #include <QtWidgets/QMessageBox> #include <QtGui/QMouseEvent> @@ -72,6 +75,10 @@ WebPage::WebPage(QObject *parent) #endif connect(this, SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(handleUnsupportedContent(QNetworkReply*))); + connect(this, SIGNAL(authenticationRequired(const QUrl &, QAuthenticator*)), + SLOT(authenticationRequired(const QUrl &, QAuthenticator*))); + connect(this, SIGNAL(proxyAuthenticationRequired(const QUrl &, QAuthenticator *, const QString &)), + SLOT(proxyAuthenticationRequired(const QUrl &, QAuthenticator *, const QString &))); } BrowserMainWindow *WebPage::mainWindow() @@ -249,6 +256,53 @@ void WebPage::handleUnsupportedContent(QNetworkReply *reply) #endif } +void WebPage::authenticationRequired(const QUrl &requestUrl, QAuthenticator *auth) +{ + BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow(); + + QDialog dialog(mainWindow); + dialog.setWindowFlags(Qt::Sheet); + + Ui::PasswordDialog passwordDialog; + passwordDialog.setupUi(&dialog); + + passwordDialog.iconLabel->setText(QString()); + passwordDialog.iconLabel->setPixmap(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); + + QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>"); + introMessage = introMessage.arg(auth->realm()).arg(requestUrl.toString().toHtmlEscaped()); + passwordDialog.introLabel->setText(introMessage); + passwordDialog.introLabel->setWordWrap(true); + + if (dialog.exec() == QDialog::Accepted) { + auth->setUser(passwordDialog.userNameLineEdit->text()); + auth->setPassword(passwordDialog.passwordLineEdit->text()); + } +} + +void WebPage::proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth, const QString &proxyHost) +{ + BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow(); + + QDialog dialog(mainWindow); + dialog.setWindowFlags(Qt::Sheet); + + Ui::ProxyDialog proxyDialog; + proxyDialog.setupUi(&dialog); + + proxyDialog.iconLabel->setText(QString()); + proxyDialog.iconLabel->setPixmap(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); + + QString introMessage = tr("<qt>Connect to proxy \"%1\" using:</qt>"); + introMessage = introMessage.arg(proxyHost.toHtmlEscaped()); + proxyDialog.introLabel->setText(introMessage); + proxyDialog.introLabel->setWordWrap(true); + + if (dialog.exec() == QDialog::Accepted) { + auth->setUser(proxyDialog.userNameLineEdit->text()); + auth->setPassword(proxyDialog.passwordLineEdit->text()); + } +} WebView::WebView(QWidget* parent) : QWebEngineView(parent) |