From 5dd4dd1d1f83157339bac1600228895cc0c86088 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Sun, 6 Jun 2021 18:30:13 +0200 Subject: Replace testsupport's QQuickWebEngineErrorPage with isErrorPage Merge and unify handling of loading started/finished for quick and widgets by removing separate quick's type for monitoring error page load and replace it with an isErrorPage method in WebEngineLoadRequest to indicate, that load ended with an error page being displayed. Effectively this only slightly changes when loading finished gets emitted: now the signal is just postponed until error page is finished loading after initial failure. [ChangeLog][QWebEngineQuick][WebEngineLoadingInfo] New property 'isErrorPage' which indicates that the load resulted in an error page Change-Id: I3e59dc488429d776f7c8e083b6d0489fb30a65fc Reviewed-by: Allan Sandfeld Jensen --- src/core/api/qwebengineloadinginfo.cpp | 23 +++++++++++++++++++---- src/core/api/qwebengineloadinginfo.h | 15 ++++++++++++--- src/core/api/qwebenginepage.cpp | 21 +++++---------------- src/core/api/qwebenginepage_p.h | 4 ++-- 4 files changed, 38 insertions(+), 25 deletions(-) (limited to 'src/core/api') diff --git a/src/core/api/qwebengineloadinginfo.cpp b/src/core/api/qwebengineloadinginfo.cpp index fcbb2ce7a..03a31ab72 100644 --- a/src/core/api/qwebengineloadinginfo.cpp +++ b/src/core/api/qwebengineloadinginfo.cpp @@ -56,9 +56,11 @@ Q_STATIC_ASSERT(static_cast(WebEngineError::DnsErrorDomain) == static_cast< class QWebEngineLoadingInfo::QWebEngineLoadingInfoPrivate : public QSharedData { public: - QWebEngineLoadingInfoPrivate(const QUrl& url, LoadStatus status, const QString& errorString, int errorCode, ErrorDomain errorDomain) + QWebEngineLoadingInfoPrivate(const QUrl& url, LoadStatus status, bool isErrorPage, + const QString& errorString, int errorCode, ErrorDomain errorDomain) : url(url) , status(status) + , isErrorPage(isErrorPage) , errorString(errorString) , errorCode(errorCode) , errorDomain(errorDomain) @@ -67,6 +69,7 @@ public: QUrl url; LoadStatus status; + bool isErrorPage; QString errorString; int errorCode; ErrorDomain errorDomain; @@ -83,9 +86,9 @@ public: \sa QWebEnginePage::loadStarted, QWebEnginePage::loadFinished, WebEngineView::loadingChanged */ -QWebEngineLoadingInfo::QWebEngineLoadingInfo(const QUrl& url, LoadStatus status, const QString& errorString, - int errorCode, ErrorDomain errorDomain) - : d_ptr(new QWebEngineLoadingInfoPrivate(url, status, errorString, errorCode, errorDomain)) +QWebEngineLoadingInfo::QWebEngineLoadingInfo(const QUrl& url, LoadStatus status, bool isErrorPage, + const QString& errorString, int errorCode, ErrorDomain errorDomain) + : d_ptr(new QWebEngineLoadingInfoPrivate(url, status, isErrorPage, errorString, errorCode, errorDomain)) { } @@ -132,6 +135,18 @@ LoadStatus QWebEngineLoadingInfo::status() const Q_D(const QWebEngineLoadingInfo); return d->status; } +/*! + \property QWebEngineLoadingInfo::isErrorPage + \property Indicates if the load's resulted in an error page. +*/ +/*! + Returns true if the load's resulted is an error page. +*/ +bool QWebEngineLoadingInfo::isErrorPage() const +{ + Q_D(const QWebEngineLoadingInfo); + return d->isErrorPage; +} /*! \property QWebEngineLoadingInfo::errorString \brief Holds the error message. diff --git a/src/core/api/qwebengineloadinginfo.h b/src/core/api/qwebengineloadinginfo.h index bd07d52a3..8aacb0281 100644 --- a/src/core/api/qwebengineloadinginfo.h +++ b/src/core/api/qwebengineloadinginfo.h @@ -45,12 +45,18 @@ #include #include +namespace QtWebEngineCore { +class WebContentsAdapter; +class WebContentsDelegateQt; +} + QT_BEGIN_NAMESPACE class Q_WEBENGINECORE_EXPORT QWebEngineLoadingInfo { Q_GADGET Q_PROPERTY(QUrl url READ url CONSTANT FINAL) + Q_PROPERTY(bool isErrorPage READ isErrorPage CONSTANT FINAL) Q_PROPERTY(LoadStatus status READ status CONSTANT FINAL) Q_PROPERTY(QString errorString READ errorString CONSTANT FINAL) Q_PROPERTY(ErrorDomain errorDomain READ errorDomain CONSTANT FINAL) @@ -83,19 +89,22 @@ public: ~QWebEngineLoadingInfo(); QUrl url() const; + bool isErrorPage() const; LoadStatus status() const; QString errorString() const; ErrorDomain errorDomain() const; int errorCode() const; private: - QWebEngineLoadingInfo(const QUrl& url, LoadStatus status, const QString& errorString = QString(), - int errorCode = 0, ErrorDomain errorDomain = NoErrorDomain); + QWebEngineLoadingInfo(const QUrl& url, LoadStatus status, + bool isErrorPage = false, const QString& errorString = QString(), + int errorCode = 0, ErrorDomain errorDomain = NoErrorDomain); class QWebEngineLoadingInfoPrivate; Q_DECLARE_PRIVATE(QWebEngineLoadingInfo) QExplicitlySharedDataPointer d_ptr; friend class QQuickWebEngineViewPrivate; - friend class QQuickWebEngineErrorPage; + friend class QtWebEngineCore::WebContentsAdapter; + friend class QtWebEngineCore::WebContentsDelegateQt; }; QT_END_NAMESPACE diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp index 460b5a351..5298849f8 100644 --- a/src/core/api/qwebenginepage.cpp +++ b/src/core/api/qwebenginepage.cpp @@ -52,6 +52,7 @@ #include "qwebenginefullscreenrequest.h" #include "qwebenginehistory.h" #include "qwebenginehistory_p.h" +#include "qwebengineloadinginfo.h" #include "qwebenginenavigationrequest.h" #include "qwebenginenewwindowrequest.h" #include "qwebenginenotification.h" @@ -300,31 +301,19 @@ QColor QWebEnginePagePrivate::backgroundColor() const return m_backgroundColor; } -void QWebEnginePagePrivate::loadStarted(const QUrl &provisionalUrl, bool isErrorPage) +void QWebEnginePagePrivate::loadStarted(QWebEngineLoadingInfo /* info */) { - Q_UNUSED(provisionalUrl); Q_Q(QWebEnginePage); - - if (isErrorPage) - return; - isLoading = true; - QTimer::singleShot(0, q, &QWebEnginePage::loadStarted); } -void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) +void QWebEnginePagePrivate::loadFinished(QWebEngineLoadingInfo info) { Q_Q(QWebEnginePage); - Q_UNUSED(url); - Q_UNUSED(errorCode); - Q_UNUSED(errorDescription); - - if (isErrorPage) - return; - isLoading = false; - QTimer::singleShot(0, q, [q, success](){ + bool success = info.status() == QWebEngineLoadingInfo::LoadSucceededStatus; + QTimer::singleShot(0, q, [q, success] () { emit q->loadFinished(success); }); } diff --git a/src/core/api/qwebenginepage_p.h b/src/core/api/qwebenginepage_p.h index a830028f8..46dcf2ce8 100644 --- a/src/core/api/qwebenginepage_p.h +++ b/src/core/api/qwebenginepage_p.h @@ -134,10 +134,10 @@ public: void renderProcessPidChanged(qint64 pid) override; QRectF viewportRect() const override; QColor backgroundColor() const override; - void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) override; + void loadStarted(QWebEngineLoadingInfo info) override; void loadCommitted() override { } void didFirstVisuallyNonEmptyPaint() override { } - void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) override; + void loadFinished(QWebEngineLoadingInfo info) override; void focusContainer() override; void unhandledKeyEvent(QKeyEvent *event) override; QSharedPointer -- cgit v1.2.3