summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Burtsev <kirill.burtsev@qt.io>2021-03-22 13:53:03 +0100
committerKirill Burtsev <kirill.burtsev@qt.io>2021-05-06 09:07:15 +0200
commit9f0f9981d5e7b720e0d6359d64f2f93f1e1e3afd (patch)
treeb3bd16b71fb3af2c3b7d94b11ad678769eb0c36e
parent4d4fc9cd120376f30ce0630b1e8c7bf174d44fae (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.cpp13
-rw-r--r--src/core/web_contents_delegate_qt.h2
-rw-r--r--tests/auto/widgets/loadsignals/tst_loadsignals.cpp4
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()