summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2020-10-19 09:16:44 +0200
committerMichal Klocek <michal.klocek@qt.io>2020-11-20 15:52:40 +0100
commite3381218acdbec1e9c207ef3eb35371e22941257 (patch)
treee8bf073b707c51f7cdd5efe55f7e4962de90980f /examples
parenta54d219c3e3cb7c73be03413741bf8d2ef70c9fa (diff)
Remove qwebengineview setter from qwebenginepage
Change-Id: Ifaac7287d24e38e04e217cae65f6e5294e8bdd9e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/webenginewidgets/printme/main.cpp2
-rw-r--r--examples/webenginewidgets/printme/printhandler.cpp18
-rw-r--r--examples/webenginewidgets/printme/printhandler.h6
-rw-r--r--examples/webenginewidgets/simplebrowser/webpage.cpp116
-rw-r--r--examples/webenginewidgets/simplebrowser/webpage.h8
-rw-r--r--examples/webenginewidgets/simplebrowser/webview.cpp150
-rw-r--r--examples/webenginewidgets/simplebrowser/webview.h11
7 files changed, 181 insertions, 130 deletions
diff --git a/examples/webenginewidgets/printme/main.cpp b/examples/webenginewidgets/printme/main.cpp
index 212faf12e..3993c6740 100644
--- a/examples/webenginewidgets/printme/main.cpp
+++ b/examples/webenginewidgets/printme/main.cpp
@@ -64,7 +64,7 @@ int main(int argc, char *argv[])
view.show();
PrintHandler handler;
- handler.setPage(view.page());
+ handler.setView(&view);
auto printPreviewShortCut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_P), &view);
auto printShortCut = new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_P), &view);
diff --git a/examples/webenginewidgets/printme/printhandler.cpp b/examples/webenginewidgets/printme/printhandler.cpp
index d8c4fc177..9d23c5b1f 100644
--- a/examples/webenginewidgets/printme/printhandler.cpp
+++ b/examples/webenginewidgets/printme/printhandler.cpp
@@ -54,7 +54,7 @@
#include <QPrinter>
#include <QPainter>
#include <QPrintPreviewDialog>
-#include <QWebEnginePage>
+#include <QWebEngineView>
PrintHandler::PrintHandler(QObject *parent)
: QObject(parent)
@@ -62,17 +62,17 @@ PrintHandler::PrintHandler(QObject *parent)
}
-void PrintHandler::setPage(QWebEnginePage *page)
+void PrintHandler::setView(QWebEngineView *view)
{
- Q_ASSERT(!m_page);
- m_page = page;
- connect(m_page, &QWebEnginePage::printRequested, this, &PrintHandler::printPreview);
+ Q_ASSERT(!m_view);
+ m_view = view;
+ connect(view->page(), &QWebEnginePage::printRequested, this, &PrintHandler::printPreview);
}
void PrintHandler::print()
{
QPrinter printer(QPrinter::HighResolution);
- QPrintDialog dialog(&printer, m_page->view());
+ QPrintDialog dialog(&printer, m_view);
if (dialog.exec() != QDialog::Accepted)
return;
printDocument(&printer);
@@ -83,7 +83,7 @@ void PrintHandler::printDocument(QPrinter *printer)
QEventLoop loop;
bool result;
auto printPreview = [&](bool success) { result = success; loop.quit(); };
- m_page->print(printer, std::move(printPreview));
+ m_view->page()->print(printer, std::move(printPreview));
loop.exec();
if (!result) {
QPainter painter;
@@ -101,13 +101,13 @@ void PrintHandler::printDocument(QPrinter *printer)
void PrintHandler::printPreview()
{
- if (!m_page)
+ if (!m_view)
return;
if (m_inPrintPreview)
return;
m_inPrintPreview = true;
QPrinter printer;
- QPrintPreviewDialog preview(&printer, m_page->view());
+ QPrintPreviewDialog preview(&printer, m_view);
connect(&preview, &QPrintPreviewDialog::paintRequested,
this, &PrintHandler::printDocument);
preview.exec();
diff --git a/examples/webenginewidgets/printme/printhandler.h b/examples/webenginewidgets/printme/printhandler.h
index 69b71f4a8..663fd73d6 100644
--- a/examples/webenginewidgets/printme/printhandler.h
+++ b/examples/webenginewidgets/printme/printhandler.h
@@ -56,7 +56,7 @@
QT_BEGIN_NAMESPACE
class QPainter;
class QPrinter;
-class QWebEnginePage;
+class QWebEngineView;
QT_END_NAMESPACE
class PrintHandler : public QObject
@@ -64,7 +64,7 @@ class PrintHandler : public QObject
Q_OBJECT
public:
PrintHandler(QObject *parent = nullptr);
- void setPage(QWebEnginePage *page);
+ void setView(QWebEngineView *view);
public slots:
void print();
@@ -72,7 +72,7 @@ public slots:
void printDocument(QPrinter *printer);
private:
- QWebEnginePage *m_page = nullptr;
+ QWebEngineView *m_view = nullptr;
bool m_inPrintPreview = false;
};
diff --git a/examples/webenginewidgets/simplebrowser/webpage.cpp b/examples/webenginewidgets/simplebrowser/webpage.cpp
index c4d7204cb..4db147526 100644
--- a/examples/webenginewidgets/simplebrowser/webpage.cpp
+++ b/examples/webenginewidgets/simplebrowser/webpage.cpp
@@ -50,78 +50,22 @@
#include "browserwindow.h"
#include "tabwidget.h"
-#include "ui_certificateerrordialog.h"
-#include "ui_passworddialog.h"
+
#include "webpage.h"
#include "webview.h"
-#include <QAuthenticator>
-#include <QMessageBox>
-#include <QStyle>
#include <QTimer>
-#include <QWebEngineCertificateError>
WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
: QWebEnginePage(profile, parent)
{
- connect(this, &QWebEnginePage::authenticationRequired, this, &WebPage::handleAuthenticationRequired);
- connect(this, &QWebEnginePage::featurePermissionRequested, this, &WebPage::handleFeaturePermissionRequested);
- connect(this, &QWebEnginePage::proxyAuthenticationRequired, this, &WebPage::handleProxyAuthenticationRequired);
- connect(this, &QWebEnginePage::registerProtocolHandlerRequested, this, &WebPage::handleRegisterProtocolHandlerRequested);
connect(this, &QWebEnginePage::selectClientCertificate, this, &WebPage::handleSelectClientCertificate);
}
void WebPage::certificateError(QWebEngineCertificateError error)
{
- QWidget *mainWindow = view()->window();
-
error.defer();
-
- QTimer::singleShot(0, mainWindow, [mainWindow, error]() mutable {
- QDialog dialog(mainWindow);
- dialog.setModal(true);
- dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
- Ui::CertificateErrorDialog certificateDialog;
- certificateDialog.setupUi(&dialog);
- certificateDialog.m_iconLabel->setText(QString());
- QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, mainWindow));
- certificateDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
- certificateDialog.m_errorLabel->setText(error.description());
- dialog.setWindowTitle(tr("Certificate Error"));
-
- if (dialog.exec() == QDialog::Accepted)
- error.acceptCertificate();
- else
- error.rejectCertificate();
- });
-}
-
-void WebPage::handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth)
-{
- QWidget *mainWindow = view()->window();
- QDialog dialog(mainWindow);
- dialog.setModal(true);
- dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
- Ui::PasswordDialog passwordDialog;
- passwordDialog.setupUi(&dialog);
-
- passwordDialog.m_iconLabel->setText(QString());
- QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow));
- passwordDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
-
- QString introMessage(tr("Enter username and password for \"%1\" at %2")
- .arg(auth->realm()).arg(requestUrl.toString().toHtmlEscaped()));
- passwordDialog.m_infoLabel->setText(introMessage);
- passwordDialog.m_infoLabel->setWordWrap(true);
-
- if (dialog.exec() == QDialog::Accepted) {
- auth->setUser(passwordDialog.m_userNameLineEdit->text());
- auth->setPassword(passwordDialog.m_passwordLineEdit->text());
- } else {
- // Set authenticator null if dialog is cancelled
- *auth = QAuthenticator();
- }
+ QTimer::singleShot(0, this,
+ [this, error]() mutable { emit createCertificateErrorDialog(error); });
}
inline QString questionForFeature(QWebEnginePage::Feature feature)
@@ -147,60 +91,6 @@ inline QString questionForFeature(QWebEnginePage::Feature feature)
return QString();
}
-void WebPage::handleFeaturePermissionRequested(const QUrl &securityOrigin, Feature feature)
-{
- QString title = tr("Permission Request");
- QString question = questionForFeature(feature).arg(securityOrigin.host());
- if (!question.isEmpty() && QMessageBox::question(view()->window(), title, question) == QMessageBox::Yes)
- setFeaturePermission(securityOrigin, feature, PermissionGrantedByUser);
- else
- setFeaturePermission(securityOrigin, feature, PermissionDeniedByUser);
-}
-
-void WebPage::handleProxyAuthenticationRequired(const QUrl &, QAuthenticator *auth, const QString &proxyHost)
-{
- QWidget *mainWindow = view()->window();
- QDialog dialog(mainWindow);
- dialog.setModal(true);
- dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
- Ui::PasswordDialog passwordDialog;
- passwordDialog.setupUi(&dialog);
-
- passwordDialog.m_iconLabel->setText(QString());
- QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow));
- passwordDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
-
- QString introMessage = tr("Connect to proxy \"%1\" using:");
- introMessage = introMessage.arg(proxyHost.toHtmlEscaped());
- passwordDialog.m_infoLabel->setText(introMessage);
- passwordDialog.m_infoLabel->setWordWrap(true);
-
- if (dialog.exec() == QDialog::Accepted) {
- auth->setUser(passwordDialog.m_userNameLineEdit->text());
- auth->setPassword(passwordDialog.m_passwordLineEdit->text());
- } else {
- // Set authenticator null if dialog is cancelled
- *auth = QAuthenticator();
- }
-}
-
-//! [registerProtocolHandlerRequested]
-void WebPage::handleRegisterProtocolHandlerRequested(QWebEngineRegisterProtocolHandlerRequest request)
-{
- auto answer = QMessageBox::question(
- view()->window(),
- tr("Permission Request"),
- tr("Allow %1 to open all %2 links?")
- .arg(request.origin().host())
- .arg(request.scheme()));
- if (answer == QMessageBox::Yes)
- request.accept();
- else
- request.reject();
-}
-//! [registerProtocolHandlerRequested]
-
void WebPage::handleSelectClientCertificate(QWebEngineClientCertificateSelection selection)
{
// Just select one.
diff --git a/examples/webenginewidgets/simplebrowser/webpage.h b/examples/webenginewidgets/simplebrowser/webpage.h
index d69c459e9..00eb48156 100644
--- a/examples/webenginewidgets/simplebrowser/webpage.h
+++ b/examples/webenginewidgets/simplebrowser/webpage.h
@@ -53,6 +53,7 @@
#include <QWebEnginePage>
#include <QWebEngineRegisterProtocolHandlerRequest>
+#include <QWebEngineCertificateError>
class WebPage : public QWebEnginePage
{
@@ -61,14 +62,13 @@ class WebPage : public QWebEnginePage
public:
WebPage(QWebEngineProfile *profile, QObject *parent = nullptr);
+signals:
+ void createCertificateErrorDialog(QWebEngineCertificateError error);
+
protected:
void certificateError(QWebEngineCertificateError error) override;
private slots:
- void handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth);
- void handleFeaturePermissionRequested(const QUrl &securityOrigin, Feature feature);
- void handleProxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth, const QString &proxyHost);
- void handleRegisterProtocolHandlerRequested(QWebEngineRegisterProtocolHandlerRequest request);
void handleSelectClientCertificate(QWebEngineClientCertificateSelection clientCertSelection);
};
diff --git a/examples/webenginewidgets/simplebrowser/webview.cpp b/examples/webenginewidgets/simplebrowser/webview.cpp
index 28ae8eecd..5bd0a5ef4 100644
--- a/examples/webenginewidgets/simplebrowser/webview.cpp
+++ b/examples/webenginewidgets/simplebrowser/webview.cpp
@@ -54,11 +54,15 @@
#include "webpage.h"
#include "webpopupwindow.h"
#include "webview.h"
+#include "ui_certificateerrordialog.h"
+#include "ui_passworddialog.h"
#include <QContextMenuEvent>
#include <QDebug>
#include <QMenu>
#include <QMessageBox>
+#include <QAuthenticator>
#include <QTimer>
+#include <QStyle>
WebView::WebView(QWidget *parent)
: QWebEngineView(parent)
@@ -104,13 +108,56 @@ WebView::WebView(QWidget *parent)
});
}
+inline QString questionForFeature(QWebEnginePage::Feature feature)
+{
+ switch (feature) {
+ case QWebEnginePage::Geolocation:
+ return QObject::tr("Allow %1 to access your location information?");
+ case QWebEnginePage::MediaAudioCapture:
+ return QObject::tr("Allow %1 to access your microphone?");
+ case QWebEnginePage::MediaVideoCapture:
+ return QObject::tr("Allow %1 to access your webcam?");
+ case QWebEnginePage::MediaAudioVideoCapture:
+ return QObject::tr("Allow %1 to access your microphone and webcam?");
+ case QWebEnginePage::MouseLock:
+ return QObject::tr("Allow %1 to lock your mouse cursor?");
+ case QWebEnginePage::DesktopVideoCapture:
+ return QObject::tr("Allow %1 to capture video of your desktop?");
+ case QWebEnginePage::DesktopAudioVideoCapture:
+ return QObject::tr("Allow %1 to capture audio and video of your desktop?");
+ case QWebEnginePage::Notifications:
+ return QObject::tr("Allow %1 to show notification on your desktop?");
+ }
+ return QString();
+}
+
void WebView::setPage(WebPage *page)
{
+ WebPage *oldPage = qobject_cast<WebPage *>(QWebEngineView::page());
+ disconnect(oldPage, &WebPage::createCertificateErrorDialog, this,
+ &WebView::handleCertificateError);
+ disconnect(oldPage, &QWebEnginePage::authenticationRequired, this,
+ &WebView::handleAuthenticationRequired);
+ disconnect(oldPage, &QWebEnginePage::featurePermissionRequested, this,
+ &WebView::handleFeaturePermissionRequested);
+ disconnect(oldPage, &QWebEnginePage::proxyAuthenticationRequired, this,
+ &WebView::handleProxyAuthenticationRequired);
+ disconnect(oldPage, &QWebEnginePage::registerProtocolHandlerRequested, this,
+ &WebView::handleRegisterProtocolHandlerRequested);
createWebActionTrigger(page,QWebEnginePage::Forward);
createWebActionTrigger(page,QWebEnginePage::Back);
createWebActionTrigger(page,QWebEnginePage::Reload);
createWebActionTrigger(page,QWebEnginePage::Stop);
QWebEngineView::setPage(page);
+ connect(page, &WebPage::createCertificateErrorDialog, this, &WebView::handleCertificateError);
+ connect(page, &QWebEnginePage::authenticationRequired, this,
+ &WebView::handleAuthenticationRequired);
+ connect(page, &QWebEnginePage::featurePermissionRequested, this,
+ &WebView::handleFeaturePermissionRequested);
+ connect(page, &QWebEnginePage::proxyAuthenticationRequired, this,
+ &WebView::handleProxyAuthenticationRequired);
+ connect(page, &QWebEnginePage::registerProtocolHandlerRequested, this,
+ &WebView::handleRegisterProtocolHandlerRequested);
}
int WebView::loadProgress() const
@@ -196,3 +243,106 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)
menu->popup(event->globalPos());
}
+void WebView::handleCertificateError(QWebEngineCertificateError error)
+{
+ QDialog dialog(window());
+ dialog.setModal(true);
+ dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
+
+ Ui::CertificateErrorDialog certificateDialog;
+ certificateDialog.setupUi(&dialog);
+ certificateDialog.m_iconLabel->setText(QString());
+ QIcon icon(window()->style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, window()));
+ certificateDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
+ certificateDialog.m_errorLabel->setText(error.description());
+ dialog.setWindowTitle(tr("Certificate Error"));
+
+ if (dialog.exec() == QDialog::Accepted)
+ error.acceptCertificate();
+ else
+ error.rejectCertificate();
+}
+
+void WebView::handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth)
+{
+ QDialog dialog(window());
+ dialog.setModal(true);
+ dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
+
+ Ui::PasswordDialog passwordDialog;
+ passwordDialog.setupUi(&dialog);
+
+ passwordDialog.m_iconLabel->setText(QString());
+ QIcon icon(window()->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, window()));
+ passwordDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
+
+ QString introMessage(tr("Enter username and password for \"%1\" at %2")
+ .arg(auth->realm())
+ .arg(requestUrl.toString().toHtmlEscaped()));
+ passwordDialog.m_infoLabel->setText(introMessage);
+ passwordDialog.m_infoLabel->setWordWrap(true);
+
+ if (dialog.exec() == QDialog::Accepted) {
+ auth->setUser(passwordDialog.m_userNameLineEdit->text());
+ auth->setPassword(passwordDialog.m_passwordLineEdit->text());
+ } else {
+ // Set authenticator null if dialog is cancelled
+ *auth = QAuthenticator();
+ }
+}
+
+void WebView::handleFeaturePermissionRequested(const QUrl &securityOrigin,
+ QWebEnginePage::Feature feature)
+{
+ QString title = tr("Permission Request");
+ QString question = questionForFeature(feature).arg(securityOrigin.host());
+ if (!question.isEmpty() && QMessageBox::question(window(), title, question) == QMessageBox::Yes)
+ page()->setFeaturePermission(securityOrigin, feature,
+ QWebEnginePage::PermissionGrantedByUser);
+ else
+ page()->setFeaturePermission(securityOrigin, feature,
+ QWebEnginePage::PermissionDeniedByUser);
+}
+
+void WebView::handleProxyAuthenticationRequired(const QUrl &, QAuthenticator *auth,
+ const QString &proxyHost)
+{
+ QDialog dialog(window());
+ dialog.setModal(true);
+ dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
+
+ Ui::PasswordDialog passwordDialog;
+ passwordDialog.setupUi(&dialog);
+
+ passwordDialog.m_iconLabel->setText(QString());
+ QIcon icon(window()->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, window()));
+ passwordDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
+
+ QString introMessage = tr("Connect to proxy \"%1\" using:");
+ introMessage = introMessage.arg(proxyHost.toHtmlEscaped());
+ passwordDialog.m_infoLabel->setText(introMessage);
+ passwordDialog.m_infoLabel->setWordWrap(true);
+
+ if (dialog.exec() == QDialog::Accepted) {
+ auth->setUser(passwordDialog.m_userNameLineEdit->text());
+ auth->setPassword(passwordDialog.m_passwordLineEdit->text());
+ } else {
+ // Set authenticator null if dialog is cancelled
+ *auth = QAuthenticator();
+ }
+}
+
+//! [registerProtocolHandlerRequested]
+void WebView::handleRegisterProtocolHandlerRequested(
+ QWebEngineRegisterProtocolHandlerRequest request)
+{
+ auto answer = QMessageBox::question(window(), tr("Permission Request"),
+ tr("Allow %1 to open all %2 links?")
+ .arg(request.origin().host())
+ .arg(request.scheme()));
+ if (answer == QMessageBox::Yes)
+ request.accept();
+ else
+ request.reject();
+}
+//! [registerProtocolHandlerRequested]
diff --git a/examples/webenginewidgets/simplebrowser/webview.h b/examples/webenginewidgets/simplebrowser/webview.h
index 8559a68b8..0dc7c33ad 100644
--- a/examples/webenginewidgets/simplebrowser/webview.h
+++ b/examples/webenginewidgets/simplebrowser/webview.h
@@ -53,6 +53,9 @@
#include <QIcon>
#include <QWebEngineView>
+#include <QWebEngineCertificateError>
+#include <QWebEnginePage>
+#include <QWebEngineRegisterProtocolHandlerRequest>
class WebPage;
@@ -76,6 +79,14 @@ signals:
void webActionEnabledChanged(QWebEnginePage::WebAction webAction, bool enabled);
void favIconChanged(const QIcon &icon);
void devToolsRequested(QWebEnginePage *source);
+private slots:
+ void handleCertificateError(QWebEngineCertificateError error);
+ void handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth);
+ void handleFeaturePermissionRequested(const QUrl &securityOrigin,
+ QWebEnginePage::Feature feature);
+ void handleProxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth,
+ const QString &proxyHost);
+ void handleRegisterProtocolHandlerRequested(QWebEngineRegisterProtocolHandlerRequest request);
private:
void createWebActionTrigger(QWebEnginePage *page, QWebEnginePage::WebAction);