diff options
Diffstat (limited to 'tests/auto/widgets/origins/tst_origins.cpp')
-rw-r--r-- | tests/auto/widgets/origins/tst_origins.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/auto/widgets/origins/tst_origins.cpp b/tests/auto/widgets/origins/tst_origins.cpp index 38b23f64e..a24791f6f 100644 --- a/tests/auto/widgets/origins/tst_origins.cpp +++ b/tests/auto/widgets/origins/tst_origins.cpp @@ -184,6 +184,7 @@ private Q_SLOTS: void sharedWorker(); void serviceWorker(); void viewSource(); + void createObjectURL(); private: bool load(const QUrl &url) @@ -682,5 +683,22 @@ void tst_Origins::viewSource() QCOMPARE(m_page->requestedUrl().toString(), QSL("pathsyntax-viewsourceallowed:/resources/viewSource.html")); } +void tst_Origins::createObjectURL() +{ + // Legal for registered custom schemes. + QVERIFY(load(QSL("qrc:/resources/createObjectURL.html"))); + QVERIFY(eval(QSL("result")).toString().startsWith(QSL("blob:qrc:"))); + + // Illegal for unregistered schemes (renderer gets terminated). + qRegisterMetaType<QWebEnginePage::RenderProcessTerminationStatus>("RenderProcessTerminationStatus"); + QSignalSpy loadFinishedSpy(m_page, &QWebEnginePage::loadFinished); + QSignalSpy renderProcessTerminatedSpy(m_page, &QWebEnginePage::renderProcessTerminated); + m_page->load(QSL("tst:/resources/createObjectURL.html")); + QVERIFY(!renderProcessTerminatedSpy.empty() || renderProcessTerminatedSpy.wait(20000)); + QVERIFY(renderProcessTerminatedSpy.front().value(0).value<QWebEnginePage::RenderProcessTerminationStatus>() + != QWebEnginePage::NormalTerminationStatus); + QVERIFY(loadFinishedSpy.empty()); +} + QTEST_MAIN(tst_Origins) #include "tst_origins.moc" |