diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2019-07-29 13:10:14 +0200 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2019-08-20 09:19:01 +0200 |
commit | 1c33a4a6ae07106513a8105ebbc2d0c65363b333 (patch) | |
tree | 62cb3291e8de873908c774890f44dd2a080ba559 /tests | |
parent | b1bdb599a397d3f8d068b8619d32061c20e13e7c (diff) |
Fix QWebEnginePage visibility state
Calling
view.show();
view.load(...);
view.hide();
results in a WebContents in visible state because the first call to show() is
delayed via a timer and never canceled so it takes effect after the hide().
Also, the page's visibility state is not updated when changing views, so that a
visible QWebEngineView can be set to display a hidden QWebEnginePage.
Fixes: QTBUG-77209
Change-Id: I0243c659f4039a35c36e04ea55c5972666170fd0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index a7ff05f55..1bb65d7df 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -192,6 +192,8 @@ private Q_SLOTS: void webUIURLs_data(); void webUIURLs(); void visibilityState(); + void visibilityState2(); + void visibilityState3(); void jsKeyboardEvent(); void deletePage(); void closeOpenerTab(); @@ -3106,6 +3108,38 @@ void tst_QWebEngineView::visibilityState() QCOMPARE(evaluateJavaScriptSync(view.page(), "document.visibilityState").toString(), QStringLiteral("visible")); } +void tst_QWebEngineView::visibilityState2() +{ + QWebEngineView view; + QSignalSpy spy(&view, &QWebEngineView::loadFinished); + view.show(); + view.load(QStringLiteral("about:blank")); + view.hide(); + QVERIFY(spy.count() || spy.wait()); + QVERIFY(spy.takeFirst().takeFirst().toBool()); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.visibilityState").toString(), QStringLiteral("hidden")); +} + +void tst_QWebEngineView::visibilityState3() +{ + QWebEnginePage page1; + QWebEnginePage page2; + QSignalSpy spy1(&page1, &QWebEnginePage::loadFinished); + QSignalSpy spy2(&page2, &QWebEnginePage::loadFinished); + page1.load(QStringLiteral("about:blank")); + page2.load(QStringLiteral("about:blank")); + QVERIFY(spy1.count() || spy1.wait()); + QVERIFY(spy2.count() || spy2.wait()); + QWebEngineView view; + view.setPage(&page1); + view.show(); + QCOMPARE(evaluateJavaScriptSync(&page1, "document.visibilityState").toString(), QStringLiteral("visible")); + QCOMPARE(evaluateJavaScriptSync(&page2, "document.visibilityState").toString(), QStringLiteral("hidden")); + view.setPage(&page2); + QCOMPARE(evaluateJavaScriptSync(&page1, "document.visibilityState").toString(), QStringLiteral("hidden")); + QCOMPARE(evaluateJavaScriptSync(&page2, "document.visibilityState").toString(), QStringLiteral("visible")); +} + void tst_QWebEngineView::jsKeyboardEvent() { QWebEngineView view; |