summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-06-11 12:57:07 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-06-11 12:57:42 +0200
commit147d70f330648acd105d6eb62493366fcf1e3abd (patch)
treeb47c0939bc7dfa155b787448da5102a10a156cfe /tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
parent7f89badd0e1b71dabb5a88d1330b08ce9d8b6eb7 (diff)
parentaf1c0087e51b6e2ad905259bb7a1d50101735d2d (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Conflicts: .qmake.conf src/3rdparty src/core/configure.json src/core/profile_io_data_qt.cpp tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp Change-Id: Ie8ae4aa03881a0733ff497fff46e3f7040735650
Diffstat (limited to 'tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp')
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp95
1 files changed, 93 insertions, 2 deletions
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index dd1140a4f..47ae0bdb5 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -202,6 +202,10 @@ private Q_SLOTS:
void sendNotification();
void contentsSize();
+ void editActionsWithExplicitFocus();
+ void editActionsWithInitialFocus();
+ void editActionsWithFocusOnIframe();
+
private:
static QPoint elementCenter(QWebEnginePage *page, const QString &id);
@@ -709,8 +713,8 @@ void tst_QWebEnginePage::textSelection()
// these actions must exist
QVERIFY(page->action(QWebEnginePage::SelectAll) != 0);
- // ..but SelectAll is awalys enabled
- QCOMPARE(page->action(QWebEnginePage::SelectAll)->isEnabled(), true);
+ // ..but SelectAll is disabled because the page has no focus due to disabled FocusOnNavigationEnabled.
+ QCOMPARE(page->action(QWebEnginePage::SelectAll)->isEnabled(), false);
// Verify hasSelection returns false since there is no selection yet...
QCOMPARE(page->hasSelection(), false);
@@ -3398,6 +3402,93 @@ void tst_QWebEnginePage::contentsSize()
QCOMPARE(m_page->contentsSize().height(), 1216);
}
+void tst_QWebEnginePage::editActionsWithExplicitFocus()
+{
+ QWebEngineView view;
+ QWebEnginePage *page = view.page();
+ view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, false);
+
+ QSignalSpy loadFinishedSpy(page, &QWebEnginePage::loadFinished);
+ QSignalSpy selectionChangedSpy(page, &QWebEnginePage::selectionChanged);
+ QSignalSpy actionChangedSpy(page->action(QWebEnginePage::SelectAll), &QAction::changed);
+
+ // The view is hidden and no focus on the page. Edit actions should be disabled.
+ QVERIFY(!view.isVisible());
+ QVERIFY(!page->action(QWebEnginePage::SelectAll)->isEnabled());
+
+ page->setHtml(QString("<html><body><div>foo bar</div></body></html>"));
+ QTRY_COMPARE(loadFinishedSpy.count(), 1);
+
+ // Still no focus because focus on navigation is disabled. Edit actions don't do anything (should not crash).
+ QVERIFY(!page->action(QWebEnginePage::SelectAll)->isEnabled());
+ view.page()->triggerAction(QWebEnginePage::SelectAll);
+ QCOMPARE(selectionChangedSpy.count(), 0);
+ QCOMPARE(page->hasSelection(), false);
+
+ // Focus content by focusing window from JavaScript. Edit actions should be enabled and functional.
+ evaluateJavaScriptSync(page, "window.focus();");
+ QTRY_COMPARE(actionChangedSpy.count(), 1);
+ QVERIFY(page->action(QWebEnginePage::SelectAll)->isEnabled());
+ view.page()->triggerAction(QWebEnginePage::SelectAll);
+ QTRY_COMPARE(selectionChangedSpy.count(), 1);
+ QCOMPARE(page->hasSelection(), true);
+ QCOMPARE(page->selectedText(), QStringLiteral("foo bar"));
+}
+
+void tst_QWebEnginePage::editActionsWithInitialFocus()
+{
+ QWebEngineView view;
+ QWebEnginePage *page = view.page();
+ view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true);
+
+ QSignalSpy loadFinishedSpy(page, &QWebEnginePage::loadFinished);
+ QSignalSpy selectionChangedSpy(page, &QWebEnginePage::selectionChanged);
+ QSignalSpy actionChangedSpy(page->action(QWebEnginePage::SelectAll), &QAction::changed);
+
+ // The view is hidden and no focus on the page. Edit actions should be disabled.
+ QVERIFY(!view.isVisible());
+ QVERIFY(!page->action(QWebEnginePage::SelectAll)->isEnabled());
+
+ page->setHtml(QString("<html><body><div>foo bar</div></body></html>"));
+ QTRY_COMPARE(loadFinishedSpy.count(), 1);
+
+ // Content gets initial focus.
+ QTRY_COMPARE(actionChangedSpy.count(), 1);
+ QVERIFY(page->action(QWebEnginePage::SelectAll)->isEnabled());
+ view.page()->triggerAction(QWebEnginePage::SelectAll);
+ QTRY_COMPARE(selectionChangedSpy.count(), 1);
+ QCOMPARE(page->hasSelection(), true);
+ QCOMPARE(page->selectedText(), QStringLiteral("foo bar"));
+}
+
+void tst_QWebEnginePage::editActionsWithFocusOnIframe()
+{
+ QWebEngineView view;
+ QWebEnginePage *page = view.page();
+ view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, false);
+
+ QSignalSpy loadFinishedSpy(page, &QWebEnginePage::loadFinished);
+ QSignalSpy selectionChangedSpy(page, &QWebEnginePage::selectionChanged);
+ QSignalSpy actionChangedSpy(page->action(QWebEnginePage::SelectAll), &QAction::changed);
+
+ // The view is hidden and no focus on the page. Edit actions should be disabled.
+ QVERIFY(!view.isVisible());
+ QVERIFY(!page->action(QWebEnginePage::SelectAll)->isEnabled());
+
+ page->load(QUrl("qrc:///resources/iframe2.html"));
+ QTRY_COMPARE(loadFinishedSpy.count(), 1);
+ QVERIFY(!page->action(QWebEnginePage::SelectAll)->isEnabled());
+
+ // Focusing an iframe.
+ evaluateJavaScriptSync(page, "document.getElementsByTagName('iframe')[0].contentWindow.focus()");
+ QTRY_COMPARE(actionChangedSpy.count(), 1);
+ QVERIFY(page->action(QWebEnginePage::SelectAll)->isEnabled());
+ view.page()->triggerAction(QWebEnginePage::SelectAll);
+ QTRY_COMPARE(selectionChangedSpy.count(), 1);
+ QCOMPARE(page->hasSelection(), true);
+ QCOMPARE(page->selectedText(), QStringLiteral("inner"));
+}
+
static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")};
W_QTEST_MAIN(tst_QWebEnginePage, params)