From e2382d300c2620d476ba2afad210a7ed0424bf8c Mon Sep 17 00:00:00 2001 From: Adam Kallai Date: Mon, 6 Jan 2014 06:30:02 -0800 Subject: Implement QQuickWebEngineLoadRequest class It contains information about a requested load of a web page. Change-Id: Ie45706adb51ee5bce98e7af01252d9a8389db57d Reviewed-by: Pierre Rossi Reviewed-by: Andras Becsi --- src/webengine/api/qquickwebengineview.cpp | 40 +++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 5 deletions(-) (limited to 'src/webengine/api/qquickwebengineview.cpp') diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index d159ed8fc..ac2dc681e 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -42,7 +42,10 @@ #include "qquickwebengineview_p.h" #include "qquickwebengineview_p_p.h" +#include "net/base/net_errors.h" +#include "qquickwebengineloadrequest_p.h" #include "web_contents_adapter.h" +#include "web_engine_error.h" #include "render_widget_host_view_qt_delegate_quick.h" #include @@ -57,6 +60,7 @@ QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() , v(new QQuickWebEngineViewport(this)) , loadProgress(0) , inspectable(false) + , m_isLoading(false) , devicePixelRatio(QGuiApplication::primaryScreen()->devicePixelRatio()) , m_dpiScale(1.0) { @@ -123,7 +127,12 @@ void QQuickWebEngineViewPrivate::iconChanged(const QUrl &url) void QQuickWebEngineViewPrivate::loadingStateChanged() { Q_Q(QQuickWebEngineView); - Q_EMIT q->loadingStateChanged(); + const bool wasLoading = m_isLoading; + m_isLoading = adapter->isLoading(); + if (m_isLoading && !wasLoading) { + QQuickWebEngineLoadRequest loadRequest(q->url(), QQuickWebEngineView::LoadStartedStatus); + Q_EMIT q->loadingStateChanged(&loadRequest); + } } void QQuickWebEngineViewPrivate::loadProgressChanged(int progress) @@ -144,11 +153,29 @@ qreal QQuickWebEngineViewPrivate::dpiScale() const return m_dpiScale; } -void QQuickWebEngineViewPrivate::loadFinished(bool success) +void QQuickWebEngineViewPrivate::loadFinished(bool success, int error_code, const QString &error_description) { Q_Q(QQuickWebEngineView); - Q_UNUSED(success); - Q_EMIT q->loadingStateChanged(); + if (error_code == net::ERR_ABORTED) { + QQuickWebEngineLoadRequest loadRequest(q->url(), QQuickWebEngineView::LoadStoppedStatus); + Q_EMIT q->loadingStateChanged(&loadRequest); + return; + } + if (success) { + QQuickWebEngineLoadRequest loadRequest(q->url(), QQuickWebEngineView::LoadSucceededStatus); + Q_EMIT q->loadingStateChanged(&loadRequest); + return; + } + + Q_ASSERT(error_code); + QQuickWebEngineLoadRequest loadRequest( + q->url(), + QQuickWebEngineView::LoadFailedStatus, + error_description, + error_code, + static_cast(WebEngineError::toQtErrorDomain(error_code))); + Q_EMIT q->loadingStateChanged(&loadRequest); + return; } void QQuickWebEngineViewPrivate::focusContainer() @@ -391,7 +418,10 @@ void QQuickWebEngineViewExperimental::adoptHandle(QQuickWebEngineViewHandle *vie emit q->titleChanged(); emit q->urlChanged(); emit q->iconChanged(); - emit q->loadingStateChanged(); + // FIXME: The current loading state should be stored in the WebContentAdapter + // and it should be checked here if the signal emission is really necessary. + QQuickWebEngineLoadRequest loadRequest(viewHandle->adapter->activeUrl(), QQuickWebEngineView::LoadSucceededStatus); + emit q->loadingStateChanged(&loadRequest); emit q->loadProgressChanged(); } -- cgit v1.2.3