summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp')
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index 123cb7b32..3415b06c5 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -56,6 +56,7 @@ private Q_SLOTS:
void httpAcceptLanguage();
void downloadItem();
void changePersistentPath();
+ void initiator();
};
void tst_QWebEngineProfile::init()
@@ -534,5 +535,44 @@ void tst_QWebEngineProfile::changePersistentPath()
QVERIFY(newPath.endsWith(QStringLiteral("Test2")));
}
+class InitiatorSpy : public QWebEngineUrlSchemeHandler
+{
+public:
+ QUrl initiator;
+ void requestStarted(QWebEngineUrlRequestJob *job) override
+ {
+ initiator = job->initiator();
+ job->fail(QWebEngineUrlRequestJob::RequestDenied);
+ }
+};
+
+void tst_QWebEngineProfile::initiator()
+{
+ InitiatorSpy handler;
+ QWebEngineProfile profile;
+ profile.installUrlSchemeHandler("foo", &handler);
+ QWebEnginePage page(&profile);
+ QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool)));
+
+ // about:blank has a unique origin, so initiator should be QUrl("null")
+ evaluateJavaScriptSync(&page, "window.location = 'foo:bar'");
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(handler.initiator, QUrl("null"));
+
+ page.setHtml("", QUrl("http://test:123/foo%20bar"));
+ QVERIFY(loadFinishedSpy.wait());
+
+ // baseUrl determines the origin, so QUrl("http://test:123")
+ evaluateJavaScriptSync(&page, "window.location = 'foo:bar'");
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(handler.initiator, QUrl("http://test:123"));
+
+ // Directly calling load/setUrl should have initiator QUrl(), meaning
+ // browser-initiated, trusted.
+ page.load(QUrl("foo:bar"));
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(handler.initiator, QUrl());
+}
+
QTEST_MAIN(tst_QWebEngineProfile)
#include "tst_qwebengineprofile.moc"