diff --git a/src/webengine/api/qquickwebenginetestsupport.cpp b/src/webengine/api/qquickwebenginetestsupport.cpp index b3290d3cc2d05063c873181d8c8daf8eeacb438b..b7b86312595bcc07256ca98ad7d119868e30da51 100644 --- a/src/webengine/api/qquickwebenginetestsupport.cpp +++ b/src/webengine/api/qquickwebenginetestsupport.cpp @@ -42,6 +42,7 @@ #include "qquickwebengineloadrequest_p.h" #include <QQuickWindow> #include <QtTest/qtest.h> +#include <QtCore/QTimer> QT_BEGIN_NAMESPACE @@ -56,19 +57,20 @@ QQuickWebEngineErrorPage::QQuickWebEngineErrorPage() void QQuickWebEngineErrorPage::loadFinished(bool success, const QUrl &url) { Q_UNUSED(success); - - QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadSucceededStatus); - Q_EMIT loadingChanged(&loadRequest); - return; + QTimer::singleShot(0, this, [this, url]() { + QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadSucceededStatus); + emit loadingChanged(&loadRequest); + }); } void QQuickWebEngineErrorPage::loadStarted(const QUrl &provisionalUrl) { - QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); - Q_EMIT loadingChanged(&loadRequest); + QTimer::singleShot(0, this, [this, provisionalUrl]() { + QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); + emit loadingChanged(&loadRequest); + }); } - QQuickWebEngineTestInputContext::QQuickWebEngineTestInputContext() : m_visible(false) { diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index b4270a87644cb2d5939c1b02b00497d0e219db8d..cb21f4b15d6d278c64c77726309f1418aa5d4ddc 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -434,14 +434,14 @@ void QQuickWebEngineViewPrivate::iconChanged(const QUrl &url) iconUrl = faviconProvider->attach(q, url); m_history->reset(); - Q_EMIT q->iconChanged(); + QTimer::singleShot(0, q, &QQuickWebEngineView::iconChanged); } void QQuickWebEngineViewPrivate::loadProgressChanged(int progress) { Q_Q(QQuickWebEngineView); loadProgress = progress; - Q_EMIT q->loadProgressChanged(); + QTimer::singleShot(0, q, &QQuickWebEngineView::loadProgressChanged); } void QQuickWebEngineViewPrivate::didUpdateTargetURL(const QUrl &hoveredUrl) @@ -486,8 +486,11 @@ void QQuickWebEngineViewPrivate::loadStarted(const QUrl &provisionalUrl, bool is isLoading = true; m_history->reset(); m_certificateErrorControllers.clear(); - QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); - Q_EMIT q->loadingChanged(&loadRequest); + + QTimer::singleShot(0, q, [q, provisionalUrl]() { + QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); + emit q->loadingChanged(&loadRequest); + }); } void QQuickWebEngineViewPrivate::loadCommitted() @@ -522,25 +525,27 @@ void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, boo isLoading = false; m_history->reset(); if (errorCode == WebEngineError::UserAbortedError) { - QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadStoppedStatus); - Q_EMIT q->loadingChanged(&loadRequest); + QTimer::singleShot(0, q, [q, url]() { + QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadStoppedStatus); + emit q->loadingChanged(&loadRequest); + }); return; } if (success) { explicitUrl = QUrl(); - QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadSucceededStatus); - Q_EMIT q->loadingChanged(&loadRequest); + QTimer::singleShot(0, q, [q, url]() { + QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadSucceededStatus); + emit q->loadingChanged(&loadRequest); + }); return; } Q_ASSERT(errorCode); - QQuickWebEngineLoadRequest loadRequest( - url, - QQuickWebEngineView::LoadFailedStatus, - errorDescription, - errorCode, - static_cast<QQuickWebEngineView::ErrorDomain>(WebEngineError::toQtErrorDomain(errorCode))); - Q_EMIT q->loadingChanged(&loadRequest); + QQuickWebEngineView::ErrorDomain errorDomain = static_cast<QQuickWebEngineView::ErrorDomain>(WebEngineError::toQtErrorDomain(errorCode)); + QTimer::singleShot(0, q, [q, url, errorDescription, errorCode, errorDomain]() { + QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadFailedStatus,errorDescription, errorCode, errorDomain); + emit q->loadingChanged(&loadRequest); + }); return; } diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 3f585cf7807f9d3039c8a89c439c145dbe0e8d49..ac8e9c667d7062b89e1d5070968e26ad99367685 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -328,7 +328,7 @@ void QWebEnginePagePrivate::loadStarted(const QUrl &provisionalUrl, bool isError return; isLoading = true; - Q_EMIT q->loadStarted(); + QTimer::singleShot(0, q, &QWebEnginePage::loadStarted); updateNavigationActions(); } @@ -346,7 +346,9 @@ void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isE if (isErrorPage) { Q_ASSERT(settings->testAttribute(QWebEngineSettings::ErrorPageEnabled)); - Q_EMIT q->loadFinished(false); + QTimer::singleShot(0, q, [q](){ + emit q->loadFinished(false); + }); return; } @@ -356,7 +358,9 @@ void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isE // Delay notifying failure until the error-page is done loading. // Error-pages are not loaded on failures due to abort. if (success || errorCode == -3 /* ERR_ABORTED*/ || !settings->testAttribute(QWebEngineSettings::ErrorPageEnabled)) { - Q_EMIT q->loadFinished(success); + QTimer::singleShot(0, q, [q, success](){ + emit q->loadFinished(success); + }); } updateNavigationActions(); }