Gentoo Archives: gentoo-commits

From: Andreas Sturmlechner <asturm@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwebengine/files/, dev-qt/qtwebengine/
Date: Mon, 17 May 2021 21:15:16
Message-Id: 1621286087.0fa526a294b2183c25512dad101db37aed871c54.asturm@gentoo
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() {