diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index e676363781a72dcb40b0a669ebd31f8ca557e3db..6b729d8f214acfae0036f5dfa53047a01aec9718 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -3788,7 +3788,6 @@ public:
     enum Signal {
         LoadStarted,
         LoadFinished,
-        ProvisionalLoad
     };
 
     enum Type {
@@ -3820,25 +3819,21 @@ URLSetter::URLSetter(QWebEnginePage* page, Signal signal, URLSetter::Type type,
         connect(m_page, SIGNAL(loadStarted()), SLOT(execute()));
     else if (signal == LoadFinished)
         connect(m_page, SIGNAL(loadFinished(bool)), SLOT(execute()));
-    else
-        connect(m_page, SIGNAL(provisionalLoad()), SLOT(execute()));
 }
 
 void URLSetter::execute()
 {
     // We track only the first emission.
     m_page->disconnect(this);
+    connect(m_page, SIGNAL(loadFinished(bool)), SIGNAL(finished()));
     if (m_type == URLSetter::UseLoad)
         m_page->load(m_url);
     else
         m_page->setUrl(m_url);
-    connect(m_page, SIGNAL(loadFinished(bool)), SIGNAL(finished()));
 }
 
 void tst_QWebEnginePage::loadInSignalHandlers_data()
 {
-    QSKIP("FIXME: This crashes in content::WebContentsImpl::NavigateToEntry because of reentrancy. Should we require QueuedConnections or do it ourselves to support this?");
-
     QTest::addColumn<URLSetter::Type>("type");
     QTest::addColumn<URLSetter::Signal>("signal");
     QTest::addColumn<QUrl>("url");
@@ -3850,15 +3845,11 @@ void tst_QWebEnginePage::loadInSignalHandlers_data()
     QTest::newRow("call load() in loadStarted() after invalid url") << URLSetter::UseLoad << URLSetter::LoadStarted << invalidUrl;
     QTest::newRow("call load() in loadFinished() after valid url") << URLSetter::UseLoad << URLSetter::LoadFinished << validUrl;
     QTest::newRow("call load() in loadFinished() after invalid url") << URLSetter::UseLoad << URLSetter::LoadFinished << invalidUrl;
-    QTest::newRow("call load() in provisionalLoad() after valid url") << URLSetter::UseLoad << URLSetter::ProvisionalLoad << validUrl;
-    QTest::newRow("call load() in provisionalLoad() after invalid url") << URLSetter::UseLoad << URLSetter::ProvisionalLoad << invalidUrl;
 
     QTest::newRow("call setUrl() in loadStarted() after valid url") << URLSetter::UseSetUrl << URLSetter::LoadStarted << validUrl;
     QTest::newRow("call setUrl() in loadStarted() after invalid url") << URLSetter::UseSetUrl << URLSetter::LoadStarted << invalidUrl;
     QTest::newRow("call setUrl() in loadFinished() after valid url") << URLSetter::UseSetUrl << URLSetter::LoadFinished << validUrl;
     QTest::newRow("call setUrl() in loadFinished() after invalid url") << URLSetter::UseSetUrl << URLSetter::LoadFinished << invalidUrl;
-    QTest::newRow("call setUrl() in provisionalLoad() after valid url") << URLSetter::UseSetUrl << URLSetter::ProvisionalLoad << validUrl;
-    QTest::newRow("call setUrl() in provisionalLoad() after invalid url") << URLSetter::UseSetUrl << URLSetter::ProvisionalLoad << invalidUrl;
 }
 
 void tst_QWebEnginePage::loadInSignalHandlers()
@@ -3869,10 +3860,13 @@ void tst_QWebEnginePage::loadInSignalHandlers()
 
     const QUrl urlForSetter("qrc:/resources/test1.html");
     URLSetter setter(m_page, signal, type, urlForSetter);
-
-    m_page->load(url);
     QSignalSpy spy(&setter, &URLSetter::finished);
-    QVERIFY(spy.wait());
+    m_page->load(url);
+    // every loadStarted() call should have also loadFinished()
+    if (signal == URLSetter::LoadStarted)
+        QTRY_COMPARE(spy.count(), 2);
+    else
+        QTRY_COMPARE(spy.count(), 1);
     QCOMPARE(m_page->url(), urlForSetter);
 }