diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 4129e8c335f3cb7fd195076d5b41f5b6fdda35f4..3f223f733fcdcb51dfb3546c834d0f56d6156c27 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -448,7 +448,7 @@ void WebContentsAdapter::setContent(const QByteArray &data, const QString &mimeT QUrl WebContentsAdapter::activeUrl() const { Q_D(const WebContentsAdapter); - return toQt(d->webContents->GetVisibleURL()); + return toQt(d->webContents->GetLastCommittedURL()); } QUrl WebContentsAdapter::requestedUrl() const diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index b466c856602d7e590378f53985dda33305b5d173..ad850e84e8b7cab467c2199f38f73b7758c6008c 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -241,6 +241,7 @@ void QQuickWebEngineViewPrivate::urlChanged(const QUrl &url) { Q_Q(QQuickWebEngineView); Q_UNUSED(url); + explicitUrl = QUrl(); Q_EMIT q->urlChanged(); } @@ -309,6 +310,7 @@ void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, int return; } if (success) { + explicitUrl = QUrl(); QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadSucceededStatus); Q_EMIT q->loadingChanged(&loadRequest); return; @@ -506,7 +508,7 @@ QQuickWebEngineView::~QQuickWebEngineView() QUrl QQuickWebEngineView::url() const { Q_D(const QQuickWebEngineView); - return d->adapter->activeUrl(); + return d->explicitUrl.isValid() ? d->explicitUrl : d->adapter->activeUrl(); } void QQuickWebEngineView::setUrl(const QUrl& url) @@ -515,6 +517,7 @@ void QQuickWebEngineView::setUrl(const QUrl& url) return; Q_D(QQuickWebEngineView); + d->explicitUrl = url; d->adapter->load(url); } diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index ac8b8564f4189d69c94a5550ae4d4fd099f6a95c..6662f1f021a0aa3215e0bea03a64ed5c46be67dc 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -188,6 +188,7 @@ public: QScopedPointer<QQuickWebEngineHistory> m_history; QScopedPointer<QQuickWebEngineSettings> m_settings; QQmlComponent *contextMenuExtraItems; + QUrl explicitUrl; QUrl icon; int loadProgress; bool inspectable; diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 8c3c2bb4527e71ee983c664b229b84be1fa4d549..d6782974bfd7a40e6ea4df4148f94141771839a8 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -196,7 +196,7 @@ void QWebEnginePagePrivate::titleChanged(const QString &title) void QWebEnginePagePrivate::urlChanged(const QUrl &url) { Q_Q(QWebEnginePage); - m_explicitUrl = QUrl(); + explicitUrl = QUrl(); Q_EMIT q->urlChanged(url); } @@ -256,7 +256,7 @@ void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, int erro Q_UNUSED(errorDescription); isLoading = false; if (success) - m_explicitUrl = QUrl(); + explicitUrl = QUrl(); Q_EMIT q->loadFinished(success); updateNavigationActions(); } @@ -825,14 +825,14 @@ QString QWebEnginePage::title() const void QWebEnginePage::setUrl(const QUrl &url) { Q_D(QWebEnginePage); - d->m_explicitUrl = url; + d->explicitUrl = url; load(url); } QUrl QWebEnginePage::url() const { Q_D(const QWebEnginePage); - return d->m_explicitUrl.isValid() ? d->m_explicitUrl : d->adapter->activeUrl(); + return d->explicitUrl.isValid() ? d->explicitUrl : d->adapter->activeUrl(); } QUrl QWebEnginePage::requestedUrl() const diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index ccbfb2bc131bc1f7e669366334925417a807dff2..54129229f8850ce468188fd4a1bd39f4990b8283 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -151,7 +151,7 @@ public: QWebEngineSettings *settings; QWebEngineView *view; QSize viewportSize; - QUrl m_explicitUrl; + QUrl explicitUrl; WebEngineContextMenuData m_menuData; bool isLoading; diff --git a/tests/auto/quick/qmltests/data/tst_loadUrl.qml b/tests/auto/quick/qmltests/data/tst_loadUrl.qml index 41faa6bc37151d04cbf3cd57d7af581a6965f341..5f51e90364a58a9e33d6df94c649a0baef9baf51 100644 --- a/tests/auto/quick/qmltests/data/tst_loadUrl.qml +++ b/tests/auto/quick/qmltests/data/tst_loadUrl.qml @@ -125,7 +125,9 @@ TestWebEngineView { var handleLoadFailed = function(loadRequest) { if (loadRequest.status == WebEngineView.LoadFailedStatus) { webEngineView.loadHtml("load failed", bogusSite) - compare(webEngineView.url, bogusSite) + // Since the load did not succeed the active url is the + // url of the previous successful load. + compare(webEngineView.url, "about:blank") compare(loadRequest.url, bogusSite) } } diff --git a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp index 1a8745f25422ba209d888d56a1ab7368b0ff040b..9901bcd76dce13ed85e0d4b4837bbe2b056df696 100644 --- a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp +++ b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp @@ -1549,7 +1549,6 @@ void tst_QWebEngineFrame::setUrlThenLoads() // Just after first load. URL didn't changed yet. m_page->load(urlToLoad1); - QEXPECT_FAIL("", "Slight change: url() will return the loaded URL immediately.", Continue); QCOMPARE(m_page->url(), url); QCOMPARE(m_page->requestedUrl(), urlToLoad1); // baseUrlSync spins an event loop and this sometimes return the next result. @@ -1566,7 +1565,6 @@ void tst_QWebEngineFrame::setUrlThenLoads() // Just after second load. URL didn't changed yet. m_page->load(urlToLoad2); - QEXPECT_FAIL("", "Slight change: url() will return the loaded URL immediately.", Continue); QCOMPARE(m_page->url(), urlToLoad1); QCOMPARE(m_page->requestedUrl(), urlToLoad2); QCOMPARE(baseUrlSync(m_page), extractBaseUrl(urlToLoad1));