summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-09 15:45:26 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-10 12:47:04 +0000
commit318e6d758065892fbb0b56c86b8ed1f2b23cf931 (patch)
tree087535606cc55e2dd37e2ba7d670d2314be31dae /tests
parent5a5cc11a72826b8864fc758025aaea4fd106fe41 (diff)
parentefee223d7ff6e0e30fb9d9dff1536936922d4a03 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Conflicts: src/core/profile_adapter.cpp src/core/profile_adapter.h src/webengine/api/qquickwebengineprofile.cpp src/webenginewidgets/api/qwebengineprofile.cpp tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp Change-Id: Ic561f22b361e32a0a63668c73bf6c0fc9c1ce16f
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp80
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp15
2 files changed, 95 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index 1822069be..8b75067ee 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -32,6 +32,7 @@
#include <QtWebEngineCore/qwebengineurlrequestinterceptor.h>
#include <QtWebEngineCore/qwebengineurlrequestjob.h>
#include <QtWebEngineCore/qwebenginecookiestore.h>
+#include <QtWebEngineCore/qwebengineurlscheme.h>
#include <QtWebEngineCore/qwebengineurlschemehandler.h>
#include <QtWebEngineWidgets/qwebengineprofile.h>
#include <QtWebEngineWidgets/qwebenginepage.h>
@@ -44,6 +45,7 @@ class tst_QWebEngineProfile : public QObject
Q_OBJECT
private Q_SLOTS:
+ void initTestCase();
void init();
void cleanup();
void privateProfile();
@@ -55,14 +57,33 @@ private Q_SLOTS:
void urlSchemeHandlerFailOnRead();
void urlSchemeHandlerStreaming();
void urlSchemeHandlerRequestHeaders();
+ void urlSchemeHandlerInstallation();
void customUserAgent();
void httpAcceptLanguage();
void downloadItem();
void changePersistentPath();
void initiator();
+ void badDeleteOrder();
void qtbug_71895(); // this should be the last test
};
+void tst_QWebEngineProfile::initTestCase()
+{
+ QWebEngineUrlScheme foo("foo");
+ QWebEngineUrlScheme stream("stream");
+ QWebEngineUrlScheme letterto("letterto");
+ QWebEngineUrlScheme aviancarrier("aviancarrier");
+ foo.setSyntax(QWebEngineUrlScheme::Syntax::Host);
+ stream.setSyntax(QWebEngineUrlScheme::Syntax::HostAndPort);
+ stream.setDefaultPort(8080);
+ letterto.setSyntax(QWebEngineUrlScheme::Syntax::Path);
+ aviancarrier.setSyntax(QWebEngineUrlScheme::Syntax::Path);
+ QWebEngineUrlScheme::registerScheme(foo);
+ QWebEngineUrlScheme::registerScheme(stream);
+ QWebEngineUrlScheme::registerScheme(letterto);
+ QWebEngineUrlScheme::registerScheme(aviancarrier);
+}
+
void tst_QWebEngineProfile::init()
{
//make sure defualt global profile is 'default' across all the tests
@@ -84,6 +105,7 @@ void tst_QWebEngineProfile::cleanup()
profile->setCachePath(QString());
profile->setPersistentStoragePath(QString());
profile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);
+ profile->removeAllUrlSchemeHandlers();
}
void tst_QWebEngineProfile::privateProfile()
@@ -505,6 +527,46 @@ void tst_QWebEngineProfile::urlSchemeHandlerRequestHeaders()
QVERIFY(loadFinishedSpy.wait());
}
+void tst_QWebEngineProfile::urlSchemeHandlerInstallation()
+{
+ FailingUrlSchemeHandler handler;
+ QWebEngineProfile profile;
+
+ // Builtin schemes that *cannot* be overridden.
+ for (auto scheme : { "about", "blob", "data", "javascript", "qrc", "https", "http", "file",
+ "ftp", "wss", "ws", "filesystem", "FileSystem" }) {
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ QRegularExpression("Cannot install a URL scheme handler overriding internal scheme.*"));
+ auto prevHandler = profile.urlSchemeHandler(scheme);
+ profile.installUrlSchemeHandler(scheme, &handler);
+ QCOMPARE(profile.urlSchemeHandler(scheme), prevHandler);
+ }
+
+ // Builtin schemes that *can* be overridden.
+ for (auto scheme : { "gopher", "GOPHER" }) {
+ profile.installUrlSchemeHandler(scheme, &handler);
+ QCOMPARE(profile.urlSchemeHandler(scheme), &handler);
+ profile.removeUrlScheme(scheme);
+ }
+
+ // Other schemes should be registered with QWebEngineUrlScheme first, but
+ // handler installation still succeeds to preserve backwards compatibility.
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ QRegularExpression("Please register the custom scheme.*"));
+ profile.installUrlSchemeHandler("tst", &handler);
+ QCOMPARE(profile.urlSchemeHandler("tst"), &handler);
+
+ // Existing handler cannot be overridden.
+ FailingUrlSchemeHandler handler2;
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ QRegularExpression("URL scheme handler already installed.*"));
+ profile.installUrlSchemeHandler("tst", &handler2);
+ QCOMPARE(profile.urlSchemeHandler("tst"), &handler);
+ profile.removeUrlScheme("tst");
+}
void tst_QWebEngineProfile::customUserAgent()
{
@@ -630,6 +692,24 @@ void tst_QWebEngineProfile::initiator()
QCOMPARE(handler.initiator, QUrl());
}
+void tst_QWebEngineProfile::badDeleteOrder()
+{
+ QWebEngineProfile *profile = new QWebEngineProfile();
+ QWebEngineView *view = new QWebEngineView();
+ view->resize(640, 480);
+ view->show();
+ QVERIFY(QTest::qWaitForWindowExposed(view));
+ QWebEnginePage *page = new QWebEnginePage(profile, view);
+ view->setPage(page);
+
+ QSignalSpy spyLoadFinished(page, SIGNAL(loadFinished(bool)));
+ page->setHtml(QStringLiteral("<html><body><h1>Badly handled page!</h1></body></html>"));
+ QTRY_COMPARE(spyLoadFinished.count(), 1);
+
+ delete profile;
+ delete view;
+}
+
void tst_QWebEngineProfile::qtbug_71895()
{
QWebEngineView view;
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
index 74adbaba9..d3ea27fc2 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
@@ -197,6 +197,7 @@ private Q_SLOTS:
void closeOpenerTab();
void switchPage();
void setPageDeletesImplicitPage();
+ void setPageDeletesImplicitPage2();
void setViewDeletesImplicitPage();
void setPagePreservesExplicitPage();
void setViewPreservesExplicitPage();
@@ -3211,6 +3212,20 @@ void tst_QWebEngineView::setPageDeletesImplicitPage()
QVERIFY(!implicitPage); // should be deleted
}
+void tst_QWebEngineView::setPageDeletesImplicitPage2()
+{
+ QWebEngineView view1;
+ QWebEngineView view2;
+ QPointer<QWebEnginePage> implicitPage = view1.page();
+ view2.setPage(view1.page());
+ QVERIFY(implicitPage);
+ QVERIFY(view1.page() != implicitPage);
+ QWebEnginePage explicitPage;
+ view2.setPage(&explicitPage);
+ QCOMPARE(view2.page(), &explicitPage);
+ QVERIFY(!implicitPage); // should be deleted
+}
+
void tst_QWebEngineView::setViewDeletesImplicitPage()
{
QWebEngineView view;