summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-05-28 09:55:20 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-05-28 09:55:20 +0200
commit5087a4eaa32e08fe59f1f5b71dc21dda0876a759 (patch)
tree234e059dbe9226f242ca15b063952ad37e4f54da /tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
parent6eadb2f2588b240b5fcda38e1f68a49a4690eb6b (diff)
parentf2db8f1988a3767d4f35aa4724d4e168e80dad59 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp')
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp88
1 files changed, 64 insertions, 24 deletions
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 190758ed2..7bd540cc6 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -200,11 +200,10 @@ private Q_SLOTS:
void triggerActionWithoutMenu();
void dynamicFrame();
- void notificationRequest_data();
- void notificationRequest();
+ void notificationPermission_data();
+ void notificationPermission();
void sendNotification();
void contentsSize();
- void notificationPermission();
void setLifecycleState();
void setVisible();
@@ -229,6 +228,7 @@ private Q_SLOTS:
void renderProcessPid();
void backgroundColor();
void audioMuted();
+ void closeContents();
private:
static QPoint elementCenter(QWebEnginePage *page, const QString &id);
@@ -3575,42 +3575,61 @@ public:
}
};
-void tst_QWebEnginePage::notificationRequest_data()
+void tst_QWebEnginePage::notificationPermission_data()
{
+ QTest::addColumn<bool>("setOnInit");
QTest::addColumn<QWebEnginePage::PermissionPolicy>("policy");
QTest::addColumn<QString>("permission");
- QTest::newRow("deny") << QWebEnginePage::PermissionDeniedByUser << "denied";
- QTest::newRow("grant") << QWebEnginePage::PermissionGrantedByUser << "granted";
+ QTest::newRow("denyOnInit") << true << QWebEnginePage::PermissionDeniedByUser << "denied";
+ QTest::newRow("deny") << false << QWebEnginePage::PermissionDeniedByUser << "denied";
+ QTest::newRow("grant") << false << QWebEnginePage::PermissionGrantedByUser << "granted";
+ QTest::newRow("grantOnInit") << true << QWebEnginePage::PermissionGrantedByUser << "granted";
}
-void tst_QWebEnginePage::notificationRequest()
+void tst_QWebEnginePage::notificationPermission()
{
+ QFETCH(bool, setOnInit);
QFETCH(QWebEnginePage::PermissionPolicy, policy);
QFETCH(QString, permission);
- NotificationPage page(policy);
- QVERIFY(page.spyLoad.waitForResult());
+ QWebEngineProfile otr;
+ QWebEnginePage page(&otr, nullptr);
- page.resetPermission();
- QCOMPARE(page.getPermission(), "default");
+ QUrl baseUrl("https://www.example.com/somepage.html");
- page.requestPermission();
- page.spyRequest.waitForResult();
- QVERIFY(page.spyRequest.wasCalled());
+ bool permissionRequested = false, errorState = false;
+ connect(&page, &QWebEnginePage::featurePermissionRequested, &page, [&] (const QUrl &o, QWebEnginePage::Feature f) {
+ if (f != QWebEnginePage::Notifications)
+ return;
+ if (permissionRequested || o != baseUrl.url(QUrl::RemoveFilename)) {
+ qWarning() << "Unexpected case. Can't proceed." << setOnInit << permissionRequested << o;
+ errorState = true;
+ return;
+ }
+ permissionRequested = true;
+ page.setFeaturePermission(o, f, policy);
+ });
- QCOMPARE(page.getPermission(), permission);
-}
+ if (setOnInit)
+ page.setFeaturePermission(baseUrl, QWebEnginePage::Notifications, policy);
-void tst_QWebEnginePage::notificationPermission()
-{
- QWebEngineProfile otr;
- QWebEnginePage page(&otr, nullptr);
QSignalSpy spy(&page, &QWebEnginePage::loadFinished);
- page.setHtml(QString("<html><body>Test</body></html>"), QUrl("https://www.example.com"));
+ page.setHtml(QString("<html><body>Test</body></html>"), baseUrl);
QTRY_COMPARE(spy.count(), 1);
- QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), QLatin1String("default"));
- page.setFeaturePermission(QUrl("https://www.example.com"), QWebEnginePage::Notifications, QWebEnginePage::PermissionGrantedByUser);
- QTRY_COMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), QLatin1String("granted"));
+
+ QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), setOnInit ? permission : QLatin1String("default"));
+
+ if (!setOnInit) {
+ page.setFeaturePermission(baseUrl, QWebEnginePage::Notifications, policy);
+ QTRY_COMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), permission);
+ }
+
+ auto js = QStringLiteral("var permission; Notification.requestPermission().then(p => { permission = p })");
+ evaluateJavaScriptSync(&page, js);
+ QTRY_COMPARE(evaluateJavaScriptSync(&page, "permission").toString(), permission);
+ // permission is not 'remembered' from api standpoint, hence is not suppressed on explicit call from JS
+ QVERIFY(permissionRequested);
+ QVERIFY(!errorState);
}
void tst_QWebEnginePage::sendNotification()
@@ -4608,6 +4627,27 @@ void tst_QWebEnginePage::audioMuted()
QCOMPARE(spy[1][0], QVariant(false));
}
+void tst_QWebEnginePage::closeContents()
+{
+ TestPage page;
+ QSignalSpy windowCreatedSpy(&page, &TestPage::windowCreated);
+ page.runJavaScript("var dialog = window.open('', '', 'width=100, height=100');");
+ QTRY_COMPARE(windowCreatedSpy.count(), 1);
+
+ QWebEngineView *dialogView = new QWebEngineView;
+ QWebEnginePage *dialogPage = page.createdWindows[0];
+ dialogPage->setView(dialogView);
+ QCOMPARE(dialogPage->lifecycleState(), QWebEnginePage::LifecycleState::Active);
+
+ // This should not crash.
+ connect(dialogPage, &QWebEnginePage::windowCloseRequested, dialogView, &QWebEngineView::close);
+ page.runJavaScript("dialog.close();");
+
+ // QWebEngineView::closeEvent() sets the life cycle state to discarded.
+ QTRY_COMPARE(dialogPage->lifecycleState(), QWebEnginePage::LifecycleState::Discarded);
+ delete dialogView;
+}
+
static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")};
W_QTEST_MAIN(tst_QWebEnginePage, params)