diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2018-05-16 09:36:24 +0200 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2018-05-17 08:32:30 +0000 |
commit | bab4ababd097fd90b227a5a1bca63343b97af091 (patch) | |
tree | 3765bf3196f10453a38d973fd8ed2916c33ddd9d /tests | |
parent | 8476245d1a197d05f988ef87f17b7ccbbcbba878 (diff) |
Keep settings synchronized when RVH swaps
There can be more than one RenderViewHost assigned to a single
WebContents. This is the case when starting a page load results changing
processes. When applying settings during the load it updates only the old
RVH. This fix applies the settings to the new RVH too after the swap.
Task-number: QTBUG-66656
Change-Id: I833415b2a34f58e2a9a18c209a025c82b73aa65a
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp index 845520628..150b3c554 100644 --- a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp +++ b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp @@ -37,6 +37,7 @@ private Q_SLOTS: void defaultFontFamily(); void javascriptClipboard_data(); void javascriptClipboard(); + void setInAcceptNavigationRequest(); }; void tst_QWebEngineSettings::resetAttributes() @@ -162,6 +163,40 @@ void tst_QWebEngineSettings::javascriptClipboard() (pasteResult ? QString("AnotherText") : QString("OriginalText"))); } +class NavigationRequestOverride : public QWebEnginePage +{ +protected: + virtual bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame) + { + Q_UNUSED(type); + + if (isMainFrame && url.scheme().startsWith("data")) + settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true); + + return true; + } +}; + +void tst_QWebEngineSettings::setInAcceptNavigationRequest() +{ + NavigationRequestOverride page; + QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool))); + QWebEngineSettings::globalSettings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); + QVERIFY(!page.settings()->testAttribute(QWebEngineSettings::JavascriptEnabled)); + + page.load(QUrl("about:blank")); + QVERIFY(loadFinishedSpy.wait()); + QVERIFY(!page.settings()->testAttribute(QWebEngineSettings::JavascriptEnabled)); + + page.setHtml("<html><body>" + "<script>document.write('PASS')</script>" + "<noscript>FAIL</noscript>" + "</body></html>"); + QVERIFY(loadFinishedSpy.wait()); + QVERIFY(page.settings()->testAttribute(QWebEngineSettings::JavascriptEnabled)); + QCOMPARE(toPlainTextSync(&page), QStringLiteral("PASS")); +} + QTEST_MAIN(tst_QWebEngineSettings) #include "tst_qwebenginesettings.moc" |