1 |
commit: 0fa526a294b2183c25512dad101db37aed871c54 |
2 |
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun May 16 18:41:09 2021 +0000 |
4 |
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon May 17 21:14:47 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0fa526a2 |
7 |
|
8 |
dev-qt/qtwebengine: Backport QTBUG-91773 loadFinished signal fix |
9 |
|
10 |
Thanks to Arch Linux. |
11 |
|
12 |
See also: https://bugreports.qt.io/browse/QTBUG-91773 |
13 |
|
14 |
Package-Manager: Portage-3.0.18, Repoman-3.0.3 |
15 |
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org> |
16 |
|
17 |
.../qtwebengine-5.15.2_p20210421-qtbug-91773.patch | 372 +++++++++++++++++++++ |
18 |
.../qtwebengine-5.15.2_p20210421.ebuild | 1 + |
19 |
2 files changed, 373 insertions(+) |
20 |
|
21 |
diff --git a/dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210421-qtbug-91773.patch b/dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210421-qtbug-91773.patch |
22 |
new file mode 100644 |
23 |
index 00000000000..88e7b893e30 |
24 |
--- /dev/null |
25 |
+++ b/dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210421-qtbug-91773.patch |
26 |
@@ -0,0 +1,372 @@ |
27 |
+diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp |
28 |
+index 5597c69f9..2cd48907b 100644 |
29 |
+--- a/src/core/web_contents_adapter.cpp |
30 |
++++ b/src/core/web_contents_adapter.cpp |
31 |
+@@ -716,8 +716,7 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request) |
32 |
+ m_adapterClient->loadFinished(false, request.url(), false, |
33 |
+ net::ERR_DISALLOWED_URL_SCHEME, |
34 |
+ QCoreApplication::translate("WebContentsAdapter", |
35 |
+- "HTTP-POST data can only be sent over HTTP(S) protocol"), |
36 |
+- false); |
37 |
++ "HTTP-POST data can only be sent over HTTP(S) protocol")); |
38 |
+ return; |
39 |
+ } |
40 |
+ params.post_data = network::ResourceRequestBody::CreateFromBytes( |
41 |
+@@ -773,7 +772,7 @@ void WebContentsAdapter::setContent(const QByteArray &data, const QString &mimeT |
42 |
+ |
43 |
+ GURL dataUrlToLoad(urlString); |
44 |
+ if (dataUrlToLoad.spec().size() > url::kMaxURLChars) { |
45 |
+- m_adapterClient->loadFinished(false, baseUrl, false, net::ERR_ABORTED, QString(), false); |
46 |
++ m_adapterClient->loadFinished(false, baseUrl, false, net::ERR_ABORTED, QString()); |
47 |
+ return; |
48 |
+ } |
49 |
+ content::NavigationController::LoadURLParams params((dataUrlToLoad)); |
50 |
+@@ -1995,6 +1994,7 @@ void WebContentsAdapter::discard() |
51 |
+ if (m_webContents->IsLoading()) { |
52 |
+ m_webContentsDelegate->didFailLoad(m_webContentsDelegate->url(webContents()), net::Error::ERR_ABORTED, |
53 |
+ QStringLiteral("Discarded")); |
54 |
++ m_webContentsDelegate->DidStopLoading(); |
55 |
+ } |
56 |
+ |
57 |
+ content::WebContents::CreateParams createParams(m_profileAdapter->profile()); |
58 |
+diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h |
59 |
+index 267266d81..afc43806a 100644 |
60 |
+--- a/src/core/web_contents_adapter_client.h |
61 |
++++ b/src/core/web_contents_adapter_client.h |
62 |
+@@ -466,8 +466,7 @@ public: |
63 |
+ virtual void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) = 0; |
64 |
+ virtual void loadCommitted() = 0; |
65 |
+ virtual void loadVisuallyCommitted() = 0; |
66 |
+- virtual void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, |
67 |
+- const QString &errorDescription, bool triggersErrorPage) = 0; |
68 |
++ virtual void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) = 0; |
69 |
+ virtual void focusContainer() = 0; |
70 |
+ virtual void unhandledKeyEvent(QKeyEvent *event) = 0; |
71 |
+ virtual QSharedPointer<WebContentsAdapter> |
72 |
+diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp |
73 |
+index 1e92a46f8..f0e4130e8 100644 |
74 |
+--- a/src/core/web_contents_delegate_qt.cpp |
75 |
++++ b/src/core/web_contents_delegate_qt.cpp |
76 |
+@@ -259,14 +259,12 @@ void WebContentsDelegateQt::CloseContents(content::WebContents *source) |
77 |
+ |
78 |
+ void WebContentsDelegateQt::LoadProgressChanged(double progress) |
79 |
+ { |
80 |
+- QUrl current_url(m_viewClient->webContentsAdapter()->getNavigationEntryOriginalUrl(m_viewClient->webContentsAdapter()->currentNavigationEntryIndex())); |
81 |
+- int p = qMin(qRound(progress * 100), 100); |
82 |
+- |
83 |
+- if (!m_loadingErrorFrameList.isEmpty() || !m_loadProgressMap.contains(current_url) || m_loadProgressMap[current_url] == 100 || p == 100) |
84 |
++ if (!m_loadingErrorFrameList.isEmpty() || !m_loadingInfo.isLoading()) // suppress signals that aren't between loadStarted and loadFinished |
85 |
+ return; |
86 |
+ |
87 |
+- if (p > m_loadProgressMap[current_url]) { // ensure strict monotonic increase |
88 |
+- m_loadProgressMap[current_url] = p; |
89 |
++ int p = qMin(qRound(progress * 100), 100); |
90 |
++ if (p > m_loadingInfo.progress) { // ensure strict monotonic increase |
91 |
++ m_loadingInfo.progress = p; |
92 |
+ m_viewClient->loadProgressChanged(p); |
93 |
+ } |
94 |
+ } |
95 |
+@@ -339,35 +337,21 @@ void WebContentsDelegateQt::RenderViewHostChanged(content::RenderViewHost *, con |
96 |
+ } |
97 |
+ } |
98 |
+ |
99 |
+-void WebContentsDelegateQt::EmitLoadStarted(const QUrl &url, bool isErrorPage) |
100 |
++void WebContentsDelegateQt::emitLoadStarted(bool isErrorPage) |
101 |
+ { |
102 |
+- m_isDocumentEmpty = true; |
103 |
+- m_viewClient->loadStarted(url, isErrorPage); |
104 |
+- m_viewClient->updateNavigationActions(); |
105 |
+- |
106 |
+- if ((url.hasFragment() || m_lastLoadedUrl.hasFragment()) |
107 |
+- && url.adjusted(QUrl::RemoveFragment) == m_lastLoadedUrl.adjusted(QUrl::RemoveFragment) |
108 |
+- && !m_isNavigationCommitted) { |
109 |
+- m_loadProgressMap.insert(url, 100); |
110 |
+- m_lastLoadedUrl = url; |
111 |
+- m_viewClient->loadProgressChanged(100); |
112 |
++ // only report first ever load start or separate one for error page only |
113 |
++ if (!isErrorPage && m_loadingInfo.isLoading()) // already running |
114 |
+ return; |
115 |
+- } |
116 |
+ |
117 |
+- if (!m_loadProgressMap.isEmpty()) { |
118 |
+- QMap<QUrl, int>::iterator it = m_loadProgressMap.begin(); |
119 |
+- while (it != m_loadProgressMap.end()) { |
120 |
+- if (it.value() == 100) { |
121 |
+- it = m_loadProgressMap.erase(it); |
122 |
+- continue; |
123 |
+- } |
124 |
+- ++it; |
125 |
+- } |
126 |
++ m_isDocumentEmpty = true; // reset to default which may only be overridden on actual resource load complete |
127 |
++ if (!isErrorPage) { |
128 |
++ m_loadingInfo.progress = 0; |
129 |
++ m_viewClient->loadStarted(m_loadingInfo.url, false); |
130 |
++ m_viewClient->updateNavigationActions(); |
131 |
++ m_viewClient->loadProgressChanged(0); |
132 |
++ } else { |
133 |
++ m_viewClient->loadStarted(toQt(GURL(content::kUnreachableWebDataURL)), true); |
134 |
+ } |
135 |
+- |
136 |
+- m_lastLoadedUrl = url; |
137 |
+- m_loadProgressMap.insert(url, 0); |
138 |
+- m_viewClient->loadProgressChanged(0); |
139 |
+ } |
140 |
+ |
141 |
+ void WebContentsDelegateQt::DidStartNavigation(content::NavigationHandle *navigation_handle) |
142 |
+@@ -375,34 +359,41 @@ void WebContentsDelegateQt::DidStartNavigation(content::NavigationHandle *naviga |
143 |
+ if (!webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)) |
144 |
+ navigation_handle->SetSilentlyIgnoreErrors(); |
145 |
+ |
146 |
+- if (!navigation_handle->IsInMainFrame()) |
147 |
++ if (!navigation_handle->IsInMainFrame() || !web_contents()->IsLoadingToDifferentDocument()) |
148 |
+ return; |
149 |
+ |
150 |
+ |
151 |
+ m_loadingErrorFrameList.clear(); |
152 |
+ m_faviconManager->resetCandidates(); |
153 |
+- EmitLoadStarted(toQt(navigation_handle->GetURL())); |
154 |
++ |
155 |
++ m_loadingInfo.url = toQt(navigation_handle->GetURL()); |
156 |
++ // IsErrorPage is only set after navigation commit, so check it otherwise: error page shouldn't have navigation entry |
157 |
++ bool isErrorPage = m_loadingInfo.triggersErrorPage && !navigation_handle->GetNavigationEntry(); |
158 |
++ emitLoadStarted(isErrorPage); |
159 |
+ } |
160 |
+ |
161 |
+-void WebContentsDelegateQt::EmitLoadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription, bool triggersErrorPage) |
162 |
++void WebContentsDelegateQt::emitLoadFinished(bool isErrorPage) |
163 |
+ { |
164 |
+- Q_ASSERT(!isErrorPage || webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)); |
165 |
+- Q_ASSERT((triggersErrorPage && webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)) || !triggersErrorPage); |
166 |
+- |
167 |
+- // When error page enabled we don't need to send the error page load finished signal |
168 |
+- if (m_loadProgressMap[url] == 100) |
169 |
++ if (!m_loadingInfo.isLoading()) // not currently running |
170 |
+ return; |
171 |
+ |
172 |
+- m_lastLoadedUrl = url; |
173 |
+- m_loadProgressMap[url] = 100; |
174 |
+- m_isNavigationCommitted = false; |
175 |
+- m_viewClient->loadProgressChanged(100); |
176 |
++ Q_ASSERT(!isErrorPage || webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)); |
177 |
++ Q_ASSERT((m_loadingInfo.triggersErrorPage && webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)) || !m_loadingInfo.triggersErrorPage); |
178 |
++ |
179 |
++ if (!isErrorPage) { |
180 |
++ if (m_loadingInfo.progress < 100) { |
181 |
++ m_loadingInfo.progress = 100; |
182 |
++ m_viewClient->loadProgressChanged(100); |
183 |
++ } |
184 |
+ |
185 |
+- m_viewClient->loadFinished(success, url, isErrorPage, errorCode, errorDescription, triggersErrorPage); |
186 |
+- m_viewClient->updateNavigationActions(); |
187 |
++ m_viewClient->loadFinished(m_loadingInfo.success, m_loadingInfo.url, false, m_loadingInfo.errorCode, m_loadingInfo.errorDescription); |
188 |
++ m_viewClient->updateNavigationActions(); |
189 |
++ } else { |
190 |
++ m_viewClient->loadFinished(false, toQt(GURL(content::kUnreachableWebDataURL)), true, 0, QString()); |
191 |
++ } |
192 |
+ } |
193 |
+ |
194 |
+-void WebContentsDelegateQt::EmitLoadCommitted() |
195 |
++void WebContentsDelegateQt::emitLoadCommitted() |
196 |
+ { |
197 |
+ m_findTextHelper->handleLoadCommitted(); |
198 |
+ m_viewClient->loadCommitted(); |
199 |
+@@ -422,8 +413,7 @@ void WebContentsDelegateQt::DidFinishNavigation(content::NavigationHandle *navig |
200 |
+ profileAdapter->visitedLinksManager()->addUrl(url); |
201 |
+ } |
202 |
+ |
203 |
+- m_isNavigationCommitted = true; |
204 |
+- EmitLoadCommitted(); |
205 |
++ emitLoadCommitted(); |
206 |
+ } |
207 |
+ |
208 |
+ // Success is reported by DidFinishLoad, but DidFailLoad is now dead code and needs to be handled below |
209 |
+@@ -440,11 +430,11 @@ void WebContentsDelegateQt::DidFinishNavigation(content::NavigationHandle *navig |
210 |
+ // Now report we are starting to load an error-page. |
211 |
+ m_loadingErrorFrameList.append(navigation_handle->GetRenderFrameHost()->GetRoutingID()); |
212 |
+ m_faviconManager->resetCandidates(); |
213 |
+- EmitLoadStarted(toQt(GURL(content::kUnreachableWebDataURL)), true); |
214 |
++ emitLoadStarted(true); |
215 |
+ |
216 |
+ // If it is already committed we will not see another DidFinishNavigation call or a DidFinishLoad call. |
217 |
+ if (navigation_handle->HasCommitted()) |
218 |
+- EmitLoadCommitted(); |
219 |
++ emitLoadCommitted(); |
220 |
+ } |
221 |
+ } |
222 |
+ |
223 |
+@@ -486,6 +476,9 @@ void WebContentsDelegateQt::DidStopLoading() |
224 |
+ |
225 |
+ if (m_loadingState == LoadingState::Loading) |
226 |
+ setLoadingState(LoadingState::Loaded); |
227 |
++ |
228 |
++ emitLoadFinished(); |
229 |
++ m_loadingInfo.clear(); |
230 |
+ } |
231 |
+ |
232 |
+ void WebContentsDelegateQt::didFailLoad(const QUrl &url, int errorCode, const QString &errorDescription) |
233 |
+@@ -495,7 +488,11 @@ void WebContentsDelegateQt::didFailLoad(const QUrl &url, int errorCode, const QS |
234 |
+ // Delay notifying failure until the error-page is done loading. |
235 |
+ // Error-pages are not loaded on failures due to abort. |
236 |
+ bool aborted = (errorCode == -3 /* ERR_ABORTED*/ ); |
237 |
+- EmitLoadFinished(false /* success */ , url, false /* isErrorPage */, errorCode, errorDescription, errorPageEnabled && !aborted); |
238 |
++ m_loadingInfo.success = false; |
239 |
++ m_loadingInfo.url = url; |
240 |
++ m_loadingInfo.errorCode = errorCode; |
241 |
++ m_loadingInfo.errorDescription = errorDescription; |
242 |
++ m_loadingInfo.triggersErrorPage = errorPageEnabled && !aborted; |
243 |
+ } |
244 |
+ |
245 |
+ void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code) |
246 |
+@@ -511,8 +508,7 @@ void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_h |
247 |
+ Q_ASSERT(error_code == -3 /* ERR_ABORTED */); |
248 |
+ m_loadingErrorFrameList.removeOne(render_frame_host->GetRoutingID()); |
249 |
+ m_viewClient->iconChanged(QUrl()); |
250 |
+- |
251 |
+- EmitLoadFinished(false /* success */, toQt(validated_url), true /* isErrorPage */); |
252 |
++ emitLoadFinished(/* isErrorPage = */true); |
253 |
+ return; |
254 |
+ } |
255 |
+ // Qt6: Consider getting rid of the error_description (Chromium already has) |
256 |
+@@ -532,7 +528,7 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame |
257 |
+ // Trigger LoadFinished signal for main frame's error page only. |
258 |
+ if (!render_frame_host->GetParent()) { |
259 |
+ m_viewClient->iconChanged(QUrl()); |
260 |
+- EmitLoadFinished(true /* success */, toQt(validated_url), true /* isErrorPage */); |
261 |
++ emitLoadFinished(/* isErrorPage = */true); |
262 |
+ } |
263 |
+ |
264 |
+ return; |
265 |
+@@ -550,7 +546,11 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame |
266 |
+ int http_statuscode = entry ? entry->GetHttpStatusCode() : 0; |
267 |
+ bool errorPageEnabled = webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled); |
268 |
+ bool triggersErrorPage = errorPageEnabled && (http_statuscode >= 400) && m_isDocumentEmpty; |
269 |
+- EmitLoadFinished(http_statuscode < 400, toQt(validated_url), false /* isErrorPage */, http_statuscode, QString(), triggersErrorPage); |
270 |
++ |
271 |
++ m_loadingInfo.success = http_statuscode < 400; |
272 |
++ m_loadingInfo.url = toQt(validated_url); |
273 |
++ m_loadingInfo.errorCode = http_statuscode; |
274 |
++ m_loadingInfo.triggersErrorPage = triggersErrorPage; |
275 |
+ } |
276 |
+ |
277 |
+ void WebContentsDelegateQt::DidUpdateFaviconURL(content::RenderFrameHost *render_frame_host, const std::vector<blink::mojom::FaviconURLPtr> &candidates) |
278 |
+diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h |
279 |
+index 5a3dff6e9..7149f6bff 100644 |
280 |
+--- a/src/core/web_contents_delegate_qt.h |
281 |
++++ b/src/core/web_contents_delegate_qt.h |
282 |
+@@ -216,9 +216,9 @@ private: |
283 |
+ WindowOpenDisposition disposition, const gfx::Rect &initial_pos, |
284 |
+ const QUrl &url, |
285 |
+ bool user_gesture); |
286 |
+- void EmitLoadStarted(const QUrl &url, bool isErrorPage = false); |
287 |
+- void EmitLoadFinished(bool success, const QUrl &url, bool isErrorPage = false, int errorCode = 0, const QString &errorDescription = QString(), bool triggersErrorPage = false); |
288 |
+- void EmitLoadCommitted(); |
289 |
++ void emitLoadStarted(bool isErrorPage = false); |
290 |
++ void emitLoadFinished(bool isErrorPage = false); |
291 |
++ void emitLoadCommitted(); |
292 |
+ |
293 |
+ LoadingState determineLoadingState(content::WebContents *contents); |
294 |
+ void setLoadingState(LoadingState state); |
295 |
+@@ -242,9 +242,17 @@ private: |
296 |
+ int m_desktopStreamCount = 0; |
297 |
+ mutable bool m_pendingUrlUpdate = false; |
298 |
+ |
299 |
+- QMap<QUrl, int> m_loadProgressMap; |
300 |
+- QUrl m_lastLoadedUrl; |
301 |
+- bool m_isNavigationCommitted = false; |
302 |
++ struct LoadingInfo { |
303 |
++ bool success = false; |
304 |
++ int progress = -1; |
305 |
++ bool isLoading() const { return progress >= 0; } |
306 |
++ QUrl url; |
307 |
++ int errorCode = 0; |
308 |
++ QString errorDescription; |
309 |
++ bool triggersErrorPage = false; |
310 |
++ void clear() { *this = LoadingInfo(); } |
311 |
++ } m_loadingInfo; |
312 |
++ |
313 |
+ bool m_isDocumentEmpty = true; |
314 |
+ base::WeakPtrFactory<WebContentsDelegateQt> m_weakPtrFactory { this }; |
315 |
+ }; |
316 |
+diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp |
317 |
+index 6ab1c97cb..1de7f1c7f 100644 |
318 |
+--- a/src/webengine/api/qquickwebengineview.cpp |
319 |
++++ b/src/webengine/api/qquickwebengineview.cpp |
320 |
+@@ -496,11 +496,9 @@ Q_STATIC_ASSERT(static_cast<int>(WebEngineError::NoErrorDomain) == static_cast<i |
321 |
+ Q_STATIC_ASSERT(static_cast<int>(WebEngineError::CertificateErrorDomain) == static_cast<int>(QQuickWebEngineView::CertificateErrorDomain)); |
322 |
+ Q_STATIC_ASSERT(static_cast<int>(WebEngineError::DnsErrorDomain) == static_cast<int>(QQuickWebEngineView::DnsErrorDomain)); |
323 |
+ |
324 |
+-void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, |
325 |
+- const QString &errorDescription, bool triggersErrorPage) |
326 |
++void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) |
327 |
+ { |
328 |
+ Q_Q(QQuickWebEngineView); |
329 |
+- Q_UNUSED(triggersErrorPage); |
330 |
+ |
331 |
+ if (isErrorPage) { |
332 |
+ #if QT_CONFIG(webengine_testsupport) |
333 |
+diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h |
334 |
+index ebe55c345..ec535298b 100644 |
335 |
+--- a/src/webengine/api/qquickwebengineview_p_p.h |
336 |
++++ b/src/webengine/api/qquickwebengineview_p_p.h |
337 |
+@@ -116,8 +116,7 @@ public: |
338 |
+ void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) override; |
339 |
+ void loadCommitted() override; |
340 |
+ void loadVisuallyCommitted() override; |
341 |
+- void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, |
342 |
+- const QString &errorDescription, bool triggersErrorPage) override; |
343 |
++ void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) override; |
344 |
+ void focusContainer() override; |
345 |
+ void unhandledKeyEvent(QKeyEvent *event) override; |
346 |
+ QSharedPointer<QtWebEngineCore::WebContentsAdapter> |
347 |
+diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp |
348 |
+index e08afed44..b32c15039 100644 |
349 |
+--- a/src/webenginewidgets/api/qwebenginepage.cpp |
350 |
++++ b/src/webenginewidgets/api/qwebenginepage.cpp |
351 |
+@@ -282,28 +282,20 @@ void QWebEnginePagePrivate::loadStarted(const QUrl &provisionalUrl, bool isError |
352 |
+ QTimer::singleShot(0, q, &QWebEnginePage::loadStarted); |
353 |
+ } |
354 |
+ |
355 |
+-void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, |
356 |
+- const QString &errorDescription, bool triggersErrorPage) |
357 |
++void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) |
358 |
+ { |
359 |
+ Q_Q(QWebEnginePage); |
360 |
+ Q_UNUSED(url); |
361 |
+ Q_UNUSED(errorCode); |
362 |
+ Q_UNUSED(errorDescription); |
363 |
+ |
364 |
+- if (isErrorPage) { |
365 |
+- QTimer::singleShot(0, q, [q](){ |
366 |
+- emit q->loadFinished(false); |
367 |
+- }); |
368 |
++ if (isErrorPage) |
369 |
+ return; |
370 |
+- } |
371 |
+ |
372 |
+ isLoading = false; |
373 |
+- Q_ASSERT((success && !triggersErrorPage) || !success); |
374 |
+- if (!triggersErrorPage) { |
375 |
+- QTimer::singleShot(0, q, [q, success](){ |
376 |
+- emit q->loadFinished(success); |
377 |
+- }); |
378 |
+- } |
379 |
++ QTimer::singleShot(0, q, [q, success](){ |
380 |
++ emit q->loadFinished(success); |
381 |
++ }); |
382 |
+ } |
383 |
+ |
384 |
+ void QWebEnginePagePrivate::didPrintPageToPdf(const QString &filePath, bool success) |
385 |
+diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h |
386 |
+index 82ce99503..ae3ab5d25 100644 |
387 |
+--- a/src/webenginewidgets/api/qwebenginepage_p.h |
388 |
++++ b/src/webenginewidgets/api/qwebenginepage_p.h |
389 |
+@@ -107,8 +107,7 @@ public: |
390 |
+ void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) override; |
391 |
+ void loadCommitted() override { } |
392 |
+ void loadVisuallyCommitted() override { } |
393 |
+- void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, |
394 |
+- const QString &errorDescription, bool triggersErrorPage) override; |
395 |
++ void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) override; |
396 |
+ void focusContainer() override; |
397 |
+ void unhandledKeyEvent(QKeyEvent *event) override; |
398 |
+ QSharedPointer<QtWebEngineCore::WebContentsAdapter> |
399 |
|
400 |
diff --git a/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210421.ebuild b/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210421.ebuild |
401 |
index 3aaec6f3807..39fbcd088e1 100644 |
402 |
--- a/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210421.ebuild |
403 |
+++ b/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210421.ebuild |
404 |
@@ -103,6 +103,7 @@ PATCHES=( |
405 |
"${FILESDIR}/${PN}-5.15.2_p20210406-glibc-2.33.patch" # by Fedora, bug 769989 |
406 |
"${FILESDIR}/${PN}-5.15.2_p20210406-gcc11.patch" # by Fedora, bug 768261 |
407 |
"${FILESDIR}/${PN}-5.15.2_p20210406-icu69.patch" # bug 781236 |
408 |
+ "${FILESDIR}/${P}-qtbug-91773.patch" # in Qt "5.15.5" |
409 |
) |
410 |
|
411 |
src_unpack() { |