diff options
author | Kirill Burtsev <kirill.burtsev@qt.io> | 2021-03-22 13:53:03 +0100 |
---|---|---|
committer | Kirill Burtsev <kirill.burtsev@qt.io> | 2021-05-06 09:07:15 +0200 |
commit | 9f0f9981d5e7b720e0d6359d64f2f93f1e1e3afd (patch) | |
tree | b3bd16b71fb3af2c3b7d94b11ad678769eb0c36e | |
parent | 4d4fc9cd120376f30ce0630b1e8c7bf174d44fae (diff) |
Remove tracking of frame which load error page
It was added to suppress progress notification for error page load
after failure, but since error page load is reported as a new navigation
(which clears list of tracked frames), it was actually doing the
opposite thing. The only situation where it suppresses progress is when
navigation was not finished (due to invalid domain or network error),
but in this case it was real progress change for whole load which should
propagate further.
Change-Id: Ifd1d681fb5c6495fb3afdc4247364afb4472c959
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 13 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.h | 2 | ||||
-rw-r--r-- | tests/auto/widgets/loadsignals/tst_loadsignals.cpp | 4 |
3 files changed, 4 insertions, 15 deletions
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index f0e4130e8..d52b07df3 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -259,7 +259,7 @@ void WebContentsDelegateQt::CloseContents(content::WebContents *source) void WebContentsDelegateQt::LoadProgressChanged(double progress) { - if (!m_loadingErrorFrameList.isEmpty() || !m_loadingInfo.isLoading()) // suppress signals that aren't between loadStarted and loadFinished + if (!m_loadingInfo.isLoading()) // suppress signals that aren't between loadStarted and loadFinished return; int p = qMin(qRound(progress * 100), 100); @@ -284,11 +284,6 @@ void WebContentsDelegateQt::RenderFrameCreated(content::RenderFrameHost *render_ m_frameFocusedObserver.addNode(node); } -void WebContentsDelegateQt::RenderFrameDeleted(content::RenderFrameHost *render_frame_host) -{ - m_loadingErrorFrameList.removeOne(render_frame_host->GetRoutingID()); -} - void WebContentsDelegateQt::RenderProcessGone(base::TerminationStatus status) { // RenderProcessHost::FastShutdownIfPossible results in TERMINATION_STATUS_STILL_RUNNING @@ -362,8 +357,6 @@ void WebContentsDelegateQt::DidStartNavigation(content::NavigationHandle *naviga if (!navigation_handle->IsInMainFrame() || !web_contents()->IsLoadingToDifferentDocument()) return; - - m_loadingErrorFrameList.clear(); m_faviconManager->resetCandidates(); m_loadingInfo.url = toQt(navigation_handle->GetURL()); @@ -428,7 +421,6 @@ void WebContentsDelegateQt::DidFinishNavigation(content::NavigationHandle *navig // The load will succede as an error-page load later, and we reported the original error above if (navigation_handle->IsErrorPage()) { // Now report we are starting to load an error-page. - m_loadingErrorFrameList.append(navigation_handle->GetRenderFrameHost()->GetRoutingID()); m_faviconManager->resetCandidates(); emitLoadStarted(true); @@ -506,7 +498,6 @@ void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_h if (validated_url.spec() == content::kUnreachableWebDataURL) { // error-pages should only ever fail due to abort: Q_ASSERT(error_code == -3 /* ERR_ABORTED */); - m_loadingErrorFrameList.removeOne(render_frame_host->GetRoutingID()); m_viewClient->iconChanged(QUrl()); emitLoadFinished(/* isErrorPage = */true); return; @@ -523,8 +514,6 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame { Q_ASSERT(validated_url.is_valid()); if (validated_url.spec() == content::kUnreachableWebDataURL) { - m_loadingErrorFrameList.removeOne(render_frame_host->GetRoutingID()); - // Trigger LoadFinished signal for main frame's error page only. if (!render_frame_host->GetParent()) { m_viewClient->iconChanged(QUrl()); diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index 7149f6bff..50027b6a8 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -158,7 +158,6 @@ public: // WebContentsObserver overrides void RenderFrameCreated(content::RenderFrameHost *render_frame_host) override; - void RenderFrameDeleted(content::RenderFrameHost *render_frame_host) override; void RenderProcessGone(base::TerminationStatus status) override; void RenderFrameHostChanged(content::RenderFrameHost *old_host, content::RenderFrameHost *new_host) override; void RenderViewHostChanged(content::RenderViewHost *old_host, content::RenderViewHost *new_host) override; @@ -226,7 +225,6 @@ private: int &streamCount(blink::mojom::MediaStreamType type); WebContentsAdapterClient *m_viewClient; - QVector<int64_t> m_loadingErrorFrameList; QScopedPointer<FaviconManager> m_faviconManager; QScopedPointer<FindTextHelper> m_findTextHelper; SavePageInfo m_savePageInfo; diff --git a/tests/auto/widgets/loadsignals/tst_loadsignals.cpp b/tests/auto/widgets/loadsignals/tst_loadsignals.cpp index bee6df486..4ff47d96e 100644 --- a/tests/auto/widgets/loadsignals/tst_loadsignals.cpp +++ b/tests/auto/widgets/loadsignals/tst_loadsignals.cpp @@ -414,7 +414,6 @@ void tst_LoadSignals::loadFinishedAfterNotFoundError() server.reset(new HttpServer); QVERIFY(server->start()); } - view.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false); auto url = server ? server->url("/not-found-page.html") @@ -425,6 +424,8 @@ void tst_LoadSignals::loadFinishedAfterNotFoundError() QCOMPARE(toPlainTextSync(view.page()), QString()); QCOMPARE(loadFinishedSpy.count(), 1); QCOMPARE(loadStartedSpy.count(), 1); + QVERIFY(std::is_sorted(page.loadProgress.begin(), page.loadProgress.end())); + page.loadProgress.clear(); view.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, true); url = server @@ -438,6 +439,7 @@ void tst_LoadSignals::loadFinishedAfterNotFoundError() QEXPECT_FAIL("", "No more loads (like separate load for error pages) are expected", Continue); QTRY_COMPARE_WITH_TIMEOUT(loadFinishedSpy.count(), 3, 1000); QCOMPARE(loadStartedSpy.count(), 2); + QVERIFY(std::is_sorted(page.loadProgress.begin(), page.loadProgress.end())); } void tst_LoadSignals::errorPageTriggered_data() |