diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2023-10-18 01:05:23 +0200 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2023-11-02 14:21:04 +0200 |
commit | d2f119a94d27a98fd58a0c60bacfc8f91e028a34 (patch) | |
tree | b63e679776b2c8a6afb8380b0c7b2bd167b46019 /tests/auto/widgets | |
parent | 9e128204172c70cd4ad7dc7f5d28dc9ba3e54a67 (diff) |
Reinstall URLRequestInterceptors during new view adoptation
The pointer to the page interceptor is stored in WebContentsAdapter
and we lose it when recreating the adapter. Prevent this and add
auto test.
Fixes: QTBUG-117867
Pick-to: 6.6
Change-Id: I5e79cdcc5996bdf2bb53c3016d4133f978ccfb39
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 154fb523f..a68d944fc 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -65,6 +65,7 @@ #include <qwebenginescript.h> #include <qwebenginescriptcollection.h> #include <qwebenginesettings.h> +#include <qwebengineurlrequestinterceptor.h> #include <qwebengineurlrequestjob.h> #include <qwebengineurlscheme.h> #include <qwebengineurlschemehandler.h> @@ -271,6 +272,7 @@ private Q_SLOTS: void childFrameInput(); void openLinkInNewPageWithWebWindowType_data(); void openLinkInNewPageWithWebWindowType(); + void keepInterceptorAfterNewWindowRequested(); private: static bool isFalseJavaScriptResult(QWebEnginePage *page, const QString &javaScript); @@ -5328,6 +5330,53 @@ void tst_QWebEnginePage::openLinkInNewPageWithWebWindowType() QCOMPARE(page.windowType, webWindowType); } +class DoNothingInterceptor : public QWebEngineUrlRequestInterceptor +{ +public: + DoNothingInterceptor() { } + + void interceptRequest(QWebEngineUrlRequestInfo &) override + { + ran = true; + } + bool ran = false; +}; + +void tst_QWebEnginePage::keepInterceptorAfterNewWindowRequested() +{ + DoNothingInterceptor interceptor; + QWebEnginePage page; + page.setUrlRequestInterceptor(&interceptor); + connect(&page, &QWebEnginePage::newWindowRequested, [&](QWebEngineNewWindowRequest &request) { + request.openIn(&page); + }); + QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool))); + + QWebEngineView view; + view.resize(500, 500); + view.setPage(&page); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + + page.setHtml("<html><body>" + "<a id='link' href='hello' target='_blank'>link</a>" + "</body></html>"); + QTRY_COMPARE(loadFinishedSpy.size(), 1); + QVERIFY(loadFinishedSpy.takeFirst().value(0).toBool()); + QVERIFY(interceptor.ran); + interceptor.ran = false; + + QTest::mouseClick(view.focusProxy(), Qt::LeftButton, {}, elementCenter(&page, "link")); + QTRY_COMPARE(loadFinishedSpy.size(), 1); + QVERIFY(loadFinishedSpy.takeFirst().value(0).toBool()); + QVERIFY(!interceptor.ran); + + page.setHtml("<html><body></body></html>"); + QTRY_COMPARE(loadFinishedSpy.size(), 1); + QVERIFY(loadFinishedSpy.takeFirst().value(0).toBool()); + QVERIFY(interceptor.ran); +} + static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")}; W_QTEST_MAIN(tst_QWebEnginePage, params) |